(global["webpackJsonp"] = global["webpackJsonp"] || []).push([[0],{
/***/ "../node_modules/moment/locale sync recursive ^\\.\\/.*$":
/***/ (function(module, exports, __webpack_require__) {
var map = {
"./af": "../node_modules/moment/locale/af.js",
"./af.js": "../node_modules/moment/locale/af.js",
"./ar": "../node_modules/moment/locale/ar.js",
"./ar-dz": "../node_modules/moment/locale/ar-dz.js",
"./ar-dz.js": "../node_modules/moment/locale/ar-dz.js",
"./ar-kw": "../node_modules/moment/locale/ar-kw.js",
"./ar-kw.js": "../node_modules/moment/locale/ar-kw.js",
"./ar-ly": "../node_modules/moment/locale/ar-ly.js",
"./ar-ly.js": "../node_modules/moment/locale/ar-ly.js",
"./ar-ma": "../node_modules/moment/locale/ar-ma.js",
"./ar-ma.js": "../node_modules/moment/locale/ar-ma.js",
"./ar-sa": "../node_modules/moment/locale/ar-sa.js",
"./ar-sa.js": "../node_modules/moment/locale/ar-sa.js",
"./ar-tn": "../node_modules/moment/locale/ar-tn.js",
"./ar-tn.js": "../node_modules/moment/locale/ar-tn.js",
"./ar.js": "../node_modules/moment/locale/ar.js",
"./az": "../node_modules/moment/locale/az.js",
"./az.js": "../node_modules/moment/locale/az.js",
"./be": "../node_modules/moment/locale/be.js",
"./be.js": "../node_modules/moment/locale/be.js",
"./bg": "../node_modules/moment/locale/bg.js",
"./bg.js": "../node_modules/moment/locale/bg.js",
"./bm": "../node_modules/moment/locale/bm.js",
"./bm.js": "../node_modules/moment/locale/bm.js",
"./bn": "../node_modules/moment/locale/bn.js",
"./bn.js": "../node_modules/moment/locale/bn.js",
"./bo": "../node_modules/moment/locale/bo.js",
"./bo.js": "../node_modules/moment/locale/bo.js",
"./br": "../node_modules/moment/locale/br.js",
"./br.js": "../node_modules/moment/locale/br.js",
"./bs": "../node_modules/moment/locale/bs.js",
"./bs.js": "../node_modules/moment/locale/bs.js",
"./ca": "../node_modules/moment/locale/ca.js",
"./ca.js": "../node_modules/moment/locale/ca.js",
"./cs": "../node_modules/moment/locale/cs.js",
"./cs.js": "../node_modules/moment/locale/cs.js",
"./cv": "../node_modules/moment/locale/cv.js",
"./cv.js": "../node_modules/moment/locale/cv.js",
"./cy": "../node_modules/moment/locale/cy.js",
"./cy.js": "../node_modules/moment/locale/cy.js",
"./da": "../node_modules/moment/locale/da.js",
"./da.js": "../node_modules/moment/locale/da.js",
"./de": "../node_modules/moment/locale/de.js",
"./de-at": "../node_modules/moment/locale/de-at.js",
"./de-at.js": "../node_modules/moment/locale/de-at.js",
"./de-ch": "../node_modules/moment/locale/de-ch.js",
"./de-ch.js": "../node_modules/moment/locale/de-ch.js",
"./de.js": "../node_modules/moment/locale/de.js",
"./dv": "../node_modules/moment/locale/dv.js",
"./dv.js": "../node_modules/moment/locale/dv.js",
"./el": "../node_modules/moment/locale/el.js",
"./el.js": "../node_modules/moment/locale/el.js",
"./en-au": "../node_modules/moment/locale/en-au.js",
"./en-au.js": "../node_modules/moment/locale/en-au.js",
"./en-ca": "../node_modules/moment/locale/en-ca.js",
"./en-ca.js": "../node_modules/moment/locale/en-ca.js",
"./en-gb": "../node_modules/moment/locale/en-gb.js",
"./en-gb.js": "../node_modules/moment/locale/en-gb.js",
"./en-ie": "../node_modules/moment/locale/en-ie.js",
"./en-ie.js": "../node_modules/moment/locale/en-ie.js",
"./en-il": "../node_modules/moment/locale/en-il.js",
"./en-il.js": "../node_modules/moment/locale/en-il.js",
"./en-in": "../node_modules/moment/locale/en-in.js",
"./en-in.js": "../node_modules/moment/locale/en-in.js",
"./en-nz": "../node_modules/moment/locale/en-nz.js",
"./en-nz.js": "../node_modules/moment/locale/en-nz.js",
"./en-sg": "../node_modules/moment/locale/en-sg.js",
"./en-sg.js": "../node_modules/moment/locale/en-sg.js",
"./eo": "../node_modules/moment/locale/eo.js",
"./eo.js": "../node_modules/moment/locale/eo.js",
"./es": "../node_modules/moment/locale/es.js",
"./es-do": "../node_modules/moment/locale/es-do.js",
"./es-do.js": "../node_modules/moment/locale/es-do.js",
"./es-us": "../node_modules/moment/locale/es-us.js",
"./es-us.js": "../node_modules/moment/locale/es-us.js",
"./es.js": "../node_modules/moment/locale/es.js",
"./et": "../node_modules/moment/locale/et.js",
"./et.js": "../node_modules/moment/locale/et.js",
"./eu": "../node_modules/moment/locale/eu.js",
"./eu.js": "../node_modules/moment/locale/eu.js",
"./fa": "../node_modules/moment/locale/fa.js",
"./fa.js": "../node_modules/moment/locale/fa.js",
"./fi": "../node_modules/moment/locale/fi.js",
"./fi.js": "../node_modules/moment/locale/fi.js",
"./fil": "../node_modules/moment/locale/fil.js",
"./fil.js": "../node_modules/moment/locale/fil.js",
"./fo": "../node_modules/moment/locale/fo.js",
"./fo.js": "../node_modules/moment/locale/fo.js",
"./fr": "../node_modules/moment/locale/fr.js",
"./fr-ca": "../node_modules/moment/locale/fr-ca.js",
"./fr-ca.js": "../node_modules/moment/locale/fr-ca.js",
"./fr-ch": "../node_modules/moment/locale/fr-ch.js",
"./fr-ch.js": "../node_modules/moment/locale/fr-ch.js",
"./fr.js": "../node_modules/moment/locale/fr.js",
"./fy": "../node_modules/moment/locale/fy.js",
"./fy.js": "../node_modules/moment/locale/fy.js",
"./ga": "../node_modules/moment/locale/ga.js",
"./ga.js": "../node_modules/moment/locale/ga.js",
"./gd": "../node_modules/moment/locale/gd.js",
"./gd.js": "../node_modules/moment/locale/gd.js",
"./gl": "../node_modules/moment/locale/gl.js",
"./gl.js": "../node_modules/moment/locale/gl.js",
"./gom-deva": "../node_modules/moment/locale/gom-deva.js",
"./gom-deva.js": "../node_modules/moment/locale/gom-deva.js",
"./gom-latn": "../node_modules/moment/locale/gom-latn.js",
"./gom-latn.js": "../node_modules/moment/locale/gom-latn.js",
"./gu": "../node_modules/moment/locale/gu.js",
"./gu.js": "../node_modules/moment/locale/gu.js",
"./he": "../node_modules/moment/locale/he.js",
"./he.js": "../node_modules/moment/locale/he.js",
"./hi": "../node_modules/moment/locale/hi.js",
"./hi.js": "../node_modules/moment/locale/hi.js",
"./hr": "../node_modules/moment/locale/hr.js",
"./hr.js": "../node_modules/moment/locale/hr.js",
"./hu": "../node_modules/moment/locale/hu.js",
"./hu.js": "../node_modules/moment/locale/hu.js",
"./hy-am": "../node_modules/moment/locale/hy-am.js",
"./hy-am.js": "../node_modules/moment/locale/hy-am.js",
"./id": "../node_modules/moment/locale/id.js",
"./id.js": "../node_modules/moment/locale/id.js",
"./is": "../node_modules/moment/locale/is.js",
"./is.js": "../node_modules/moment/locale/is.js",
"./it": "../node_modules/moment/locale/it.js",
"./it-ch": "../node_modules/moment/locale/it-ch.js",
"./it-ch.js": "../node_modules/moment/locale/it-ch.js",
"./it.js": "../node_modules/moment/locale/it.js",
"./ja": "../node_modules/moment/locale/ja.js",
"./ja.js": "../node_modules/moment/locale/ja.js",
"./jv": "../node_modules/moment/locale/jv.js",
"./jv.js": "../node_modules/moment/locale/jv.js",
"./ka": "../node_modules/moment/locale/ka.js",
"./ka.js": "../node_modules/moment/locale/ka.js",
"./kk": "../node_modules/moment/locale/kk.js",
"./kk.js": "../node_modules/moment/locale/kk.js",
"./km": "../node_modules/moment/locale/km.js",
"./km.js": "../node_modules/moment/locale/km.js",
"./kn": "../node_modules/moment/locale/kn.js",
"./kn.js": "../node_modules/moment/locale/kn.js",
"./ko": "../node_modules/moment/locale/ko.js",
"./ko.js": "../node_modules/moment/locale/ko.js",
"./ku": "../node_modules/moment/locale/ku.js",
"./ku.js": "../node_modules/moment/locale/ku.js",
"./ky": "../node_modules/moment/locale/ky.js",
"./ky.js": "../node_modules/moment/locale/ky.js",
"./lb": "../node_modules/moment/locale/lb.js",
"./lb.js": "../node_modules/moment/locale/lb.js",
"./lo": "../node_modules/moment/locale/lo.js",
"./lo.js": "../node_modules/moment/locale/lo.js",
"./lt": "../node_modules/moment/locale/lt.js",
"./lt.js": "../node_modules/moment/locale/lt.js",
"./lv": "../node_modules/moment/locale/lv.js",
"./lv.js": "../node_modules/moment/locale/lv.js",
"./me": "../node_modules/moment/locale/me.js",
"./me.js": "../node_modules/moment/locale/me.js",
"./mi": "../node_modules/moment/locale/mi.js",
"./mi.js": "../node_modules/moment/locale/mi.js",
"./mk": "../node_modules/moment/locale/mk.js",
"./mk.js": "../node_modules/moment/locale/mk.js",
"./ml": "../node_modules/moment/locale/ml.js",
"./ml.js": "../node_modules/moment/locale/ml.js",
"./mn": "../node_modules/moment/locale/mn.js",
"./mn.js": "../node_modules/moment/locale/mn.js",
"./mr": "../node_modules/moment/locale/mr.js",
"./mr.js": "../node_modules/moment/locale/mr.js",
"./ms": "../node_modules/moment/locale/ms.js",
"./ms-my": "../node_modules/moment/locale/ms-my.js",
"./ms-my.js": "../node_modules/moment/locale/ms-my.js",
"./ms.js": "../node_modules/moment/locale/ms.js",
"./mt": "../node_modules/moment/locale/mt.js",
"./mt.js": "../node_modules/moment/locale/mt.js",
"./my": "../node_modules/moment/locale/my.js",
"./my.js": "../node_modules/moment/locale/my.js",
"./nb": "../node_modules/moment/locale/nb.js",
"./nb.js": "../node_modules/moment/locale/nb.js",
"./ne": "../node_modules/moment/locale/ne.js",
"./ne.js": "../node_modules/moment/locale/ne.js",
"./nl": "../node_modules/moment/locale/nl.js",
"./nl-be": "../node_modules/moment/locale/nl-be.js",
"./nl-be.js": "../node_modules/moment/locale/nl-be.js",
"./nl.js": "../node_modules/moment/locale/nl.js",
"./nn": "../node_modules/moment/locale/nn.js",
"./nn.js": "../node_modules/moment/locale/nn.js",
"./oc-lnc": "../node_modules/moment/locale/oc-lnc.js",
"./oc-lnc.js": "../node_modules/moment/locale/oc-lnc.js",
"./pa-in": "../node_modules/moment/locale/pa-in.js",
"./pa-in.js": "../node_modules/moment/locale/pa-in.js",
"./pl": "../node_modules/moment/locale/pl.js",
"./pl.js": "../node_modules/moment/locale/pl.js",
"./pt": "../node_modules/moment/locale/pt.js",
"./pt-br": "../node_modules/moment/locale/pt-br.js",
"./pt-br.js": "../node_modules/moment/locale/pt-br.js",
"./pt.js": "../node_modules/moment/locale/pt.js",
"./ro": "../node_modules/moment/locale/ro.js",
"./ro.js": "../node_modules/moment/locale/ro.js",
"./ru": "../node_modules/moment/locale/ru.js",
"./ru.js": "../node_modules/moment/locale/ru.js",
"./sd": "../node_modules/moment/locale/sd.js",
"./sd.js": "../node_modules/moment/locale/sd.js",
"./se": "../node_modules/moment/locale/se.js",
"./se.js": "../node_modules/moment/locale/se.js",
"./si": "../node_modules/moment/locale/si.js",
"./si.js": "../node_modules/moment/locale/si.js",
"./sk": "../node_modules/moment/locale/sk.js",
"./sk.js": "../node_modules/moment/locale/sk.js",
"./sl": "../node_modules/moment/locale/sl.js",
"./sl.js": "../node_modules/moment/locale/sl.js",
"./sq": "../node_modules/moment/locale/sq.js",
"./sq.js": "../node_modules/moment/locale/sq.js",
"./sr": "../node_modules/moment/locale/sr.js",
"./sr-cyrl": "../node_modules/moment/locale/sr-cyrl.js",
"./sr-cyrl.js": "../node_modules/moment/locale/sr-cyrl.js",
"./sr.js": "../node_modules/moment/locale/sr.js",
"./ss": "../node_modules/moment/locale/ss.js",
"./ss.js": "../node_modules/moment/locale/ss.js",
"./sv": "../node_modules/moment/locale/sv.js",
"./sv.js": "../node_modules/moment/locale/sv.js",
"./sw": "../node_modules/moment/locale/sw.js",
"./sw.js": "../node_modules/moment/locale/sw.js",
"./ta": "../node_modules/moment/locale/ta.js",
"./ta.js": "../node_modules/moment/locale/ta.js",
"./te": "../node_modules/moment/locale/te.js",
"./te.js": "../node_modules/moment/locale/te.js",
"./tet": "../node_modules/moment/locale/tet.js",
"./tet.js": "../node_modules/moment/locale/tet.js",
"./tg": "../node_modules/moment/locale/tg.js",
"./tg.js": "../node_modules/moment/locale/tg.js",
"./th": "../node_modules/moment/locale/th.js",
"./th.js": "../node_modules/moment/locale/th.js",
"./tk": "../node_modules/moment/locale/tk.js",
"./tk.js": "../node_modules/moment/locale/tk.js",
"./tl-ph": "../node_modules/moment/locale/tl-ph.js",
"./tl-ph.js": "../node_modules/moment/locale/tl-ph.js",
"./tlh": "../node_modules/moment/locale/tlh.js",
"./tlh.js": "../node_modules/moment/locale/tlh.js",
"./tr": "../node_modules/moment/locale/tr.js",
"./tr.js": "../node_modules/moment/locale/tr.js",
"./tzl": "../node_modules/moment/locale/tzl.js",
"./tzl.js": "../node_modules/moment/locale/tzl.js",
"./tzm": "../node_modules/moment/locale/tzm.js",
"./tzm-latn": "../node_modules/moment/locale/tzm-latn.js",
"./tzm-latn.js": "../node_modules/moment/locale/tzm-latn.js",
"./tzm.js": "../node_modules/moment/locale/tzm.js",
"./ug-cn": "../node_modules/moment/locale/ug-cn.js",
"./ug-cn.js": "../node_modules/moment/locale/ug-cn.js",
"./uk": "../node_modules/moment/locale/uk.js",
"./uk.js": "../node_modules/moment/locale/uk.js",
"./ur": "../node_modules/moment/locale/ur.js",
"./ur.js": "../node_modules/moment/locale/ur.js",
"./uz": "../node_modules/moment/locale/uz.js",
"./uz-latn": "../node_modules/moment/locale/uz-latn.js",
"./uz-latn.js": "../node_modules/moment/locale/uz-latn.js",
"./uz.js": "../node_modules/moment/locale/uz.js",
"./vi": "../node_modules/moment/locale/vi.js",
"./vi.js": "../node_modules/moment/locale/vi.js",
"./x-pseudo": "../node_modules/moment/locale/x-pseudo.js",
"./x-pseudo.js": "../node_modules/moment/locale/x-pseudo.js",
"./yo": "../node_modules/moment/locale/yo.js",
"./yo.js": "../node_modules/moment/locale/yo.js",
"./zh-cn": "../node_modules/moment/locale/zh-cn.js",
"./zh-cn.js": "../node_modules/moment/locale/zh-cn.js",
"./zh-hk": "../node_modules/moment/locale/zh-hk.js",
"./zh-hk.js": "../node_modules/moment/locale/zh-hk.js",
"./zh-mo": "../node_modules/moment/locale/zh-mo.js",
"./zh-mo.js": "../node_modules/moment/locale/zh-mo.js",
"./zh-tw": "../node_modules/moment/locale/zh-tw.js",
"./zh-tw.js": "../node_modules/moment/locale/zh-tw.js"
};
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
var id = map[req];
if(!(id + 1)) { // check for number or string
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return id;
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../node_modules/moment/locale sync recursive ^\\.\\/.*$";
/***/ }),
/***/ "./app/operations/operation-detail/operation-detail.component.html":
/***/ (function(module, exports) {
module.exports = "<ActionBar>\n <NavigationButton android.systemIcon=\"ic_menu_back\" (tap)=\"onBackButtonTap()\">\n </NavigationButton>\n <!-- <Label [text]=\"operation._subject.value + ' - '+ operation._keywordName.value\" horizontalAlignment=\"center\" textWrap=\"true\"></Label> -->\n <Label [text]=\"operation._alarmdate.value + ' ' + operation._alarmtime.value\" horizontalAlignment=\"center\" textWrap=\"true\"></Label>\n \n \n <ActionItem ios.position=\"right\" android.position=\"right\" (tap)=\"onDirectionsButtonTap()\">\n <Label class=\"fas t-20\" text=\"\"></Label> \n </ActionItem>\n</ActionBar>\n<GridLayout>\n <BottomNavigation selectedIndex=\"0\">\n\n <!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->\n <TabStrip>\n <TabStripItem>\n <Label text=\"Info\"></Label>\n <Image src=\"font://\" class=\"fas t-36\"></Image>\n </TabStripItem>\n <TabStripItem class=\"special\">\n <Label text=\"Map\"></Label>\n <Image src=\"font://\" class=\"fas t-36\"></Image>\n </TabStripItem>\n <TabStripItem class=\"special\">\n <Label text=\"Sonstiges\"></Label>\n <Image src=\"font://\" class=\"fas t-36\"></Image>\n </TabStripItem>\n </TabStrip>\n \n <!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->\n <TabContentItem>\n <StackLayout>\n <ScrollView [height]=\"operation._feedback == 'true' && _userIsLoggedIn == true ? '85%' : '100%'\">\n <StackLayout orientation=\"vertical\" width=\"100%\">\n <GridLayout columns=\"auto, *, auto\" rows=\"*,*\" class=\"p-t-10\">\n <Label row=\"0\" rowspan=\"2\" *ngIf=\"operation._icon != undefined\" verticalAlignment=\"center\" col=\"0\" class=\"m-l-15 fas t-20\" [text]=\"operation._icon\"></Label>\n <Label row=\"0\" col=\"1\" horizontalAlignment=\"center\" verticalAlignment=\"center\" [text]=\"operation._subject.value + ' - ' + operation._keywordCategory.value\" class=\"m-x-15 text-center t-20 operationKeyword\" textWrap=\"true\"></Label>\n <Label row=\"1\" col=\"1\" horizontalAlignment=\"center\" verticalAlignment=\"center\" [text]=\"operation._keywordName.value\" class=\"m-x-15 text-center t-20 operationKeyword\" textWrap=\"true\"></Label>\n <Label row=\"0\" rowspan=\"2\" *ngIf=\"operation._icon != undefined\" verticalAlignment=\"center\" col=\"2\" class=\"m-r-15 fas t-20\" [text]=\"operation._icon\"></Label> \n </GridLayout>\n <StackLayout class=\"hr m-10\"></StackLayout>\n <ng-container *ngIf=\"operation._message != undefined\">\n <Label class=\"p-l-15 p-r-15 p-b-10 operationsDetailText\" [text]= \"operation._message.value\" textWrap=\"true\"></Label>\n <StackLayout class=\"hr m-10\"></StackLayout>\n </ng-container>\n <GridLayout columns=\"auto, *\" rows=\"*,*,*,*,*,*,*\">\n <ng-container *ngIf=\"operation._street != undefined\">\n <Label row=\"0\" col=\"0\" [text]=\"operation._street.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n <Label row=\"0\" col=\"1\" [text]=\"operation._street.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n </ng-container>\n <ng-container *ngIf=\"operation._floor != undefined\">\n <Label row=\"1\" col=\"0\" [text]=\"operation._floor.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n <Label row=\"1\" col=\"1\" [text]=\"operation._floor.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n </ng-container>\n <ng-container *ngIf=\"operation._section != undefined\">\n <Label row=\"2\" col=\"0\" [text]=\"operation._section.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n <Label row=\"2\" col=\"1\" [text]=\"operation._section.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n </ng-container>\n <ng-container *ngIf=\"operation._location != undefined\">\n <Label row=\"3\" col=\"0\" [text]=\"operation._location.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n <Label row=\"3\" col=\"1\" [text]=\"operation._location.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n </ng-container>\n <ng-container *ngIf=\"operation._object != undefined\">\n <Label row=\"4\" col=\"0\" [text]=\"operation._object.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n <Label row=\"4\" col=\"1\" [text]=\"operation._object.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n </ng-container>\n <ng-container *ngIf=\"operation._ils != undefined\">\n <StackLayout row=\"5\" colspan=\"2\" class=\"hr m-10\"></StackLayout>\n <Label row=\"6\" col=\"0\" [text]=\"operation._ils.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n <Label row=\"6\" col=\"1\" [text]=\"operation._ils.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n </ng-container>\n </GridLayout>\n <StackLayout class=\"hr m-10\"></StackLayout>\n <ng-container *ngIf=\"operation._gear != undefined\">\n <Label horizontalAlignment=\"center\" [text]=operation._gear.label class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n <Label class=\"p-l-15 p-b-10 operationsDetailText\" [text]=\"operation._gear.value\" textWrap=\"true\"></Label>\n </ng-container>\n </StackLayout>\n </ScrollView>\n <FlexboxLayout height=\"15%\" *ngIf=\"operation._feedback == 'true' && _userIsLoggedIn == true\">\n <Button height=\"100%\" width=\"50%\" text=\"Komme\" [ngClass]=\"['operationFeedbackButton', currentOperationFeedback === 1 || currentOperationFeedback === 0 ? 'feedback-green' : 'feedback-gray']\" verticalAlignment=\"center\" (tap)=\"onTapsetFeedbackState1($event)\"></Button>\n <Button height=\"100%\" width=\"50%\" text=\"Komme nicht\" [ngClass]=\"['operationFeedbackButton', currentOperationFeedback === 2 || currentOperationFeedback === 0 ? 'feedback-red' : 'feedback-gray']\" verticalAlignment=\"center\" (tap)=\"onTapsetFeedbackState2($event)\"></Button> \n </FlexboxLayout>--> \n </StackLayout>\n </TabContentItem>\n <TabContentItem>\n <GridLayout>\n <MapView (mapReady)=\"onMapReady($event)\" iosOverflowSafeArea=\"true\" [latitude]=\"latitude\" [longitude]=\"longitude\" [zoom]=\"zoom\"></MapView>\n </GridLayout>\n </TabContentItem>\n <TabContentItem>\n <ScrollView>\n <StackLayout orientation=\"vertical\" width=\"100%\">\n <ng-container *ngIf=\"operation._operationnumber != undefined\">\n <ng-container *ngIf=\"operation._operationnumber != undefined && operation._operationnumber.value != null\">\n <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._operationnumber.label\" textAlignment=\"center\"></Label>\n <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._operationnumber.value\" textWrap=\"true\"></Label>\n <StackLayout class=\"hr m-10\"></StackLayout>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"operation._rawdata != undefined\">\n <ng-container *ngIf=\"operation._rawdata.value != undefined && operation._rawdata.value != null\">\n <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._rawdata.label\" textAlignment=\"center\"></Label>\n <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._rawdata.value\" textWrap=\"true\"></Label>\n <StackLayout class=\"hr m-10\"></StackLayout>\n </ng-container>\n </ng-container> \n <ng-container *ngIf=\"operation._zveis != undefined\">\n <ng-container *ngIf=\"operation._zveis != undefined && operation._zveis.value != null\">\n <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._zveis.label\" textAlignment=\"center\"></Label>\n <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._zveis.value\" textWrap=\"true\"></Label>\n <StackLayout class=\"hr m-10\"></StackLayout>\n </ng-container>\n </ng-container>\n <Label class=\"m-x-15 operationsDetailText\" text=\"Zeitstempel\" textAlignment=\"center\"></Label>\n <GridLayout columns=\"auto, *\" rows=\"*,*,*\">\n <Label row=\"0\" col=\"0\" [text]=\"operation._alarmtime.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n <Label row=\"1\" col=\"0\" [text]=\"operation._createdAt.label\" *ngIf=\"operation._createdAt != undefined\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n <Label row=\"2\" col=\"0\" text= \"App-Eingangs-Zeit\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label> \n <Label row=\"0\" col=\"1\" [text]=\"operation._alarmtime.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n <Label row=\"1\" col=\"1\" *ngIf=\"operation._createdAt != undefined\" [text]=\"createdAt\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n <Label row=\"2\" col=\"1\" *ngIf=\"operation._incomingTimeStamp != undefined\" [text]=\"incomingTimeStamp\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n <Label row=\"2\" col=\"1\" *ngIf=\"operation._incomingTimeStamp == undefined\" text =\"Nicht gesetzt\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label> \n </GridLayout>\n <StackLayout class=\"hr m-10\"></StackLayout>\n <ng-container *ngIf=\"operation._uuid != undefined\">\n <ng-container *ngIf=\"operation._uuid != undefined && operation._uuid.value != null\">\n <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._uuid.label\" textAlignment=\"center\"></Label>\n <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._uuid.value\" textWrap=\"true\"></Label>\n <StackLayout class=\"hr m-10\"></StackLayout>\n </ng-container>\n </ng-container>\n </StackLayout>\n </ScrollView> \n </TabContentItem> \n </BottomNavigation>\n</GridLayout>"
/***/ }),
/***/ "./app/operations/operation-detail/operation-detail.component.scss":
/***/ (function(module, exports) {
module.exports = "@keyframes empty {}/* Forms */\n/*\n$base-theme:Material;\n$skin-name: alarmiator-mat;\n$swatch-name:Material;\n$border-radius: 2px;\n$primary-palette-name: red;\n$secondary-palette-name: red;\n$theme-type: dark;\n */\nActionBar {\n background-color: #E6153D; }\n\n.tabStripIconText {\n font-size: 18; }\n\n.fas {\n font-family: \"Font Awesome 5 Free\", \"fa-solid-900\";\n font-weight: 900; }\n\n.t-36 {\n font-size: 36; }\n\n.operationsDetailText {\n font-size: 15; }\n\n.trenn-element {\n border-bottom: 1px solid white; }\n\n.text-center {\n text-align: center; }\n\n.operationKeyword {\n font-weight: 900; }\n\n.operationFeedbackButton {\n android-elevation: 4;\n border-color: #1b1b1b;\n border-radius: 2;\n border-width: 1;\n color: whitesmoke;\n font-size: 15;\n font-weight: bold; }\n\n.operationFeedbackButton:active {\n android-elevation: 8;\n border-color: white;\n border-radius: 2;\n border-width: 1;\n color: whitesmoke;\n font-size: 15;\n font-weight: bold; }\n\n.feedback-green {\n background-color: green; }\n\n.feedback-red {\n background-color: red; }\n\n.feedback-gray {\n background-color: gray; }\n"
/***/ }),
/***/ "./app/operations/operation-detail/operation-detail.component.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationDetailComponent", function() { return OperationDetailComponent; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/rxjs/_esm5/operators/index.js");
/* harmony import */ var _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./app/operations/shared/operation.service.ts");
/* harmony import */ var nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/@nativescript/angular/element-registry.js");
/* harmony import */ var nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/nativescript-google-maps-sdk/map-view.js");
/* harmony import */ var nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../node_modules/nativescript-feedback/feedback.js");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var nativescript_directions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/nativescript-directions/directions.js");
/* harmony import */ var nativescript_directions__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(nativescript_directions__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _app_services_feedback_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./app/services/feedback.service.ts");
/* harmony import */ var _app_services_user_service__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./app/services/user.service.ts");
Object(nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4__["registerElement"])("MapView", function () { return __webpack_require__("../node_modules/nativescript-google-maps-sdk/map-view.js").MapView; });
var moment = __webpack_require__("../node_modules/moment/moment.js");
/* ***********************************************************
* This is the item details component in the master-detail structure.
* This component retrieves the passed parameter from the master list component,
* finds the data item by this parameter and displays the detailed data item information.
*************************************************************/
var OperationDetailComponent = /** @class */ (function () {
function OperationDetailComponent(_operationService, _feedbackService, _userService, _pageRoute, _routerExtensions) {
var _this = this;
this._operationService = _operationService;
this._feedbackService = _feedbackService;
this._userService = _userService;
this._pageRoute = _pageRoute;
this._routerExtensions = _routerExtensions;
this._userIsLoggedIn = false;
this.currentOperationFeedback = 0;
//Map events
this.onMapReady = function (event) {
console.log("Map Ready");
_this.mapView2 = event.object;
_this.addMarker();
_this.mapView2.latitude = _this.latitude;
_this.mapView2.longitude = _this.longitude;
};
this.zoom = 17;
}
OperationDetailComponent.prototype.addMarker = function () {
var marker = new nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__["Marker"]();
marker.position = nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__["Position"].positionFromLatLng(this.latitude, this.longitude);
marker.title = "Einsatzort";
marker.userData = { index: 1 };
this.mapView2.addMarker(marker);
};
/* ***********************************************************
* Use the "ngOnInit" handler to get the data item id parameter passed through navigation.
* Get the data item details from the data service using this id and assign it to the
* private property that holds it inside the component.
*************************************************************/
OperationDetailComponent.prototype.ngOnInit = function () {
var _this = this;
/* ***********************************************************
* Learn more about how to get navigation parameters in this documentation article:
* http://docs.nativescript.org/angular/core-concepts/angular-navigation.html#passing-parameter
*************************************************************/
this._pageRoute.activatedRoute
.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (activatedRoute) { return activatedRoute.params; }))
.forEach(function (params) {
var operationId = parseFloat(params.id);
_this._operation = _this._operationService.getOperationById(operationId);
_this.currentOpFeedback = _this._feedbackService.getFeedbackForOperationUUID(_this.operation._uuid['value']);
_this.currentOperationFeedback = 0;
if (_this.currentOpFeedback != null) {
_this.currentOperationFeedback = _this.currentOpFeedback["state"];
_this.feedbackTimestamp = _this.currentOpFeedback["timestamp"];
}
if (_this._operation._lat != undefined) {
_this.latitude = parseFloat(_this._operation._lat.value);
}
else {
_this.latitude = 0;
}
if (_this._operation._lon != undefined) {
_this.longitude = parseFloat(_this._operation._lon.value);
}
else {
_this.longitude = 0;
}
if (_this._operation._createdAt != undefined) {
_this.createdAt = moment(_this._operation._createdAt.value).format("HH:mm:ss");
}
if (_this._operation._incomingTimeStamp != undefined) {
if (moment(_this._operation._incomingTimeStamp).isValid()) {
_this.incomingTimeStamp = moment(_this._operation._incomingTimeStamp).format("HH:mm:ss");
}
else {
_this.incomingTimeStamp = _this._operation._incomingTimeStamp;
}
}
});
this.directions = new nativescript_directions__WEBPACK_IMPORTED_MODULE_7__["Directions"]();
this.feedback = new nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__["Feedback"]();
// GET USER
if (this.operation['_serverUUID'] != undefined) {
var user = this._userService.getUserForServerUUID(this.operation['_serverUUID']);
if (user != null) {
this._serveradress = user['_serveradress'];
this._username = user['_username'];
this._passwordhash = user['_passwordHash'];
if (user['_basedata']['_uuid'] != undefined) {
this._basedataUUID = user['_basedata']['_uuid'];
console.log(this._basedataUUID);
}
else {
console.log("basedataUUID undefined");
this.feedback.warning({
title: "Achtung",
message: "Profil nicht aktuell! Bitte logge dich erneut ein!"
});
this._basedataUUID = null;
}
if (this._basedataUUID != null) {
this._userIsLoggedIn = true;
}
else {
this._userIsLoggedIn = false;
}
}
else {
this._userIsLoggedIn = false;
;
}
}
else {
this._userIsLoggedIn = false;
}
};
Object.defineProperty(OperationDetailComponent.prototype, "operation", {
get: function () {
return this._operation;
},
enumerable: true,
configurable: true
});
/* ***********************************************************
* The back button is essential for a master-detail feature.
*************************************************************/
OperationDetailComponent.prototype.onBackButtonTap = function () {
this._routerExtensions.backToPreviousPage();
};
/* ***********************************************************
* The master-detail template comes with an example of an item edit page.
* Check out the edit page in the /cars/car-detail-edit folder.
*************************************************************/
OperationDetailComponent.prototype.onEditButtonTap = function () {
this._routerExtensions.navigate(["/cars/car-detail-edit", this._operation.id], {
animated: true,
transition: {
name: "slideTop",
duration: 200,
curve: "ease"
}
});
};
OperationDetailComponent.prototype.onDirectionsButtonTap = function () {
this.directions.navigate({
to: {
lat: this.latitude,
lng: this.longitude
},
type: "driving",
ios: {
preferGoogleMaps: true,
allowGoogleMapsWeb: true // If waypoints are passed in and Google Maps is not installed, you can either open Apple Maps and the first waypoint is used as the to-address (the rest is ignored), or you can open Google Maps on web so all waypoints are shown (set this property to true). Default false.
},
android: {
newTask: true // Start as new task. This means it will start a new history stack instead of using the current app. Default true.
}
}).then(function () {
console.log("Maps app launched.");
}, function (error) {
console.log(error);
});
};
OperationDetailComponent.prototype.onTapsetFeedbackState1 = function (event) {
var _this = this;
if (this.operation._uuid != undefined && this._userIsLoggedIn && this.currentOperationFeedback !== 1) {
console.log("KOMME");
this._feedbackService.setFeedback(this._serveradress, this._username, this._passwordhash, this.operation._uuid['value'], this._basedataUUID, 1)
.then(function (result) {
_this._feedbackService.persistFeedback(_this.operation._uuid['value'], moment().format(), 1);
_this.currentOpFeedback = _this._feedbackService.getFeedbackForOperationUUID(_this.operation._uuid['value']);
_this.currentOperationFeedback = _this.currentOpFeedback["state"];
_this.feedbackTimestamp = _this.currentOpFeedback["timestamp"];
});
console.log(this.currentOperationFeedback);
}
};
OperationDetailComponent.prototype.onTapsetFeedbackState2 = function (event) {
var _this = this;
if (this.operation._uuid != undefined && this._userIsLoggedIn && this.currentOperationFeedback !== 2) {
console.log("KOMME NICHT");
this._feedbackService.setFeedback(this._serveradress, this._username, this._passwordhash, this.operation._uuid['value'], this._basedataUUID, 2)
.then(function (result) {
_this._feedbackService.persistFeedback(_this.operation._uuid['value'], moment().format(), 2);
_this.currentOpFeedback = _this._feedbackService.getFeedbackForOperationUUID(_this.operation._uuid['value']);
_this.currentOperationFeedback = _this.currentOpFeedback["state"];
_this.feedbackTimestamp = _this.currentOpFeedback["timestamp"];
});
}
};
OperationDetailComponent.ctorParameters = function () { return [
{ type: _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"] },
{ type: _app_services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"] },
{ type: _app_services_user_service__WEBPACK_IMPORTED_MODULE_9__["UserService"] },
{ type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["PageRoute"] },
{ type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"] }
]; };
__decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])("MapView", { static: false }),
__metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])
], OperationDetailComponent.prototype, "mapView", void 0);
OperationDetailComponent = __decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({
selector: "OperationDetail",
template: __webpack_require__("./app/operations/operation-detail/operation-detail.component.html"),
styles: [__webpack_require__("./app/operations/operation-detail/operation-detail.component.scss")]
}),
__metadata("design:paramtypes", [_shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"],
_app_services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"],
_app_services_user_service__WEBPACK_IMPORTED_MODULE_9__["UserService"],
nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["PageRoute"],
nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"]])
], OperationDetailComponent);
return OperationDetailComponent;
}());
/***/ }),
/***/ "./app/operations/operation-list.component.html":
/***/ (function(module, exports) {
module.exports = "<ActionBar class=\"header primary\" >\n <!-- Should remove the navigation button -->\n <NavigationButton ios:visibility=\"collapsed\"></NavigationButton>\n <Label text=\"ALARMiator\" horizontalAlignment=\"center\" class=\"t-18\"></Label>\n <ActionItem ios.position=\"right\" android.position=\"right\" (tap)=\"onProfileButtonTap()\">\n <Label class=\"fas t-20\" text=\"\"></Label> \n </ActionItem>\n</ActionBar>\n<BottomNavigation selectedIndex=\"0\">\n\n <!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->\n <TabStrip>\n <TabStripItem (tap)=\"onOperationsItemTapped($event)\">\n <Label class=\"tabStripIconText\" text=\"Einsätze\"></Label>\n <Image src=\"font://\" class=\"fas t-36\"></Image>\n </TabStripItem>\n <TabStripItem class=\"special\">\n <Label class=\"tabStripIconText\" text=\"Einstellungen\"></Label>\n <Image src=\"font://\" class=\"fas t-36\"></Image>\n </TabStripItem>\n </TabStrip>\n\n <!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->\n <TabContentItem>\n <GridLayout>\n <RadListView #listview [items]=\"operations\" (itemTap)=\"onOperationItemTap($event)\" class=\"operations-list\" swipeActions=\"true\" \n (itemSwipeProgressEnded)=\"onSwipeCellFinished($event)\"\n (itemSwipeProgressStarted)=\"onSwipeCellStarted($event)\" (itemSwipeProgressChanged)=\"onCellSwiping($event)\"\n >\n <!--\n RadListView is a UI component part of the Progress NativeScript UI set of components.\n Learn more about the RadListView UI component and how it can be customized in this documentation article:\n https://docs.nativescript.org/angular/ui/professional-ui-components/ng-ListView/getting-started\n This component is used to display the master list in the master-detail structure.\n -->\n <ng-template tkListItemTemplate let-operation=\"item\">\n <StackLayout class=\"operations-list__item\">\n <GridLayout rows=\"*, *, *\" columns=\"auto, *, auto\" class=\"operations-list__item-content t-18\">\n <Label col=\"0\" text=\"\" class=\"fas operations-list__item-icon\"></Label>\n <Label col=\"1\" [text]=\"operation._alarmdate.value + ' ' + operation._alarmtime.value\"></Label>\n <Label *ngIf=\"operation._icon != undefined\" col=\"2\" horizontalAlignment=\"right\"\n class=\"m-r-5 fas t-36 operations-list__item-icon\" [text]=\"operation._icon\"></Label>\n <StackLayout row=\"1\" class=\"hr m-y-5\" colspan=\"3\"></StackLayout>\n <GridLayout row=\"2\" col=\"0\" colspan=\"3\" rows=\"*, *, *, *\" columns=\"auto, *, auto\"\n verticalAlignment=\"center\" class=\"p-b-10 t-18\">\n <Label row=\"0\" rowspan=\"2\" col=\"0\" text=\"\"\n class=\"fas operations-list__item-icon\"> </Label>\n <Label row=\"0\" col=\"1\"\n [text]=\"operation._subject.value + ' - ' + operation._keywordCategory.value\"\n textWrap=\"true\"></Label>\n <Label row=\"1\" col=\"1\" [text]=\"operation._keywordName.value\" textWrap=\"true\"></Label>\n <ng-container *ngIf=\"operation._uuid != undefined\">\n <Label row=\"0\" col=\"2\" rowspan =\"2\" *ngIf=\"getFeedbackForOperation(operation._uuid.value) != null\"\n [text] =\"getFeedbackForOperation(operation._uuid.value)\" class=\"fas operations-list__item-feedback-icon t-25\"\n ></Label>\n </ng-container>\n\n <StackLayout row=\"2\" class=\"hr m-y-5\" colspan=\"3\"></StackLayout>\n <Label row=\"3\" col=\"0\" text=\"\" class=\"fas operations-list__item-icon\"> </Label>\n <Label *ngIf=\"operation._locationCalc == undefined && operation._location != undefined\" row=\"3\" col=\"1\" [text]=\"operation._location.value\" textWrap=\"true\"></Label>\n <Label *ngIf=\"operation._locationCalc == undefined && operation._location == undefined\" row=\"3\" col=\"1\" text=\"--\" textWrap=\"true\"></Label>\n <Label *ngIf=\"operation._locationCalc != undefined\" row=\"3\" col=\"1\" [text]=\"operation._locationCalc.value\" textWrap=\"true\"></Label>\n </GridLayout>\n </GridLayout>\n </StackLayout>\n </ng-template>\n <GridLayout *tkListItemSwipeTemplate columns=\"auto, *, auto\">\n <!-- LEFT SWIPING CURRENTLY NOT USED-->\n <GridLayout columns=\"*, *, *\" col=\"0\" id=\"left-stack\">\n <GridLayout col=\"0\" class=\"markGridLayout\" (tap)=\"onLeftSwipeClick($event)\" id=\"btnMark\">\n <Label text=\"mark\" class=\"swipeTemplateLabel\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n </GridLayout>\n <GridLayout col=\"1\" class=\"archiveGridLayout\" (tap)=\"onLeftSwipeClick($event)\" id=\"btnArchive\">\n <Label text=\"archive\" class=\"swipeTemplateLabel\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n </GridLayout>\n <GridLayout col=\"2\" class=\"unreadGridLayout\" (tap)=\"onLeftSwipeClick($event)\" id=\"btnUnread\">\n <Label text=\"unread\" class=\"swipeTemplateLabel\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n </GridLayout>\n </GridLayout>\n <GridLayout columns=\"*\" col=\"2\" id=\"right-stack\" class=\"m-10\">\n <GridLayout col=\"0\" class=\"deleteGridLayout\" (tap)=\"onRightSwipeClick($event)\" id=\"btnDelete\" backgroundColor=\"red\">\n <Label text=\"\" class=\"swipeTemplateLabel fas t-20\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n </GridLayout>\n </GridLayout>\n </GridLayout>\n </RadListView>\n <ActivityIndicator [busy]=\"isLoading\"></ActivityIndicator>\n </GridLayout>\n </TabContentItem>\n <TabContentItem>\n <ScrollView>\n <ns-settings></ns-settings>\n </ScrollView>\n </TabContentItem>\n\n</BottomNavigation>"
/***/ }),
/***/ "./app/operations/operation-list.component.scss":
/***/ (function(module, exports) {
module.exports = "@keyframes empty {}/* Forms */\n/*\n$base-theme:Material;\n$skin-name: alarmiator-mat;\n$swatch-name:Material;\n$border-radius: 2px;\n$primary-palette-name: red;\n$secondary-palette-name: red;\n$theme-type: dark;\n */\nActionBar {\n background-color: #E6153D; }\n\n.tabStripIconText {\n font-size: 18; }\n\n.fas {\n font-family: \"Font Awesome 5 Free\", \"fa-solid-900\";\n font-weight: 900; }\n\n.t-36 {\n font-size: 36; }\n\n.operationsDetailText, .operations-list__item {\n font-size: 14; }\n\n.operations-list__item {\n margin-top: 4px;\n margin-left: 4px;\n margin-right: 4px; }\n .operations-list__item-content {\n background-color: #e4e7eb;\n border-radius: 40px; }\n .operations-list__item-name, .operations-list__item-icon {\n color: red; }\n\n:host-context(.ns-dark) .operations-list__item {\n margin-top: 4px;\n margin-left: 4px;\n margin-right: 4px; }\n :host-context(.ns-dark) .operations-list__item-content {\n background-color: black;\n border-radius: 40px; }\n :host-context(.ns-dark) .operations-list__item-name, :host-context(.ns-dark) .operations-list__item-icon {\n color: red; }\n\n.deleteGridLayout {\n border-radius: 50px; }\n\n.operations-list__item {\n margin-top: 20px;\n margin-left: 20px;\n margin-right: 20px;\n padding: 20px; }\n .operations-list__item-content {\n background-color: #e4e7eb;\n border-radius: 40px;\n margin-top: 20px;\n margin-left: 20px;\n margin-right: 20px;\n padding: 20px; }\n .operations-list__item-name, .operations-list__item-icon {\n color: red; }\n\n:host-context(.ns-dark) .operations-list__item {\n margin-top: 4px;\n margin-left: 4px;\n margin-right: 4px; }\n :host-context(.ns-dark) .operations-list__item-content {\n background-color: black;\n border-radius: 40px; }\n :host-context(.ns-dark) .operations-list__item-name, :host-context(.ns-dark) .operations-list__item-icon {\n color: red; }\n\n.deleteGridLayout {\n border-radius: 50px;\n margin-top: 20px;\n padding-top: 20px; }\n"
/***/ }),
/***/ "./app/operations/operation-list.component.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationListComponent", function() { return OperationListComponent; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/@nativescript/core/data/observable-array/observable-array.js");
/* harmony import */ var tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./app/operations/shared/operation.service.ts");
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/nativescript-ui-listview/angular/listview-directives.js");
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/@nativescript/core/ui/page/page.js");
/* harmony import */ var tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../node_modules/nativescript-feedback/feedback.js");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _nativescript_theme__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/@nativescript/theme/index.js");
/* harmony import */ var _nativescript_theme__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_nativescript_theme__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _services_feedback_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./app/services/feedback.service.ts");
/* ***********************************************************
* This is the master list component in the master-detail structure.
* This component gets the data, passes it to the master view and displays it in a list.
* It also handles the navigation to the details page for each item.
*************************************************************/
var OperationListComponent = /** @class */ (function () {
function OperationListComponent(_routerExtensions, _operationService, _feedbackService) {
this._routerExtensions = _routerExtensions;
this._operationService = _operationService;
this._feedbackService = _feedbackService;
this._isLoading = false;
this.selectedIndex = 1;
}
/* ***********************************************************
* Use the "ngOnInit" handler to get the data and assign it to the
* private property that holds it inside the component.
*************************************************************/
OperationListComponent.prototype.ngOnInit = function () {
var _this = this;
this._isLoading = false;
this.feedback = new nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__["Feedback"]();
this._operationService.getAllOp().subscribe(function (operation) {
if (operation == null) {
_this._operations.splice(0);
}
else {
var reveresedOperation = operation.slice(0);
_this._operations = new tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2__["ObservableArray"](reveresedOperation.reverse());
}
});
this.operationSortingFunction = function (item, otherItem) {
// TODO: Add filtering criteria
// const res = item.id < otherItem.id ? -1 : item.id > otherItem.id ? 1 : 0;
var res = 0;
return res;
};
};
OperationListComponent.prototype.ngOnChanges = function () {
// get archive from storage
alert("hi");
// this._operations = new ObservableArray(this._operationService.getAllOperations());
};
Object.defineProperty(OperationListComponent.prototype, "operations", {
get: function () {
return this._operations;
},
enumerable: true,
configurable: true
});
Object.defineProperty(OperationListComponent.prototype, "isLoading", {
get: function () {
return this._isLoading;
},
enumerable: true,
configurable: true
});
Object.defineProperty(OperationListComponent.prototype, "operationSortingFunction", {
get: function () {
return this._operationSortingFunction;
},
set: function (value) {
this._operationSortingFunction = value;
},
enumerable: true,
configurable: true
});
/* ***********************************************************
* Use the "itemTap" event handler of the <RadListView> to navigate to the
* item details page. Retrieve a reference for the data item (the id) and pass it
* to the item details page, so that it can identify which data item to display.
* Learn more about navigating with a parameter in this documentation article:
* http://docs.nativescript.org/angular/core-concepts/angular-navigation.html#passing-parameter
*************************************************************/
OperationListComponent.prototype.onOperationItemTap = function (args) {
var tappedOperationItem = args.view.bindingContext;
this._operationService.redirectToOperationDetails(tappedOperationItem.id);
};
OperationListComponent.prototype.onPullToRefreshInitiated = function (args) {
var listView = args.object;
listView.refresh();
listView.notifyPullToRefreshFinished();
};
OperationListComponent.prototype.onOperationsItemTapped = function (event) {
this.radListView.listView.refresh();
};
OperationListComponent.prototype.onProfileButtonTap = function (event) {
this._routerExtensions.navigate(["/profiles"], {
animated: true,
transition: {
name: "slide",
duration: 200,
curve: "ease"
}
});
};
OperationListComponent.prototype.onSwipeCellStarted = function (args) {
var swipeLimits = args.data.swipeLimits;
swipeLimits.threshold = args['mainView'].getMeasuredWidth() * 0.3; // 30% of whole width
// swipeLimits.left = args['mainView'].getMeasuredWidth() * 0.65; // 65% of whole width
swipeLimits.left = 0; // turn off left swiping
swipeLimits.right = args['mainView'].getMeasuredWidth() * 0.30; // 35% of whole width
};
OperationListComponent.prototype.onLeftSwipeClick = function (args) {
console.log("Left swipe click");
};
OperationListComponent.prototype.onRightSwipeClick = function (args) {
// console.log("Right swipe click");
// console.log(args.view.bindingContext);
if (args.object.id == "btnDelete") {
// console.log("DELETE OPERATION");
// console.log(args.view.bindingContext['_uuid']['value']);
if (args.view.bindingContext['_uuid'] != undefined) {
if (args.view.bindingContext['_uuid']['value'] != undefined) {
var deleteResult = this._operationService.deleteOperationForUUID(args.view.bindingContext['_uuid']['value']);
if (deleteResult) {
this.feedback.success({
title: "Erfolgreich",
message: "Einsatz wurde gelöscht!"
});
this.radListView.listView.refresh();
}
}
else {
console.log("ERROR WHILE DELETING: No UUID VALUE FOUND");
}
}
else {
console.log("ERROR WHILE DELETING: No UUID FOUND");
}
}
};
OperationListComponent.prototype.onSwipeCellFinished = function (args) {
// console.log("cell swiping finished")
};
OperationListComponent.prototype.onCellSwiping = function (args) {
var swipeLimits = args.data.swipeLimits;
var swipeView = args['swipeView'];
this.mainView = args['mainView'];
// Check if referencing item does not exist anymore
if (swipeView != undefined) {
this.leftItem = swipeView.getViewById('left-stack');
this.rightItem = swipeView.getViewById('right-stack');
if (args.data.x > 0) {
var leftDimensions = tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].measureChild(this.leftItem.parent, this.leftItem, tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(Math.abs(args.data.x), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(this.mainView.getMeasuredHeight(), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY));
tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.leftItem.parent, this.leftItem, 0, 0, leftDimensions.measuredWidth, leftDimensions.measuredHeight);
this.hideOtherSwipeTemplateView("left");
}
else {
var rightDimensions = tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].measureChild(this.rightItem.parent, this.rightItem, tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(Math.abs(args.data.x), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(this.mainView.getMeasuredHeight(), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY));
tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.rightItem.parent, this.rightItem, this.mainView.getMeasuredWidth() - rightDimensions.measuredWidth, 0, this.mainView.getMeasuredWidth(), rightDimensions.measuredHeight);
this.hideOtherSwipeTemplateView("right");
}
}
else {
// console.log("WARNING: EXCEPTION CAUGHT!");
}
};
OperationListComponent.prototype.hideOtherSwipeTemplateView = function (currentSwipeView) {
switch (currentSwipeView) {
case "left":
if (this.rightItem.getActualSize().width !== 0) {
tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.rightItem.parent, this.rightItem, this.mainView.getMeasuredWidth(), 0, this.mainView.getMeasuredWidth(), 0);
}
break;
case "right":
if (this.leftItem.getActualSize().width !== 0) {
tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.leftItem.parent, this.leftItem, 0, 0, 0, 0);
}
break;
default:
break;
}
};
OperationListComponent.prototype.onDarkButtonTap = function () {
_nativescript_theme__WEBPACK_IMPORTED_MODULE_7___default.a.toggleMode(); // to toggle between the modes
};
OperationListComponent.prototype.getFeedbackForOperation = function (uuid) {
var result = this._feedbackService.getFeedbackForOperationUUID(uuid);
if (result != null) {
return this.getIconForFeedbackState(result['state']);
}
else {
return null;
}
};
OperationListComponent.prototype.getIconForFeedbackState = function (state) {
var icon = "";
switch (state) {
case 1:
icon = String.fromCharCode(0xf058);
break;
case 2:
icon = String.fromCharCode(0xf057);
break;
default:
icon = null;
break;
}
return icon;
};
OperationListComponent.ctorParameters = function () { return [
{ type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"] },
{ type: _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"] },
{ type: _services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"] }
]; };
__decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('listview', { static: false }),
__metadata("design:type", nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4__["RadListViewComponent"])
], OperationListComponent.prototype, "radListView", void 0);
OperationListComponent = __decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({
selector: "OperationsList",
template: __webpack_require__("./app/operations/operation-list.component.html"),
styles: [__webpack_require__("./app/operations/operation-list.component.scss")]
}),
__metadata("design:paramtypes", [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"],
_shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"],
_services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"]])
], OperationListComponent);
return OperationListComponent;
}());
/***/ }),
/***/ "./app/operations/operation.module.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationsModule", function() { return OperationsModule; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/common.js");
/* harmony import */ var nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/@nativescript/angular/forms/index.js");
/* harmony import */ var nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/nativescript-ui-listview/angular/listview-directives.js");
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./app/operations/operation-detail/operation-detail.component.ts");
/* harmony import */ var _operation_list_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./app/operations/operation-list.component.ts");
/* harmony import */ var _operations_routing_module__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./app/operations/operations-routing.module.ts");
/* harmony import */ var _settings_settings_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./app/settings/settings.component.ts");
var OperationsModule = /** @class */ (function () {
function OperationsModule() {
}
OperationsModule = __decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"])({
imports: [
_operations_routing_module__WEBPACK_IMPORTED_MODULE_6__["OperationsRoutingModule"],
nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1__["NativeScriptCommonModule"],
nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2__["NativeScriptFormsModule"],
nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3__["NativeScriptUIListViewModule"]
],
declarations: [
_operation_list_component__WEBPACK_IMPORTED_MODULE_5__["OperationListComponent"],
_operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_4__["OperationDetailComponent"],
_settings_settings_component__WEBPACK_IMPORTED_MODULE_7__["SettingsComponent"]
],
entryComponents: [],
providers: [],
schemas: [
_angular_core__WEBPACK_IMPORTED_MODULE_0__["NO_ERRORS_SCHEMA"]
]
})
], OperationsModule);
return OperationsModule;
}());
/***/ }),
/***/ "./app/operations/operations-routing.module.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationsRoutingModule", function() { return OperationsRoutingModule; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./app/operations/operation-detail/operation-detail.component.ts");
/* harmony import */ var _operation_list_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./app/operations/operation-list.component.ts");
var routes = [
{ path: "", component: _operation_list_component__WEBPACK_IMPORTED_MODULE_3__["OperationListComponent"] },
{ path: "operation-detail/:id", component: _operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_2__["OperationDetailComponent"] },
];
var OperationsRoutingModule = /** @class */ (function () {
function OperationsRoutingModule() {
}
OperationsRoutingModule = __decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"])({
imports: [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["NativeScriptRouterModule"].forChild(routes)],
exports: [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["NativeScriptRouterModule"]]
})
], OperationsRoutingModule);
return OperationsRoutingModule;
}());
/***/ }),
/***/ "./app/operations/shared/operation.model.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Operation", function() { return Operation; });
var moment = __webpack_require__("../node_modules/moment/moment.js");
var Operation = /** @class */ (function () {
function Operation() {
this._subject = undefined;
this._message = undefined;
this._keywordId = undefined;
this._keywordName = undefined;
this._keywordRaw = undefined;
this._zveis = undefined;
this._alarmdate = undefined;
this._alarmtime = undefined;
this._lat = 0;
this._lon = 0;
}
Operation.prototype.fillOperationFCM = function (payload) {
Object.keys(payload).forEach(function (key) {
this[key] = payload[key];
}.bind(this));
this.id = Math.random();
this.assignIcon();
this._incomingTimeStamp = moment().format();
};
Operation.prototype.fillOperationFCMWithOptions = function (payload, options) {
var _this = this;
Object.keys(payload).forEach(function (key) {
_this[key] = payload[key];
});
this.id = Math.random();
this.assignIcon();
this._incomingTimeStamp = moment().format();
Object.keys(options).forEach(function (key) {
_this[key] = options[key];
});
};
Operation.prototype.assignIcon = function () {
var icon;
switch (true) {
case /Straße reinigen.*/.test(this._keywordName.value):
icon = 0xf51a; // broom
break;
case /Abfall.*/.test(this._keywordName.value):
icon = 0xf794; // dumpster-fire
break;
case /^Baum.*/.test(this._keywordName.value):
icon = 0xf1bb; // tree
break;
case /Tier.*/.test(this._keywordCategory.value):
icon = 0xf6be; // cat
break;
case /VU.*/.test(this._keywordCategory.value):
icon = 0xf5e1; // car_crash
break;
case /^RD.*/.test(this._keywordCategory.value):
case /^RD.*/.test(this._subject.value):
case /FIRST RESPONDER.*/.test(this._subject.value):
icon = 0xf0f9; // ambulance
break;
case /HUBSCHRAUBERLANDUNG.*/.test(this._subject.value):
icon = 0xf533; // helicopter
break;
case /UNWETTER.*/.test(this._subject.value):
icon = 0xf740; // cloud-showers-heavy
break;
case /^ABC ÖL.*/.test(this._subject.value):
case /^ABC KRAFTSTOFF.*/.test(this._subject.value):
icon = 0xf613; // oil-can
break;
case /^B BMA.*/.test(this._subject.value):
case /^ABC GEFAHRSTOFFMELDEANLAGE.*/.test(this._subject.value):
icon = 0xf566; // digital-tachograph
break;
case /^THL P EINGESCHLOSSEN.*/.test(this._subject.value):
icon = 0xf084; // key
break;
case /^THL P.*/.test(this._subject.value):
icon = 0xf728; // user-injured
break;
case /^THL BELEUCHTUNG.*/.test(this._subject.value):
icon = 0xf0eb; // lightbulb
break;
case /^THL BOMBE.*/.test(this._subject.value):
icon = 0xf1e2; // bomb
break;
case /^THL ERKUNDUNG.*/.test(this._subject.value):
icon = 0xf1e5; // binoculars
break;
case /^THL GEBÄUDE.*/.test(this._subject.value):
icon = 0xf6f1; // house-damage
break;
case /^PROBEALARM.*/.test(this._subject.value):
case /^INF.*/.test(this._subject.value):
icon = 0xf09e; // rss
break;
case /^B.*/.test(this._subject.value):
icon = 0xf06d; // fire
break;
case /^THL.*/.test(this._subject.value):
icon = 0xf7d9; // tools
break;
case /^ABC.*/.test(this._subject.value):
icon = 0xf714; // skull-crossbones
break;
default:
icon = 0xf0f3; // bell
break;
}
this._icon = String.fromCharCode(icon);
};
return Operation;
}());
/***/ }),
/***/ "./app/operations/shared/operation.service.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationService", function() { return OperationService; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _operation_model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./app/operations/shared/operation.model.ts");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/nativescript-plugin-firebase/firebase.js");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/rxjs/_esm5/index.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/@nativescript/core/application-settings/application-settings.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../node_modules/@nativescript/core/platform/platform.js");
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/nativescript-local-notifications/local-notifications.js");
/* harmony import */ var nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__);
// TODO: should be imported from kinvey-nativescript-sdk/angular but declaration file is currently missing
var OperationService = /** @class */ (function () {
function OperationService(_routerExtensions, ngZone) {
this._routerExtensions = _routerExtensions;
this.ngZone = ngZone;
this._behaviorSubjectOperations = new rxjs__WEBPACK_IMPORTED_MODULE_4__["BehaviorSubject"]([]);
nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__["LocalNotifications"].hasPermission();
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getBoolean"]("settingAlertWhileMuted") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setBoolean"]("settingAlertWhileMuted", false);
}
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getNumber"]("settingAlertDurationInSec") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setNumber"]("settingAlertDurationInSec", 1);
}
// For initial Loading
this._behaviorSubjectOperations.next(this.getOperationsFromAppSettings());
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__["isIOS"]) {
// Entrypoint when message is received for iOS
nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__["addOnMessageReceivedCallback"](function (message) {
var _this = this;
// Extract message data
var messageType = message.data["messageType"];
// Start new alarm routine
this.ngZone.run(function () {
if (messageType == "alarm") {
_this.incomingAlarm(message);
}
});
}.bind(this));
}
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__["isAndroid"]) {
// Entrypoint when notification is tapped for Android
nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__["LocalNotifications"].addOnMessageReceivedCallback(function (notification) {
var _this = this;
this.ngZone.run(function () {
var operationStore = [];
operationStore = _this.getOperationsFromAppSettings();
_this._behaviorSubjectOperations.next(operationStore);
// Redirect to operation details view
_this.redirectToOperationDetails(notification.id);
});
}.bind(this));
// Entrypoint when message is received with app in foreground for Android
nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__["addOnMessageReceivedCallback"](function (message) {
var _this = this;
// Extract message data
var messageType = message.data["messageType"];
//var messagePayload = JSON.parse(message);
if (message.foreground == true) {
// Start new alarm routine
this.ngZone.run(function () {
if (messageType == "alarm") {
var operationStore = [];
operationStore = _this.getOperationsFromAppSettings();
_this._behaviorSubjectOperations.next(operationStore);
_this.redirectToOperationDetails(operationStore[operationStore.length - 1].id);
}
});
}
}.bind(this));
}
}
// Returns all operations as observable
OperationService.prototype.getAllOp = function () {
return this._behaviorSubjectOperations.asObservable();
};
// Returns operation for specific id
OperationService.prototype.getOperationById = function (id) {
if (!id) {
return;
}
return this.getOperationsFromAppSettings().filter(function (operation) {
return operation.id === id;
})[0];
};
// Checks for a given uuid value whether it already exists or not
OperationService.prototype.checkIfOperationAlreadyExists = function (uuid) {
if (!uuid) {
return false;
}
var operations = this.getOperationsFromAppSettings().filter(function (operation) {
if (operation._uuid != undefined) {
if (operation._uuid.value != undefined) {
return operation._uuid.value === uuid;
}
else {
return false;
}
}
else {
return false;
}
});
if (operations.length > 0) {
return true;
}
else {
return false;
}
};
// Clears operation list
OperationService.prototype.clearOperations = function () {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify([]));
this._behaviorSubjectOperations.next(null);
};
// Open specific operation for details view
OperationService.prototype.redirectToOperationDetails = function (id) {
if (this._routerExtensions !== null) {
this._routerExtensions.navigate(["/operations/operation-detail", id], {
animated: true,
transition: {
name: "slide",
duration: 200,
curve: "ease"
}
});
}
};
// Handles incoming alarm
OperationService.prototype.incomingAlarm = function (_messagePayload) {
var operation = new _operation_model__WEBPACK_IMPORTED_MODULE_2__["Operation"]();
var payload = JSON.parse(_messagePayload.data["payload"]);
var options = {};
var feedback = _messagePayload.data["feedback"];
var serverUUID = _messagePayload.data["serverUUID"];
if (feedback != undefined) {
options['_feedback'] = feedback;
}
if (serverUUID != undefined) {
options['_serverUUID'] = serverUUID;
}
var keys = Object.keys(options);
if (keys.length == 0) {
operation.fillOperationFCM(payload.operation);
}
else {
operation.fillOperationFCMWithOptions(payload.operation, options);
}
if (operation._uuid != undefined) {
var opExists = this.checkIfOperationAlreadyExists(operation._uuid.value);
if (!opExists) {
console.log("NEUER EINSATZ");
// Refresh operation list
this._behaviorSubjectOperations.next(this.persistOperation(operation));
// Redirect to operation details view
this.redirectToOperationDetails(operation.id);
return;
}
else {
console.log("EINSATZ EXISTIERT BEREITS");
return;
}
}
else {
console.log("LEGACY SUPPORT");
// Refresh operation list
this._behaviorSubjectOperations.next(this.persistOperation(operation));
// Redirect to operation details view
this.redirectToOperationDetails(operation.id);
}
};
OperationService.prototype.persistOperation = function (operation) {
var operationStore = [];
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations") !== undefined) {
operationStore = JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations"));
}
operationStore.push(operation);
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify(operationStore));
return operationStore;
};
OperationService.prototype.getOperationsFromAppSettings = function () {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify([]));
}
return JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations"));
};
OperationService.prototype.deleteOperationForUUID = function (uuid) {
console.log("DELETING OP with uuid: " + uuid);
var resultFlag = false;
var operationStore = this.getOperationsFromAppSettings().filter(function (operation) {
if (operation._uuid == undefined) {
return true;
}
var flag = operation._uuid.value !== uuid;
if (!flag) {
// console.log("UUID FOUND");
resultFlag = true;
// Delete feedback as well
var feedbackStore = JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("operationFeedbackStore", JSON.stringify({})));
delete feedbackStore[uuid];
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("operationFeedbackStore", JSON.stringify(feedbackStore));
}
return flag;
});
if (resultFlag) {
if (operationStore.length != 0) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify(operationStore));
this._behaviorSubjectOperations.next(operationStore);
}
else {
this.clearOperations();
}
}
return resultFlag;
};
OperationService.ctorParameters = function () { return [
{ type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"] },
{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
]; };
OperationService = __decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({
providedIn: "root"
}),
__metadata("design:paramtypes", [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]])
], OperationService);
return OperationService;
}());
/***/ }),
/***/ "./app/services/feedback.service.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FeedbackService", function() { return FeedbackService; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_https__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/nativescript-https/https.js");
/* harmony import */ var nativescript_https__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_https__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _libary_helper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./app/libary/helper.ts");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/nativescript-feedback/feedback.js");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(nativescript_feedback__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/@nativescript/core/application-settings/application-settings.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__);
var FeedbackService = /** @class */ (function () {
function FeedbackService() {
this._helper = new _libary_helper__WEBPACK_IMPORTED_MODULE_2__["Helper"]();
this._feedback = new nativescript_feedback__WEBPACK_IMPORTED_MODULE_3__["Feedback"]();
this._operationFeedback = this.getFeedbackStore();
}
/**
* Set feeback for specific operation method
* @param {string} serveradress
* @param {string} username
* @param {string} password
* @param {string} operationUUID
* @param {string} basedataUUID
* @param {number} state
*/
FeedbackService.prototype.setFeedback = function (serveradress, username, passwordhash, operationUUID, basedataUUID, state) {
var _this = this;
var url = serveradress + "/feedback/set?"
+ "username=" + encodeURI(username)
+ "&passwordhash=" + encodeURI(passwordhash)
+ "&operationUUID=" + encodeURI(operationUUID)
+ "&basedataUUID=" + encodeURI(basedataUUID)
+ "&state=" + state;
console.log(url);
return nativescript_https__WEBPACK_IMPORTED_MODULE_1__["request"]({
url: serveradress + "/feedback/set?"
+ "username=" + encodeURI(username)
+ "&passwordhash=" + encodeURI(passwordhash)
+ "&operationUUID=" + encodeURI(operationUUID)
+ "&basedataUUID=" + encodeURI(basedataUUID)
+ "&state=" + state,
method: "GET"
}).then(function (response) {
// Argument (response) is HttpResponse
console.log(response);
var responseContent = _this._helper.prepareResponse(response['content']);
if (responseContent['success'] == 1) {
if (state == 1) {
_this._feedback.success({
title: "Erfolgreich",
message: "Rückmeldung 'Komme' gesendet"
});
}
else {
if (state == 2) {
_this._feedback.success({
title: "Erfolgreich",
message: "Rückmeldung 'Komme nicht' gesendet"
});
}
}
return true;
}
else {
throw "ERROR: " + responseContent['description'];
}
}, function (e) {
console.log(e);
_this._feedback.error({
title: "Fehler",
message: e.toString()
});
throw e;
});
};
FeedbackService.prototype.getFeedbackStore = function () {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["getString"]("operationFeedbackStore") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["setString"]("operationFeedbackStore", JSON.stringify({}));
}
return JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["getString"]("operationFeedbackStore"));
};
FeedbackService.prototype.createFeedbackObjectForOperation = function (timeStamp, state) {
var feedback = {};
feedback['timeStamp'] = timeStamp;
feedback['state'] = state;
return feedback;
};
FeedbackService.prototype.getFeedbackForOperationUUID = function (operationUUID) {
var feedbackStore = this.getFeedbackStore();
return feedbackStore[operationUUID] != undefined ? feedbackStore[operationUUID] : null;
};
FeedbackService.prototype.persistFeedback = function (operationUUID, timeStamp, state) {
var feedbackStore = this.getFeedbackStore();
feedbackStore[operationUUID] = this.createFeedbackObjectForOperation(timeStamp, state);
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["setString"]("operationFeedbackStore", JSON.stringify(feedbackStore));
};
FeedbackService.prototype.deleteFeedbackFromStore = function (operationUUID) {
var feedbackStore = this.getFeedbackStore();
delete feedbackStore[operationUUID];
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["setString"]("operationFeedbackStore", JSON.stringify(feedbackStore));
};
FeedbackService = __decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({
providedIn: 'root'
}),
__metadata("design:paramtypes", [])
], FeedbackService);
return FeedbackService;
}());
/***/ }),
/***/ "./app/settings/settings.component.html":
/***/ (function(module, exports) {
module.exports = "<StackLayout>\n \n <Label class=\"settingsHeaderLabel p-10\" text=\"Toneinstellungen\" textAlignment=\"center\"></Label>\n <StackLayout class=\"hr m-10\"></StackLayout>\n\n <GridLayout *ngIf=\"isAndroid\" columns=\"*, auto\" rows=\"*\" class=\"p-10\">\n <Label row=\"0\" col=\"0\" text=\"Lautlos bei Alarm aufheben\" class=\"settingsLabel\" verticalAlignment=\"center\"></Label>\n <Switch row=\"0\" col=\"1\" [checked]=\"alertWhileMuted\" (checkedChange)=\"onCheckedAlertWhileMutedChange($event)\"></Switch>\n </GridLayout>\n <GridLayout *ngIf=\"isAndroid\" columns=\"*, auto\" rows=\"auto,auto,auto\" class=\"p-10\">\n <Label row=\"0\" col=\"0\" text=\"Alarmierungsdauer\" class=\"settingsLabel\"></Label>\n <Label row=\"0\" col=\"1\" [text]=\"alertDurationInSec + ' s'\" class=\"settingsLabel\"></Label>\n <Slider row=\"1\" col=\"0\" colspan=\"2\" [value]=\"alertDurationInSec\" minValue=\"1\" maxValue=\"10\" (valueChange)=\"onSliderValueChange($event)\"></Slider>\n </GridLayout>\n <GridLayout *ngIf=\"isAndroid\" columns=\"*, *\" rows=\"*,*\" class=\"p-10\">\n <Label row=\"0\" col=\"0\" text=\"Alarmierungston\" class=\"settingsLabel\"></Label>\n <Label row=\"0\" col=\"1\" [text]=\"androidRingtoneTitle\" class=\"settingsLabel\" textWrap=\"true\" textAlignment=\"right\"></Label>\n <Button row=\"1\" col=\"0\" colspan=\"2\" (tap)=\"onTapOpenRingTone($event)\" class=\"settingsButton\" text=\"Alarmierungston ändern\"></Button>\n </GridLayout>\n \n <Label *ngIf=\"isIOS\" text=\"Lautlos durchbrechen\" class=\"settingsLabel p-10\"></Label>\n <Switch *ngIf=\"isIOS\" [checked]=\"criticalAlert\" (checkedChange)=\"onCheckedCriticalAlertChange($event)\" class=\"settingsSwitch m-r-10\"></Switch>\n \n <StackLayout class=\"hr m-10\"></StackLayout>\n \n <GridLayout *ngIf=\"isIOS\" columns=\"auto, *\" rows=\"*\" class=\"p-10\">\n <Label row=\"0\" col=\"0\" text=\"Alarmierungston\" class=\"settingsLabel p-r-10\" verticalAlignment=\"center\"></Label>\n <!--<Button row=\"0\" col=\"1\" (tap)=\"onTapOpenRingToneIOS($event)\" class=\"settingsButton\" text=\"Alarmierungston ändern\"></Button>-->\n <!--<ListPicker row=\"0\" col=\"1\" [items]=\"_iOSRingtones\" [selectedIndex]=\"iOSSelectedRingtone\" (selectedIndexChange)=\"onSelectedRingToneIOSChanged($event)\"></ListPicker> -->\n <Button row=\"0\" col=\"1\" (tap)=\"onTapOpenIOSRingetoneManager($event)\" class=\"settingsButton\" text=\"Alarmierungston ändern\"></Button>\n </GridLayout>\n\n <StackLayout *ngIf=\"isIOS\" class=\"hr m-10\"></StackLayout>\n\n <GridLayout columns=\"*, auto\" rows=\"auto,auto,auto\" class=\"p-10\">\n <Label row=\"0\" col=\"0\" text=\"Lautstärke\" class=\"settingsLabel\"></Label>\n <Label row=\"0\" col=\"1\" [text]=\"alertVolume * 10 + ' %'\" class=\"settingsLabel\"></Label>\n <Slider row=\"1\" col=\"0\" colspan=\"2\" [value]=\"alertVolume\" minValue=\"0\" maxValue=\"10\" (valueChange)=\"onVolumeSliderValueChange($event)\"></Slider>\n </GridLayout>\n <Button *ngIf=\"isIOS\" text=\"Ton testen\" class=\"settingsButton\" (tap)=\"onTapTestAudio($event)\"></Button>\n\n <StackLayout class=\"hr m-10\"></StackLayout>\n <GridLayout *ngIf=\"isAndroid\" columns=\"*, auto\" rows=\"*,*\" class=\"p-10\">\n <Label row=\"0\" col=\"0\" colspan = \"2\" text=\"Hinweis: Diese Funktion ist nur verfügbar, falls 'Lautlos bei Alarm aufheben' aktiv ist. Die Nachricht wird nach dem Ton in der Medienlautstärke vorgelesen!\" class=\"settingsLabel\" verticalAlignment=\"center\" textWrap=\"true\"></Label>\n <Label row=\"1\" col=\"0\" text=\"Alarmstichwort vorlesen\" class=\"settingsLabel\" verticalAlignment=\"center\"></Label>\n <Switch row=\"1\" col=\"1\" [checked]=\"alarmTextToSpeech\" (checkedChange)=\"onCheckedAlarmTextToSpeechChange($event)\"></Switch>\n </GridLayout>\n\n <Label *ngIf=\"isIOS\" text=\"Hinweis: Diese Funktion ist nur verfügbar, falls 'Lautlos durchbrechen' aktiv ist.\" class=\"settingsLabel\" verticalAlignment=\"center\" textWrap=\"true\"></Label>\n <Label *ngIf=\"isIOS\" text=\"Alarmstichwort vorlesen\" class=\"settingsLabel p-10\"></Label>\n <Switch *ngIf=\"isIOS\" [checked]=\"alarmTextToSpeech\" (checkedChange)=\"onCheckedAlarmTextToSpeechChange($event)\" class=\"settingsSwitch m-r-10\"></Switch>\n <StackLayout class=\"hr m-10\"></StackLayout>\n\n <Label class=\"p-10 settingsHeaderLabel\" text=\"Geräteinformation\" textAlignment=\"center\"></Label>\n <GridLayout class=\"p-10 deviceSettings\" columns=\"*, auto\" rows=\"auto, auto, auto, auto, auto, *, auto\"> \n <label row=\"0\" col=\"0\" text=\"Hersteller\"></label>\n <label row=\"0\" col=\"1\" [text]=\"deviceManufacturer\" textAlignment=\"right\"></label>\n <label row=\"1\" col=\"0\" text=\"Modell\"></label>\n <label row=\"1\" col=\"1\" [text]=\"deviceModel\" textAlignment=\"right\"></label>\n <label row=\"2\" col=\"0\" text=\"Plattform\"></label>\n <label row=\"2\" col=\"1\" [text]=\"deviceOS\" textAlignment=\"right\"></label>\n <label row=\"3\" col=\"0\" text=\"Plattformversion\"></label>\n <label row=\"3\" col=\"1\" [text]=\"deviceOSVersion\" textAlignment=\"right\"></label>\n <label row=\"4\" col=\"0\" text=\"Geräteklasse\"></label>\n <label row=\"4\" col=\"1\" [text]=\"deviceType\" textAlignment=\"right\"></label>\n <label row=\"5\" col=\"0\" text=\"Geräte-UUID\"></label>\n <label row=\"5\" col=\"1\" [text]=\"deviceUuid\" textWrap=\"true\" textAlignment=\"right\"></label>\n <label row=\"6\" col=\"0\" text=\"Geräte-Name\"></label>\n <label row=\"6\" col=\"1\" [text]=\"deviceName\" textWrap=\"true\" textAlignment=\"right\"></label>\n </GridLayout>\n\n <StackLayout class=\"hr m-10\"></StackLayout>\n\n <Label class=\"p-10 settingsHeaderLabel\" text=\"Sonstige Funktionen\" textAlignment=\"center\"></Label>\n <Button text=\"Einsatzliste leeren\" class=\"settingsButton\" (tap)=\"onTapToClearOps($event)\"></Button>\n\n <Label class=\"settingsLabel p-10\" text=\"Token dieses Gerätes:\" textAlignment=\"center\"></Label>\n <TextView [text]=fcm_token editable=\"false\"></TextView>\n <Button (tap)=\"onTapToShareFCMKey($event)\" class=\"settingsButton\" text=\"Token versenden\"></Button>\n\n <StackLayout class=\"hr m-10\"></StackLayout>\n <Label class=\"p-10 settingsHeaderLabel\" text=\"App Infos\" textAlignment=\"center\"></Label>\n <GridLayout class=\"p-10 appSettings\" columns=\"*, auto\" rows=\"*,*\"> \n <label row=\"0\" col=\"0\" text=\"App Name\"></label>\n <label row=\"0\" col=\"1\" [text]=\"appName\" textAlignment=\"right\"></label>\n <label row=\"1\" col=\"0\" text=\"App Version\"></label>\n <label row=\"1\" col=\"1\" [text]=\"appVersion\" textAlignment=\"right\"></label>\n </GridLayout>\n</StackLayout>"
/***/ }),
/***/ "./app/settings/settings.component.scss":
/***/ (function(module, exports) {
module.exports = "/* Add mobile styles for the component here. */\n.settingsHeaderLabel {\n font-size: 18; }\n\n.settingsLabel {\n font-size: 15; }\n\n.settingsButton {\n android-elevation: 4;\n background-color: #ff3d00;\n border-color: #c30000;\n border-radius: 4;\n border-width: 1;\n color: whitesmoke;\n font-size: 15;\n font-weight: bold; }\n\n.settingsButton:active {\n android-elevation: 8;\n background-color: #c30000;\n border-color: #ff3d00;\n border-radius: 4;\n border-width: 1;\n color: whitesmoke;\n font-size: 15;\n font-weight: bold; }\n\n.cancelButton {\n android-elevation: 4;\n background-color: #c9c9c9;\n border-color: #000000;\n border-radius: 4;\n border-width: 1;\n color: whitesmoke;\n font-size: 15;\n font-weight: bold; }\n\n.cancelButton:active {\n android-elevation: 8;\n background-color: #000000;\n border-color: #c9c9c9;\n border-radius: 4;\n border-width: 1;\n color: whitesmoke;\n font-size: 15;\n font-weight: bold; }\n"
/***/ }),
/***/ "./app/settings/settings.component.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SettingsComponent", function() { return SettingsComponent; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/nativescript-plugin-firebase/firebase.js");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var nativescript_social_share__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/nativescript-social-share/social-share.js");
/* harmony import */ var nativescript_social_share__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(nativescript_social_share__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/@nativescript/core/application-settings/application-settings.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/@nativescript/core/application/application.js");
/* harmony import */ var tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/@nativescript/core/platform/platform.js");
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _operations_shared_operation_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./app/operations/shared/operation.service.ts");
/* harmony import */ var nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/nativescript-dna-deviceinfo/deviceinfo.js");
/* harmony import */ var nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("../node_modules/@nativescript/core/ui/dialogs/dialogs.js");
/* harmony import */ var tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("../node_modules/nativescript-audio-player/audio.js");
/* harmony import */ var nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("../node_modules/@nativescript/angular/modal-dialog.js");
/* harmony import */ var nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var _modal_ringtone_modal_ringtone_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./app/settings/modal-ringtone/modal-ringtone.component.ts");
// Audio player for testing sound settings
var SettingsComponent = /** @class */ (function () {
function SettingsComponent(_operationService, ngZone, _modalService, _vcRef) {
this._operationService = _operationService;
this.ngZone = ngZone;
this._modalService = _modalService;
this._vcRef = _vcRef;
this._iOSRingtones = ["default", "bbaabbaa.wav"];
}
SettingsComponent.prototype.ngOnInit = function () {
var _this = this;
this._alertWhileMuted = this.getAlertWhileMuted();
this._criticalAlert = this.getCriticalAlert();
this._iOSSelectedRingtone = this.getiOSSelectedRingtoneIndex();
this._alertDurationInSec = this.getAlertDurationInSec();
this._alertVolume = this.getAlertVolume();
this._androidRingtoneURI = this.getAndroidRingtoneURI();
this._alarmTextToSpeech = this.getAlarmTextToSpeech();
// Get FCM Token
nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1__["getCurrentPushToken"]().then(function (token) {
// may be null if not known yet
console.log("Current push token: " + token);
_this._fcmtoken = token;
});
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"]) {
tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].on(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["AndroidApplication"].activityResultEvent, function (args) {
var _this = this;
if (args.requestCode == 111) {
// RingtonePicker
// console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", requestCode: " + args.requestCode + ", resultCode: " + args.resultCode + ", Intent: " + args.intent);
var intentResult = args.intent;
if (intentResult != null) {
var ringtone_URI = intentResult.getParcelableExtra(android.media.RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (ringtone_URI != null) {
this.ngZone.run(function () {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("androidRingTone", ringtone_URI.toString());
_this.getAndroidRingtoneURI();
});
}
}
}
}.bind(this));
}
};
Object.defineProperty(SettingsComponent.prototype, "fcm_token", {
get: function () {
return this._fcmtoken;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "alertWhileMuted", {
get: function () {
return this._alertWhileMuted;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "criticalAlert", {
get: function () {
return this._criticalAlert;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "alertDurationInSec", {
get: function () {
return this._alertDurationInSec;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "alertVolume", {
get: function () {
return Math.round(this._alertVolume);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "alarmTextToSpeech", {
get: function () {
return this._alarmTextToSpeech;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "androidRingtoneURI", {
get: function () {
return this._androidRingtoneURI;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "androidRingtoneTitle", {
get: function () {
return this._androidRingtoneTitle;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "iOSSelectedRingtone", {
get: function () {
return this._iOSSelectedRingtone;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "androidRingToneTitle", {
set: function (androidRingtoneTitle) {
this._androidRingtoneTitle = androidRingtoneTitle;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "deviceModel", {
/**
* Device-Information getters
*/
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].model;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "deviceManufacturer", {
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].manufacturer;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "deviceOS", {
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].os;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "deviceOSVersion", {
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].osVersion;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "deviceUuid", {
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].uuid;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "deviceType", {
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].deviceType;
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "deviceName", {
get: function () {
return nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__["DeviceInfo"].deviceName();
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "appName", {
get: function () {
return nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__["DeviceInfo"].appName();
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "appVersion", {
get: function () {
return nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__["DeviceInfo"].appVersion();
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "isAndroid", {
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"];
},
enumerable: true,
configurable: true
});
Object.defineProperty(SettingsComponent.prototype, "isIOS", {
get: function () {
return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"];
},
enumerable: true,
configurable: true
});
SettingsComponent.prototype.getAlertWhileMuted = function () {
return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingAlertWhileMuted");
};
SettingsComponent.prototype.getCriticalAlert = function () {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingCriticalAlert") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingCriticalAlert", true);
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setBoolForKey(true, "settingCriticalAlert");
}
}
return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingCriticalAlert", true);
};
SettingsComponent.prototype.getAlarmTextToSpeech = function () {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingAlarmTextToSpeech") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingAlarmTextToSpeech", false);
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setBoolForKey(false, "settingAlarmTextToSpeech");
}
}
return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingAlarmTextToSpeech", false);
};
SettingsComponent.prototype.getiOSSelectedRingtoneIndex = function () {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("settingIOSRingtone") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("settingIOSRingtone", "default");
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setObjectForKey("default", "iOSRingTone");
}
}
return this._iOSRingtones.indexOf(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("settingIOSRingtone", "default"));
};
SettingsComponent.prototype.getAlertDurationInSec = function () {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertDurationInSec") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertDurationInSec", 1);
}
return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertDurationInSec");
};
SettingsComponent.prototype.getAlertVolume = function () {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertVolume") === undefined) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertVolume", 10);
}
return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertVolume");
};
SettingsComponent.prototype.getAndroidRingtoneURI = function () {
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"]) {
if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("androidRingTone") === undefined) {
var uri = android.media.RingtoneManager.getDefaultUri(android.media.RingtoneManager.TYPE_NOTIFICATION);
if (uri != null) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("androidRingTone", uri.toString());
}
else {
uri = android.media.RingtoneManager.getDefaultUri(android.media.RingtoneManager.TYPE_ALARM);
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("androidRingTone", uri.toString());
}
}
var ringtone = android.media.RingtoneManager.getRingtone(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].context, android.net.Uri.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("androidRingTone").toString()));
var ringtoneTitle = ringtone.getTitle(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].context);
this.androidRingToneTitle = ringtoneTitle;
return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("androidRingTone");
}
else {
return "";
}
};
SettingsComponent.prototype.onCheckedAlertWhileMutedChange = function (slider) {
this._alertWhileMuted = slider.value;
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingAlertWhileMuted", slider.value);
};
SettingsComponent.prototype.onCheckedCriticalAlertChange = function (slider) {
this._criticalAlert = slider.value;
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingCriticalAlert", slider.value);
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setBoolForKey(slider.value, "settingCriticalAlert");
};
SettingsComponent.prototype.onCheckedAlarmTextToSpeechChange = function (slider) {
this._alarmTextToSpeech = slider.value;
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingAlarmTextToSpeech", slider.value);
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setBoolForKey(slider.value, "settingAlarmTextToSpeech");
}
};
SettingsComponent.prototype.onTapToShareFCMKey = function (event) {
nativescript_social_share__WEBPACK_IMPORTED_MODULE_2__["shareText"](this.fcm_token);
};
SettingsComponent.prototype.onSliderValueChange = function (slider) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertDurationInSec", slider.value);
this._alertDurationInSec = this.getAlertDurationInSec();
};
SettingsComponent.prototype.onTapOpenRingTone = function (event) {
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"]) {
var currentURI = this.getAndroidRingtoneURI();
//console.log("CurrentURI:" + currentURI);
var intent = new android.content.Intent(android.media.RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_TITLE, "Wähle Ton für ALARMiator");
intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_TYPE, android.media.RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, android.net.Uri.parse(currentURI));
tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].foregroundActivity.startActivityForResult(intent, 111);
// TODO: Refresh settings view
}
};
/**
* plays selectd Soundfile as alarming sound for testing purposes
* @param event
*/
SettingsComponent.prototype.onTapTestAudio = function (event) {
var _this = this;
if (this._iOSRingtones[this._iOSSelectedRingtone] != 'default') {
// play selected RingTone
var ringToneToPlay = this._iOSRingtones[this._iOSSelectedRingtone];
console.log('Testing Sound Settings with ringtone: ' + ringToneToPlay);
this._player = new nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9__["TNSPlayer"]();
this._player.debug = true; // set true to enable TNSPlayer console logs for debugging.
this._player
.initFromFile({
audioFile: '~/../' + ringToneToPlay,
loop: false,
completeCallback: this._trackComplete.bind(this),
errorCallback: this._trackError.bind(this)
})
.then(function () {
_this._player.getAudioTrackDuration().then(function (duration) {
// iOS: duration is in seconds
// Android: duration is in milliseconds
console.log("Dauer des Klingeltons:", duration);
});
}).then(function () {
console.log('Playing with Volume: ' + _this._alertVolume);
_this._player.volume = (_this._alertVolume / 10);
_this._player.play();
});
}
else {
// default selected, not playing anything
console.log('default selected, not playing anything');
}
};
/**
* called after selected Soundfile has been played successfully
* @param args
*/
SettingsComponent.prototype._trackComplete = function (args) {
console.log('Referenz zur Player Instanz:', args.player);
console.log('Konnte Klingelton abgespielt werden:', args.flag);
};
/**
* called if theres been an error playing soundfile
* @param args
*/
SettingsComponent.prototype._trackError = function (args) {
console.log('ERROR: Referenz zur Player Instanz:', args.player);
console.log('ERROR: Fehlermeldung:', args.error);
// Android only: extra detail on error
console.log('ERROR: Mehr Informationen zum Player:', args.extra);
};
SettingsComponent.prototype.onTapOpenRingToneIOS = function (event) {
var actionOptions = {
title: "Tonauswahl",
message: "Wähle deinen Ton",
cancelButtonText: "Abbrechen",
actions: ["default", "bbaabbaa.wav"],
cancelable: true // Android only
};
Object(tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8__["action"])(actionOptions).then(function (result) {
console.log('action: ' + result);
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("iOSRingTone", result);
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setObjectForKey(result, "iOSRingTone");
});
};
SettingsComponent.prototype.onSelectedRingToneIOSChanged = function (args) {
var picker = args.object;
console.log("" + this._iOSRingtones[picker.selectedIndex]);
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("settingIOSRingtone", this._iOSRingtones[picker.selectedIndex]);
this._iOSSelectedRingtone = picker.selectedIndex;
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setObjectForKey(this._iOSRingtones[picker.selectedIndex], "iOSRingTone");
}
};
SettingsComponent.prototype.onVolumeSliderValueChange = function (slider) {
tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertVolume", slider.value);
this._alertVolume = this.getAlertVolume();
if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
userDefaults.setFloatForKey(slider.value, "settingAlertVolume");
}
};
SettingsComponent.prototype.onTapToClearOps = function (args) {
this._operationService.clearOperations();
};
SettingsComponent.prototype.onTapOpenIOSRingetoneManager = function (event) {
var options = {
viewContainerRef: this._vcRef,
context: {},
fullscreen: true
};
this._modalService.showModal(_modal_ringtone_modal_ringtone_component__WEBPACK_IMPORTED_MODULE_11__["ModalRingtoneComponent"], options)
.then(function (result) {
if (result != undefined && result != null) {
console.log("MODAL CLOSED");
console.log(result);
}
else {
console.log("Modal cancelled");
}
});
};
SettingsComponent.ctorParameters = function () { return [
{ type: _operations_shared_operation_service__WEBPACK_IMPORTED_MODULE_6__["OperationService"] },
{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
{ type: nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__["ModalDialogService"] },
{ type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }
]; };
SettingsComponent = __decorate([
Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({
selector: 'ns-settings',
template: __webpack_require__("./app/settings/settings.component.html"),
styles: [__webpack_require__("./app/settings/settings.component.scss")]
}),
__metadata("design:paramtypes", [_operations_shared_operation_service__WEBPACK_IMPORTED_MODULE_6__["OperationService"],
_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"],
nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__["ModalDialogService"],
_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]])
], SettingsComponent);
return SettingsComponent;
}());
/***/ })
}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUgc3luYyBeXFwuXFwvLiokIiwid2VicGFjazovLy8uL2FwcC9vcGVyYXRpb25zL29wZXJhdGlvbi1kZXRhaWwvb3BlcmF0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tZGV0YWlsL29wZXJhdGlvbi1kZXRhaWwuY29tcG9uZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYXBwL29wZXJhdGlvbnMvb3BlcmF0aW9uLWRldGFpbC9vcGVyYXRpb24tZGV0YWlsLmNvbXBvbmVudC50cyIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tbGlzdC5jb21wb25lbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCJ3ZWJwYWNrOi8vLy4vYXBwL29wZXJhdGlvbnMvb3BlcmF0aW9uLm1vZHVsZS50cyIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb25zLXJvdXRpbmcubW9kdWxlLnRzIiwid2VicGFjazovLy8uL2FwcC9vcGVyYXRpb25zL3NoYXJlZC9vcGVyYXRpb24ubW9kZWwudHMiLCJ3ZWJwYWNrOi8vLy4vYXBwL29wZXJhdGlvbnMvc2hhcmVkL29wZXJhdGlvbi5zZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL2FwcC9zZXJ2aWNlcy9mZWVkYmFjay5zZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL2FwcC9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9hcHAvc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYXBwL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFNLENBQUMsS0FBSyxFQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBRUQsMkNBQWUsR0FBZixVQUFnQixJQUF1QjtRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELHdEQUE0QixHQUE1QixVQUE2QixLQUFLO1FBQ2hDLElBQU0sT0FBTyxHQUF1QjtZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUM3QixPQUFPLEVBQUUsRUFBRTtZQUNYLFVBQVUsRUFBRSxJQUFJO1NBQ25CLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxnR0FBc0IsRUFBRSxPQUFPLENBQUM7YUFDeEQsSUFBSSxDQUFDLFVBQUMsTUFBYztZQUNuQixJQUFJLE1BQU0sSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQjtpQkFDSTtnQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7O2dCQWpYOEIscUZBQWdCO2dCQUMzQixvREFBTTtnQkFDQyxxRkFBa0I7Z0JBQ3pCLDhEQUFnQjs7SUFyQnZCLGlCQUFpQjtRQUw3QiwrREFBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGFBQWE7WUFDdkIsdUVBQXdDOztTQUV6QyxDQUFDO3lDQW1CNkIscUZBQWdCO1lBQzNCLG9EQUFNO1lBQ0MscUZBQWtCO1lBQ3pCLDhEQUFnQjtPQXJCdkIsaUJBQWlCLENBb1k3QjtJQUFELHdCQUFDO0NBQUE7QUFwWTZCIiwiZmlsZSI6IjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWFwID0ge1xuXHRcIi4vYWZcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qc1wiLFxuXHRcIi4vYWYuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qc1wiLFxuXHRcIi4vYXJcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qc1wiLFxuXHRcIi4vYXItZHpcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qc1wiLFxuXHRcIi4vYXItZHouanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qc1wiLFxuXHRcIi4vYXIta3dcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qc1wiLFxuXHRcIi4vYXIta3cuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qc1wiLFxuXHRcIi4vYXItbHlcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qc1wiLFxuXHRcIi4vYXItbHkuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qc1wiLFxuXHRcIi4vYXItbWFcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qc1wiLFxuXHRcIi4vYXItbWEuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qc1wiLFxuXHRcIi4vYXItc2FcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qc1wiLFxuXHRcIi4vYXItc2EuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qc1wiLFxuXHRcIi4vYXItdG5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qc1wiLFxuXHRcIi4vYXItdG4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qc1wiLFxuXHRcIi4vYXIuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qc1wiLFxuXHRcIi4vYXpcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qc1wiLFxuXHRcIi4vYXouanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qc1wiLFxuXHRcIi4vYmVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qc1wiLFxuXHRcIi4vYmUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qc1wiLFxuXHRcIi4vYmdcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qc1wiLFxuXHRcIi4vYmcuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qc1wiLFxuXHRcIi4vYm1cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qc1wiLFxuXHRcIi4vYm0uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qc1wiLFxuXHRcIi4vYm5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qc1wiLFxuXHRcIi4vYm4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qc1wiLFxuXHRcIi4vYm9cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qc1wiLFxuXHRcIi4vYm8uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qc1wiLFxuXHRcIi4vYnJcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qc1wiLFxuXHRcIi4vYnIuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qc1wiLFxuXHRcIi4vYnNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qc1wiLFxuXHRcIi4vYnMuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qc1wiLFxuXHRcIi4vY2FcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qc1wiLFxuXHRcIi4vY2EuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qc1wiLFxuXHRcIi4vY3NcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qc1wiLFxuXHRcIi4vY3MuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qc1wiLFxuXHRcIi4vY3ZcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qc1wiLFxuXHRcIi4vY3YuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qc1wiLFxuXHRcIi4vY3lcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qc1wiLFxuXHRcIi4vY3kuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qc1wiLFxuXHRcIi4vZGFcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qc1wiLFxuXHRcIi4vZGEuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qc1wiLFxuXHRcIi4vZGVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qc1wiLFxuXHRcIi4vZGUtYXRcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qc1wiLFxuXHRcIi4vZGUtYXQuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qc1wiLFxuXHRcIi4vZGUtY2hcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qc1wiLFxuXHRcIi4vZGUtY2guanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qc1wiLFxuXHRcIi4vZGUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qc1wiLFxuXHRcIi4vZHZcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qc1wiLFxuXHRcIi4vZHYuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qc1wiLFxuXHRcIi4vZWxcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qc1wiLFxuXHRcIi4vZWwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qc1wiLFxuXHRcIi4vZW4tYXVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qc1wiLFxuXHRcIi4vZW4tYXUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qc1wiLFxuXHRcIi4vZW4tY2FcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qc1wiLFxuXHRcIi4vZW4tY2EuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qc1wiLFxuXHRcIi4vZW4tZ2JcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qc1wiLFxuXHRcIi4vZW4tZ2IuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qc1wiLFxuXHRcIi4vZW4taWVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qc1wiLFxuXHRcIi4vZW4taWUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qc1wiLFxuXHRcIi4vZW4taWxcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qc1wiLFxuXHRcIi4vZW4taWwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qc1wiLFxuXHRcIi4vZW4taW5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qc1wiLFxuXHRcIi4vZW4taW4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qc1wiLFxuXHRcIi4vZW4tbnpcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qc1wiLFxuXHRcIi4vZW4tbnouanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qc1wiLFxuXHRcIi4vZW4tc2dcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qc1wiLFxuXHRcIi4vZW4tc2cuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qc1wiLFxuXHRcIi4vZW9cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qc1wiLFxuXHRcIi4vZW8uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qc1wiLFxuXHRcIi4vZXNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qc1wiLFxuXHRcIi4vZXMtZG9cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qc1wiLFxuXHRcIi4vZXMtZG8uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qc1wiLFxuXHRcIi4vZXMtdXNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qc1wiLFxuXHRcIi4vZXMtdXMuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qc1wiLFxuXHRcIi4vZXMuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qc1wiLFxuXHRcIi4vZXRcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qc1wiLFxuXHRcIi4vZXQuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qc1wiLFxuXHRcIi4vZXVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qc1wiLFxuXHRcIi4vZXUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qc1wiLFxuXHRcIi4vZmFcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qc1wiLFxuXHRcIi4vZmEuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qc1wiLFxuXHRcIi4vZmlcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qc1wiLFxuXHRcIi4vZmkuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qc1wiLFxuXHRcIi4vZmlsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmlsLmpzXCIsXG5cdFwiLi9maWwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maWwuanNcIixcblx0XCIuL2ZvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanNcIixcblx0XCIuL2ZvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanNcIixcblx0XCIuL2ZyXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanNcIixcblx0XCIuL2ZyLWNhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanNcIixcblx0XCIuL2ZyLWNhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanNcIixcblx0XCIuL2ZyLWNoXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanNcIixcblx0XCIuL2ZyLWNoLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanNcIixcblx0XCIuL2ZyLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanNcIixcblx0XCIuL2Z5XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanNcIixcblx0XCIuL2Z5LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanNcIixcblx0XCIuL2dhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanNcIixcblx0XCIuL2dhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanNcIixcblx0XCIuL2dkXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanNcIixcblx0XCIuL2dkLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanNcIixcblx0XCIuL2dsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2wuanNcIixcblx0XCIuL2dsLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2wuanNcIixcblx0XCIuL2dvbS1kZXZhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWRldmEuanNcIixcblx0XCIuL2dvbS1kZXZhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWRldmEuanNcIixcblx0XCIuL2dvbS1sYXRuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanNcIixcblx0XCIuL2dvbS1sYXRuLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanNcIixcblx0XCIuL2d1XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanNcIixcblx0XCIuL2d1LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanNcIixcblx0XCIuL2hlXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGUuanNcIixcblx0XCIuL2hlLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGUuanNcIixcblx0XCIuL2hpXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanNcIixcblx0XCIuL2hpLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanNcIixcblx0XCIuL2hyXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanNcIixcblx0XCIuL2hyLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanNcIixcblx0XCIuL2h1XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHUuanNcIixcblx0XCIuL2h1LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHUuanNcIixcblx0XCIuL2h5LWFtXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanNcIixcblx0XCIuL2h5LWFtLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanNcIixcblx0XCIuL2lkXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanNcIixcblx0XCIuL2lkLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanNcIixcblx0XCIuL2lzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXMuanNcIixcblx0XCIuL2lzLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXMuanNcIixcblx0XCIuL2l0XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2l0LWNoXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQtY2guanNcIixcblx0XCIuL2l0LWNoLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQtY2guanNcIixcblx0XCIuL2l0LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2phXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanNcIixcblx0XCIuL2phLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanNcIixcblx0XCIuL2p2XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanNcIixcblx0XCIuL2p2LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanNcIixcblx0XCIuL2thXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanNcIixcblx0XCIuL2thLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanNcIixcblx0XCIuL2trXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanNcIixcblx0XCIuL2trLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanNcIixcblx0XCIuL2ttXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanNcIixcblx0XCIuL2ttLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanNcIixcblx0XCIuL2tuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanNcIixcblx0XCIuL2tuLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanNcIixcblx0XCIuL2tvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanNcIixcblx0XCIuL2tvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanNcIixcblx0XCIuL2t1XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanNcIixcblx0XCIuL2t1LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanNcIixcblx0XCIuL2t5XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanNcIixcblx0XCIuL2t5LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanNcIixcblx0XCIuL2xiXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanNcIixcblx0XCIuL2xiLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanNcIixcblx0XCIuL2xvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanNcIixcblx0XCIuL2xvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanNcIixcblx0XCIuL2x0XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanNcIixcblx0XCIuL2x0LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanNcIixcblx0XCIuL2x2XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanNcIixcblx0XCIuL2x2LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanNcIixcblx0XCIuL21lXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanNcIixcblx0XCIuL21lLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanNcIixcblx0XCIuL21pXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanNcIixcblx0XCIuL21pLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanNcIixcblx0XCIuL21rXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanNcIixcblx0XCIuL21rLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanNcIixcblx0XCIuL21sXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanNcIixcblx0XCIuL21sLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanNcIixcblx0XCIuL21uXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanNcIixcblx0XCIuL21uLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanNcIixcblx0XCIuL21yXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanNcIixcblx0XCIuL21yLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanNcIixcblx0XCIuL21zXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL21zLW15XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanNcIixcblx0XCIuL21zLW15LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanNcIixcblx0XCIuL21zLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL210XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanNcIixcblx0XCIuL210LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanNcIixcblx0XCIuL215XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanNcIixcblx0XCIuL215LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanNcIixcblx0XCIuL25iXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanNcIixcblx0XCIuL25iLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanNcIixcblx0XCIuL25lXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanNcIixcblx0XCIuL25lLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanNcIixcblx0XCIuL25sXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25sLWJlXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanNcIixcblx0XCIuL25sLWJlLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanNcIixcblx0XCIuL25sLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25uXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanNcIixcblx0XCIuL25uLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanNcIixcblx0XCIuL29jLWxuY1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL29jLWxuYy5qc1wiLFxuXHRcIi4vb2MtbG5jLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvb2MtbG5jLmpzXCIsXG5cdFwiLi9wYS1pblwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzXCIsXG5cdFwiLi9wYS1pbi5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzXCIsXG5cdFwiLi9wbFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzXCIsXG5cdFwiLi9wbC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzXCIsXG5cdFwiLi9wdFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LmpzXCIsXG5cdFwiLi9wdC1iclwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzXCIsXG5cdFwiLi9wdC1ici5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzXCIsXG5cdFwiLi9wdC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LmpzXCIsXG5cdFwiLi9yb1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzXCIsXG5cdFwiLi9yby5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzXCIsXG5cdFwiLi9ydVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzXCIsXG5cdFwiLi9ydS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzXCIsXG5cdFwiLi9zZFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzXCIsXG5cdFwiLi9zZC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzXCIsXG5cdFwiLi9zZVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzXCIsXG5cdFwiLi9zZS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzXCIsXG5cdFwiLi9zaVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzXCIsXG5cdFwiLi9zaS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzXCIsXG5cdFwiLi9za1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzXCIsXG5cdFwiLi9zay5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzXCIsXG5cdFwiLi9zbFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzXCIsXG5cdFwiLi9zbC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzXCIsXG5cdFwiLi9zcVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzXCIsXG5cdFwiLi9zcS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzXCIsXG5cdFwiLi9zclwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzXCIsXG5cdFwiLi9zci1jeXJsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3ItY3lybC5qc1wiLFxuXHRcIi4vc3ItY3lybC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanNcIixcblx0XCIuL3NyLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanNcIixcblx0XCIuL3NzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanNcIixcblx0XCIuL3NzLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanNcIixcblx0XCIuL3N2XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanNcIixcblx0XCIuL3N2LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanNcIixcblx0XCIuL3N3XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanNcIixcblx0XCIuL3N3LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanNcIixcblx0XCIuL3RhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanNcIixcblx0XCIuL3RhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanNcIixcblx0XCIuL3RlXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanNcIixcblx0XCIuL3RlLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanNcIixcblx0XCIuL3RldFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qc1wiLFxuXHRcIi4vdGV0LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzXCIsXG5cdFwiLi90Z1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzXCIsXG5cdFwiLi90Zy5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzXCIsXG5cdFwiLi90aFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzXCIsXG5cdFwiLi90aC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzXCIsXG5cdFwiLi90a1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzXCIsXG5cdFwiLi90ay5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzXCIsXG5cdFwiLi90bC1waFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzXCIsXG5cdFwiLi90bC1waC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzXCIsXG5cdFwiLi90bGhcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanNcIixcblx0XCIuL3RsaC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsaC5qc1wiLFxuXHRcIi4vdHJcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qc1wiLFxuXHRcIi4vdHIuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qc1wiLFxuXHRcIi4vdHpsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzXCIsXG5cdFwiLi90emwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanNcIixcblx0XCIuL3R6bVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qc1wiLFxuXHRcIi4vdHptLWxhdG5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qc1wiLFxuXHRcIi4vdHptLWxhdG4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qc1wiLFxuXHRcIi4vdHptLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzXCIsXG5cdFwiLi91Zy1jblwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzXCIsXG5cdFwiLi91Zy1jbi5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzXCIsXG5cdFwiLi91a1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzXCIsXG5cdFwiLi91ay5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzXCIsXG5cdFwiLi91clwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzXCIsXG5cdFwiLi91ci5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzXCIsXG5cdFwiLi91elwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzXCIsXG5cdFwiLi91ei1sYXRuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qc1wiLFxuXHRcIi4vdXotbGF0bi5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LWxhdG4uanNcIixcblx0XCIuL3V6LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXouanNcIixcblx0XCIuL3ZpXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanNcIixcblx0XCIuL3ZpLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanNcIixcblx0XCIuL3gtcHNldWRvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanNcIixcblx0XCIuL3gtcHNldWRvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanNcIixcblx0XCIuL3lvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanNcIixcblx0XCIuL3lvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanNcIixcblx0XCIuL3poLWNuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanNcIixcblx0XCIuL3poLWNuLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanNcIixcblx0XCIuL3poLWhrXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanNcIixcblx0XCIuL3poLWhrLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanNcIixcblx0XCIuL3poLW1vXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtbW8uanNcIixcblx0XCIuL3poLW1vLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtbW8uanNcIixcblx0XCIuL3poLXR3XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanNcIixcblx0XCIuL3poLXR3LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0dmFyIGlkID0gbWFwW3JlcV07XG5cdGlmKCEoaWQgKyAxKSkgeyAvLyBjaGVjayBmb3IgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gaWQ7XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZSBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qJFwiOyIsIm1vZHVsZS5leHBvcnRzID0gXCI8QWN0aW9uQmFyPlxcbiAgICA8TmF2aWdhdGlvbkJ1dHRvbiBhbmRyb2lkLnN5c3RlbUljb249XFxcImljX21lbnVfYmFja1xcXCIgKHRhcCk9XFxcIm9uQmFja0J1dHRvblRhcCgpXFxcIj5cXG4gICAgPC9OYXZpZ2F0aW9uQnV0dG9uPlxcbiA8IS0tICAgPExhYmVsIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9zdWJqZWN0LnZhbHVlICsgJyAtICcrIG9wZXJhdGlvbi5fa2V5d29yZE5hbWUudmFsdWVcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+IC0tPlxcbiAgICA8TGFiZWwgW3RleHRdPVxcXCJvcGVyYXRpb24uX2FsYXJtZGF0ZS52YWx1ZSArICcgJyArIG9wZXJhdGlvbi5fYWxhcm10aW1lLnZhbHVlXFxcIiBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgXFxuICAgICBcXG4gICAgPEFjdGlvbkl0ZW0gaW9zLnBvc2l0aW9uPVxcXCJyaWdodFxcXCIgYW5kcm9pZC5wb3NpdGlvbj1cXFwicmlnaHRcXFwiICh0YXApPVxcXCJvbkRpcmVjdGlvbnNCdXR0b25UYXAoKVxcXCI+XFxuICAgICAgICA8TGFiZWwgY2xhc3M9XFxcImZhcyB0LTIwXFxcIiB0ZXh0PVxcXCImI3hmNGQ3O1xcXCI+PC9MYWJlbD4gXFxuICAgIDwvQWN0aW9uSXRlbT5cXG48L0FjdGlvbkJhcj5cXG48R3JpZExheW91dD5cXG4gICAgICAgIDxCb3R0b21OYXZpZ2F0aW9uIHNlbGVjdGVkSW5kZXg9XFxcIjBcXFwiPlxcblxcbiAgICAgICAgICAgIDwhLS0gVGhlIGJvdHRvbSB0YWIgVUkgaXMgY3JlYXRlZCB2aWEgVGFiU3RyaXAgKHRoZSBjb250YWluaWVyKSBhbmQgVGFiU3RyaXBJdGVtIChmb3IgZWFjaCB0YWIpLS0+XFxuICAgICAgICAgICAgPFRhYlN0cmlwPlxcbiAgICAgICAgICAgICAgICA8VGFiU3RyaXBJdGVtPlxcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcIkluZm9cXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPVxcXCJmb250Oi8vJiN4ZjBhMTtcXFwiIGNsYXNzPVxcXCJmYXMgdC0zNlxcXCI+PC9JbWFnZT5cXG4gICAgICAgICAgICAgICAgPC9UYWJTdHJpcEl0ZW0+XFxuICAgICAgICAgICAgICAgIDxUYWJTdHJpcEl0ZW0gY2xhc3M9XFxcInNwZWNpYWxcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcIk1hcFxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9XFxcImZvbnQ6Ly8mI3hmMjc5O1xcXCIgY2xhc3M9XFxcImZhcyB0LTM2XFxcIj48L0ltYWdlPlxcbiAgICAgICAgICAgICAgICA8L1RhYlN0cmlwSXRlbT5cXG4gICAgICAgICAgICAgICAgPFRhYlN0cmlwSXRlbSBjbGFzcz1cXFwic3BlY2lhbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgdGV4dD1cXFwiU29uc3RpZ2VzXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz1cXFwiZm9udDovLyYjeGYxMjk7XFxcIiBjbGFzcz1cXFwiZmFzIHQtMzZcXFwiPjwvSW1hZ2U+XFxuICAgICAgICAgICAgICAgIDwvVGFiU3RyaXBJdGVtPlxcbiAgICAgICAgICAgIDwvVGFiU3RyaXA+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8IS0tIFRoZSBudW1iZXIgb2YgVGFiQ29udGVudEl0ZW0gY29tcG9uZW50cyBzaG91bGQgY29yZXNwb25kIHRvIHRoZSBudW1iZXIgb2YgVGFiU3RyaXBJdGVtIGNvbXBvbmVudHMgLS0+XFxuICAgICAgICAgICAgPFRhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNjcm9sbFZpZXcgW2hlaWdodF09XFxcIm9wZXJhdGlvbi5fZmVlZGJhY2sgPT0gJ3RydWUnICYmIF91c2VySXNMb2dnZWRJbiA9PSB0cnVlID8gJzg1JScgOiAnMTAwJSdcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBvcmllbnRhdGlvbj1cXFwidmVydGljYWxcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiYXV0bywgKiwgYXV0b1xcXCIgcm93cz1cXFwiKiwqXFxcIiBjbGFzcz1cXFwicC10LTEwXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIHJvd3NwYW49XFxcIjJcXFwiICpuZ0lmPVxcXCJvcGVyYXRpb24uX2ljb24gIT0gdW5kZWZpbmVkXFxcIiB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBjb2w9XFxcIjBcXFwiIGNsYXNzPVxcXCJtLWwtMTUgZmFzIHQtMjBcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9pY29uXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIxXFxcIiBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9zdWJqZWN0LnZhbHVlICsgJyAtICcgKyBvcGVyYXRpb24uX2tleXdvcmRDYXRlZ29yeS52YWx1ZVxcXCIgIGNsYXNzPVxcXCJtLXgtMTUgdGV4dC1jZW50ZXIgdC0yMCBvcGVyYXRpb25LZXl3b3JkXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMVxcXCIgaG9yaXpvbnRhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fa2V5d29yZE5hbWUudmFsdWVcXFwiICBjbGFzcz1cXFwibS14LTE1IHRleHQtY2VudGVyIHQtMjAgb3BlcmF0aW9uS2V5d29yZFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiByb3dzcGFuPVxcXCIyXFxcIiAqbmdJZj1cXFwib3BlcmF0aW9uLl9pY29uICE9IHVuZGVmaW5lZFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgY29sPVxcXCIyXFxcIiBjbGFzcz1cXFwibS1yLTE1IGZhcyB0LTIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5faWNvblxcXCI+PC9MYWJlbD4gIFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9tZXNzYWdlICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcInAtbC0xNSBwLXItMTUgcC1iLTEwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09IFxcXCJvcGVyYXRpb24uX21lc3NhZ2UudmFsdWVcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiYXV0bywgKlxcXCIgcm93cz1cXFwiKiwqLCosKiwqLCosKlxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3N0cmVldCAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3N0cmVldC5sYWJlbFxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3N0cmVldC52YWx1ZVxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9mbG9vciAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX2Zsb29yLmxhYmVsXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fZmxvb3IudmFsdWVcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fc2VjdGlvbiAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3NlY3Rpb24ubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIyXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9zZWN0aW9uLnZhbHVlXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX2xvY2F0aW9uICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiM1xcXCIgY29sPVxcXCIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fbG9jYXRpb24ubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiM1xcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fbG9jYXRpb24udmFsdWVcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fb2JqZWN0ICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiNFxcXCIgY29sPVxcXCIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fb2JqZWN0LmxhYmVsXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiID48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjRcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX29iamVjdC52YWx1ZVxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9pbHMgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQgcm93PVxcXCI1XFxcIiBjb2xzcGFuPVxcXCIyXFxcIiBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCI2XFxcIiBjb2w9XFxcIjBcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9pbHMubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiNlxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5faWxzLnZhbHVlXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX2dlYXIgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIFt0ZXh0XT1vcGVyYXRpb24uX2dlYXIubGFiZWwgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiA+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwicC1sLTE1ICBwLWItMTAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9nZWFyLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgIDwvU2Nyb2xsVmlldz5cXG4gICAgICAgICAgICAgICAgICAgIDxGbGV4Ym94TGF5b3V0IGhlaWdodD1cXFwiMTUlXFxcIiAqbmdJZj1cXFwib3BlcmF0aW9uLl9mZWVkYmFjayA9PSAndHJ1ZScgJiYgX3VzZXJJc0xvZ2dlZEluID09IHRydWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gaGVpZ2h0PVxcXCIxMDAlXFxcIiB3aWR0aD1cXFwiNTAlXFxcIiB0ZXh0PVxcXCJLb21tZVxcXCIgW25nQ2xhc3NdPVxcXCJbJ29wZXJhdGlvbkZlZWRiYWNrQnV0dG9uJywgY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrID09PSAxIHx8IGN1cnJlbnRPcGVyYXRpb25GZWVkYmFjayA9PT0gMCA/ICdmZWVkYmFjay1ncmVlbicgOiAnZmVlZGJhY2stZ3JheSddXFxcIiB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiAodGFwKT1cXFwib25UYXBzZXRGZWVkYmFja1N0YXRlMSgkZXZlbnQpXFxcIj48L0J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGhlaWdodD1cXFwiMTAwJVxcXCIgd2lkdGg9XFxcIjUwJVxcXCIgdGV4dD1cXFwiS29tbWUgbmljaHRcXFwiIFtuZ0NsYXNzXT1cXFwiWydvcGVyYXRpb25GZWVkYmFja0J1dHRvbicsIGN1cnJlbnRPcGVyYXRpb25GZWVkYmFjayA9PT0gMiB8fCBjdXJyZW50T3BlcmF0aW9uRmVlZGJhY2sgPT09IDAgPyAnZmVlZGJhY2stcmVkJyA6ICdmZWVkYmFjay1ncmF5J11cXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiICh0YXApPVxcXCJvblRhcHNldEZlZWRiYWNrU3RhdGUyKCRldmVudClcXFwiPjwvQnV0dG9uPiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgPC9GbGV4Ym94TGF5b3V0Pi0tPiAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICA8L1RhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgICAgIDxUYWJDb250ZW50SXRlbT5cXG4gICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICA8TWFwVmlldyAobWFwUmVhZHkpPVxcXCJvbk1hcFJlYWR5KCRldmVudClcXFwiIGlvc092ZXJmbG93U2FmZUFyZWE9XFxcInRydWVcXFwiIFtsYXRpdHVkZV09XFxcImxhdGl0dWRlXFxcIiBbbG9uZ2l0dWRlXT1cXFwibG9uZ2l0dWRlXFxcIiBbem9vbV09XFxcInpvb21cXFwiPjwvTWFwVmlldz5cXG4gICAgICAgICAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICAgICAgICAgIDwvVGFiQ29udGVudEl0ZW0+XFxuICAgICAgICAgICAgPFRhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgICAgICAgICAgIDxTY3JvbGxWaWV3PlxcbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IG9yaWVudGF0aW9uPVxcXCJ2ZXJ0aWNhbFxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fb3BlcmF0aW9ubnVtYmVyICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fb3BlcmF0aW9ubnVtYmVyICE9IHVuZGVmaW5lZCAmJiBvcGVyYXRpb24uX29wZXJhdGlvbm51bWJlci52YWx1ZSAhPSBudWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fb3BlcmF0aW9ubnVtYmVyLmxhYmVsXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcIm0teC0xNSBwLWItMTAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9vcGVyYXRpb25udW1iZXIudmFsdWVcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3Jhd2RhdGEgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9yYXdkYXRhLnZhbHVlICE9IHVuZGVmaW5lZCAmJiBvcGVyYXRpb24uX3Jhd2RhdGEudmFsdWUgIT0gbnVsbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcIm0teC0xNSBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3Jhd2RhdGEubGFiZWxcXFwiIHRleHRBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IHAtYi0xMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3Jhd2RhdGEudmFsdWVcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fenZlaXMgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl96dmVpcyAhPSB1bmRlZmluZWQgJiYgb3BlcmF0aW9uLl96dmVpcy52YWx1ZSAhPSBudWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fenZlaXMubGFiZWxcXFwiIHRleHRBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IHAtYi0xMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3p2ZWlzLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzPVxcXCJtLXgtMTUgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHQ9XFxcIlplaXRzdGVtcGVsXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiYXV0bywgKlxcXCIgcm93cz1cXFwiKiwqLCpcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9hbGFybXRpbWUubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fY3JlYXRlZEF0LmxhYmVsXFxcIiAqbmdJZj1cXFwib3BlcmF0aW9uLl9jcmVhdGVkQXQgIT0gdW5kZWZpbmVkXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD0gIFxcXCJBcHAtRWluZ2FuZ3MtWmVpdFxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIj48L0xhYmVsPiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9hbGFybXRpbWUudmFsdWVcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMVxcXCIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fY3JlYXRlZEF0ICE9IHVuZGVmaW5lZFxcXCIgW3RleHRdPVxcXCJjcmVhdGVkQXRcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMVxcXCIgKm5nSWY9XFxcIm9wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXAgIT0gdW5kZWZpbmVkXFxcIiBbdGV4dF09XFxcImluY29taW5nVGltZVN0YW1wXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIyXFxcIiBjb2w9XFxcIjFcXFwiICpuZ0lmPVxcXCJvcGVyYXRpb24uX2luY29taW5nVGltZVN0YW1wID09IHVuZGVmaW5lZFxcXCIgdGV4dCAgPVxcXCJOaWNodCBnZXNldHp0XFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPiAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fdXVpZCAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkICYmIG9wZXJhdGlvbi5fdXVpZC52YWx1ZSAhPSBudWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fdXVpZC5sYWJlbFxcXCIgdGV4dEFsaWdubWVudD1cXFwiY2VudGVyXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzPVxcXCJtLXgtMTUgcC1iLTEwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fdXVpZC52YWx1ZVxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgPC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgPC9TY3JvbGxWaWV3PiAgICAgICAgXFxuICAgICAgICAgICAgPC9UYWJDb250ZW50SXRlbT4gICAgICBcXG4gICAgICAgIDwvQm90dG9tTmF2aWdhdGlvbj5cXG48L0dyaWRMYXlvdXQ+XCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiQGtleWZyYW1lcyBlbXB0eSB7fS8qIEZvcm1zICovXFxuLypcXG4kYmFzZS10aGVtZTpNYXRlcmlhbDtcXG4kc2tpbi1uYW1lOiBhbGFybWlhdG9yLW1hdDtcXG4kc3dhdGNoLW5hbWU6TWF0ZXJpYWw7XFxuJGJvcmRlci1yYWRpdXM6IDJweDtcXG4kcHJpbWFyeS1wYWxldHRlLW5hbWU6IHJlZDtcXG4kc2Vjb25kYXJ5LXBhbGV0dGUtbmFtZTogcmVkO1xcbiR0aGVtZS10eXBlOiBkYXJrO1xcbiAqL1xcbkFjdGlvbkJhciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTYxNTNEOyB9XFxuXFxuLnRhYlN0cmlwSWNvblRleHQge1xcbiAgZm9udC1zaXplOiAxODsgfVxcblxcbi5mYXMge1xcbiAgZm9udC1mYW1pbHk6IFxcXCJGb250IEF3ZXNvbWUgNSBGcmVlXFxcIiwgXFxcImZhLXNvbGlkLTkwMFxcXCI7XFxuICBmb250LXdlaWdodDogOTAwOyB9XFxuXFxuLnQtMzYge1xcbiAgZm9udC1zaXplOiAzNjsgfVxcblxcbi5vcGVyYXRpb25zRGV0YWlsVGV4dCB7XFxuICBmb250LXNpemU6IDE1OyB9XFxuXFxuLnRyZW5uLWVsZW1lbnQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHdoaXRlOyB9XFxuXFxuLnRleHQtY2VudGVyIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxcblxcbi5vcGVyYXRpb25LZXl3b3JkIHtcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7IH1cXG5cXG4ub3BlcmF0aW9uRmVlZGJhY2tCdXR0b24ge1xcbiAgYW5kcm9pZC1lbGV2YXRpb246IDQ7XFxuICBib3JkZXItY29sb3I6ICMxYjFiMWI7XFxuICBib3JkZXItcmFkaXVzOiAyO1xcbiAgYm9yZGVyLXdpZHRoOiAxO1xcbiAgY29sb3I6IHdoaXRlc21va2U7XFxuICBmb250LXNpemU6IDE1O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4ub3BlcmF0aW9uRmVlZGJhY2tCdXR0b246YWN0aXZlIHtcXG4gIGFuZHJvaWQtZWxldmF0aW9uOiA4O1xcbiAgYm9yZGVyLWNvbG9yOiB3aGl0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDI7XFxuICBib3JkZXItd2lkdGg6IDE7XFxuICBjb2xvcjogd2hpdGVzbW9rZTtcXG4gIGZvbnQtc2l6ZTogMTU7XFxuICBmb250LXdlaWdodDogYm9sZDsgfVxcblxcbi5mZWVkYmFjay1ncmVlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgfVxcblxcbi5mZWVkYmFjay1yZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOyB9XFxuXFxuLmZlZWRiYWNrLWdyYXkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsgfVxcblwiIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUGFnZVJvdXRlLCBSb3V0ZXJFeHRlbnNpb25zIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1hbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2hhcmVkL29wZXJhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPcGVyYXRpb24gfSBmcm9tIFwiLi4vc2hhcmVkL29wZXJhdGlvbi5tb2RlbFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50UmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVnaXN0ZXJFbGVtZW50IH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1hbmd1bGFyL2VsZW1lbnQtcmVnaXN0cnlcIjtcbmltcG9ydCB7IE1hcFZpZXcsIFBvc2l0aW9uLCBNYXJrZXIgfSBmcm9tICduYXRpdmVzY3JpcHQtZ29vZ2xlLW1hcHMtc2RrJztcblxuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICduYXRpdmVzY3JpcHQtZmVlZGJhY2snO1xuXG5pbXBvcnQgeyBEaXJlY3Rpb25zIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1kaXJlY3Rpb25zXCI7XG5pbXBvcnQgeyBGZWVkYmFja1NlcnZpY2UgfSBmcm9tIFwifi9hcHAvc2VydmljZXMvZmVlZGJhY2suc2VydmljZVwiO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tIFwifi9hcHAvc2VydmljZXMvdXNlci5zZXJ2aWNlXCI7XG5yZWdpc3RlckVsZW1lbnQoXCJNYXBWaWV3XCIsICgpID0+IHJlcXVpcmUoXCJuYXRpdmVzY3JpcHQtZ29vZ2xlLW1hcHMtc2RrXCIpLk1hcFZpZXcpO1xuXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKFwibW9tZW50XCIpO1xuXG5cbi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4qIFRoaXMgaXMgdGhlIGl0ZW0gZGV0YWlscyBjb21wb25lbnQgaW4gdGhlIG1hc3Rlci1kZXRhaWwgc3RydWN0dXJlLlxuKiBUaGlzIGNvbXBvbmVudCByZXRyaWV2ZXMgdGhlIHBhc3NlZCBwYXJhbWV0ZXIgZnJvbSB0aGUgbWFzdGVyIGxpc3QgY29tcG9uZW50LFxuKiBmaW5kcyB0aGUgZGF0YSBpdGVtIGJ5IHRoaXMgcGFyYW1ldGVyIGFuZCBkaXNwbGF5cyB0aGUgZGV0YWlsZWQgZGF0YSBpdGVtIGluZm9ybWF0aW9uLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIk9wZXJhdGlvbkRldGFpbFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vb3BlcmF0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9vcGVyYXRpb24tZGV0YWlsLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbkRldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfb3BlcmF0aW9uOiBPcGVyYXRpb247XG4gICAgcHJpdmF0ZSBfdXNlcklzTG9nZ2VkSW46IEJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9zZXJ2ZXJhZHJlc3M6c3RyaW5nO1xuICAgIHByaXZhdGUgX3VzZXJuYW1lOnN0cmluZztcbiAgICBwcml2YXRlIF9wYXNzd29yZGhhc2g6c3RyaW5nO1xuICAgIHByaXZhdGUgX2Jhc2VkYXRhVVVJRDpzdHJpbmc7XG4gICAgcHJpdmF0ZSBmZWVkYmFjazogRmVlZGJhY2s7XG4gICAgcHJpdmF0ZSBjdXJyZW50T3BlcmF0aW9uRmVlZGJhY2s6bnVtYmVyID0gMDtcbiAgICBwcml2YXRlIGZlZWRiYWNrVGltZXN0YW1wOiBEYXRlO1xuICAgIHByaXZhdGUgY3VycmVudE9wRmVlZGJhY2s6SlNPTjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9vcGVyYXRpb25TZXJ2aWNlOiBPcGVyYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9mZWVkYmFja1NlcnZpY2U6IEZlZWRiYWNrU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLCAgICBcbiAgICAgICAgcHJpdmF0ZSBfcGFnZVJvdXRlOiBQYWdlUm91dGUsXG4gICAgICAgIHByaXZhdGUgX3JvdXRlckV4dGVuc2lvbnM6IFJvdXRlckV4dGVuc2lvbnNcbiAgICApIHsgfVxuXG4gICAgQFZpZXdDaGlsZChcIk1hcFZpZXdcIiwge3N0YXRpYzogZmFsc2V9KSBtYXBWaWV3OiBFbGVtZW50UmVmO1xuICAgIHByaXZhdGUgbWFwVmlldzI6IE1hcFZpZXc7XG5cbiAgICAvL01hcCBldmVudHNcbiAgICBvbk1hcFJlYWR5ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwIFJlYWR5XCIpO1xuICAgICAgICB0aGlzLm1hcFZpZXcyID0gZXZlbnQub2JqZWN0XG4gICAgICAgIHRoaXMuYWRkTWFya2VyKCk7XG4gICAgICAgIHRoaXMubWFwVmlldzIubGF0aXR1ZGUgPSB0aGlzLmxhdGl0dWRlO1xuICAgICAgICB0aGlzLm1hcFZpZXcyLmxvbmdpdHVkZSA9IHRoaXMubG9uZ2l0dWRlO1xuICAgIH07XG5cbiAgICBsYXRpdHVkZTpudW1iZXI7XG4gICAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyID0gMTc7XG4gICAgZGlyZWN0aW9uczogRGlyZWN0aW9ucztcbiAgICBjcmVhdGVkQXQ6IGFueTtcbiAgICBpbmNvbWluZ1RpbWVTdGFtcDogYW55O1xuXG4gICAgcHJpdmF0ZSBhZGRNYXJrZXIoKTogdm9pZCB7XG4gICAgICAgdmFyIG1hcmtlciA9IG5ldyBNYXJrZXIoKTtcbiAgICAgICBtYXJrZXIucG9zaXRpb24gPSBQb3NpdGlvbi5wb3NpdGlvbkZyb21MYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpO1xuICAgICAgIG1hcmtlci50aXRsZSA9IFwiRWluc2F0em9ydFwiO1xuICAgICAgIG1hcmtlci51c2VyRGF0YSA9IHsgaW5kZXggOiAxfTtcbiAgICAgICB0aGlzLm1hcFZpZXcyLmFkZE1hcmtlcihtYXJrZXIpO1xuICAgfVxuICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgKiBVc2UgdGhlIFwibmdPbkluaXRcIiBoYW5kbGVyIHRvIGdldCB0aGUgZGF0YSBpdGVtIGlkIHBhcmFtZXRlciBwYXNzZWQgdGhyb3VnaCBuYXZpZ2F0aW9uLlxuICAgICogR2V0IHRoZSBkYXRhIGl0ZW0gZGV0YWlscyBmcm9tIHRoZSBkYXRhIHNlcnZpY2UgdXNpbmcgdGhpcyBpZCBhbmQgYXNzaWduIGl0IHRvIHRoZVxuICAgICogcHJpdmF0ZSBwcm9wZXJ0eSB0aGF0IGhvbGRzIGl0IGluc2lkZSB0aGUgY29tcG9uZW50LlxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICogTGVhcm4gbW9yZSBhYm91dCBob3cgdG8gZ2V0IG5hdmlnYXRpb24gcGFyYW1ldGVycyBpbiB0aGlzIGRvY3VtZW50YXRpb24gYXJ0aWNsZTpcbiAgICAgICAgKiBodHRwOi8vZG9jcy5uYXRpdmVzY3JpcHQub3JnL2FuZ3VsYXIvY29yZS1jb25jZXB0cy9hbmd1bGFyLW5hdmlnYXRpb24uaHRtbCNwYXNzaW5nLXBhcmFtZXRlclxuICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgICAgICB0aGlzLl9wYWdlUm91dGUuYWN0aXZhdGVkUm91dGVcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcCgoYWN0aXZhdGVkUm91dGUpID0+IGFjdGl2YXRlZFJvdXRlLnBhcmFtcykpXG4gICAgICAgICAgICAuZm9yRWFjaCgocGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBwYXJzZUZsb2F0KHBhcmFtcy5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9uID0gdGhpcy5fb3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25CeUlkKG9wZXJhdGlvbklkKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wRmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja1NlcnZpY2UuZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb25VVUlEKHRoaXMub3BlcmF0aW9uLl91dWlkWyd2YWx1ZSddKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrID0gMDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50T3BGZWVkYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrID0gdGhpcy5jdXJyZW50T3BGZWVkYmFja1tcInN0YXRlXCJdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZlZWRiYWNrVGltZXN0YW1wICA9IHRoaXMuY3VycmVudE9wRmVlZGJhY2tbXCJ0aW1lc3RhbXBcIl07XG4gICAgICAgICAgICAgICAgfSAgXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX29wZXJhdGlvbi5fbGF0ICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwYXJzZUZsb2F0KHRoaXMuX29wZXJhdGlvbi5fbGF0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmF0aW9uLl9sb24gIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBwYXJzZUZsb2F0KHRoaXMuX29wZXJhdGlvbi5fbG9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmF0aW9uLl9jcmVhdGVkQXQgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVkQXQgPSBtb21lbnQodGhpcy5fb3BlcmF0aW9uLl9jcmVhdGVkQXQudmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmF0aW9uLl9pbmNvbWluZ1RpbWVTdGFtcCAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9tZW50KHRoaXMuX29wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXApLmlzVmFsaWQoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nVGltZVN0YW1wID0gbW9tZW50KHRoaXMuX29wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXApLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1RpbWVTdGFtcCA9IHRoaXMuX29wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRpcmVjdGlvbnM9IG5ldyBEaXJlY3Rpb25zKCk7XG4gICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgRmVlZGJhY2soKTtcblxuICAgICAgICAvLyBHRVQgVVNFUlxuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25bJ19zZXJ2ZXJVVUlEJ10gIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHZhciB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlckZvclNlcnZlclVVSUQodGhpcy5vcGVyYXRpb25bJ19zZXJ2ZXJVVUlEJ10pO1xuXG4gICAgICAgICAgICBpZiAodXNlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmVyYWRyZXNzID0gdXNlclsnX3NlcnZlcmFkcmVzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gdXNlclsnX3VzZXJuYW1lJ107XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmRoYXNoID0gdXNlclsnX3Bhc3N3b3JkSGFzaCddO1xuICAgICAgICAgICAgICAgIGlmICh1c2VyWydfYmFzZWRhdGEnXVsnX3V1aWQnXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFzZWRhdGFVVUlEID0gdXNlclsnX2Jhc2VkYXRhJ11bJ191dWlkJ107XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuX2Jhc2VkYXRhVVVJRCk7XG4gICAgICAgICAgICAgICAgfSAgIFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImJhc2VkYXRhVVVJRCB1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWVkYmFjay53YXJuaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFjaHR1bmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiUHJvZmlsIG5pY2h0IGFrdHVlbGwhIEJpdHRlIGxvZ2dlIGRpY2ggZXJuZXV0IGVpbiFcIlxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYXNlZGF0YVVVSUQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYmFzZWRhdGFVVUlEICE9IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VySXNMb2dnZWRJbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VySXNMb2dnZWRJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJJc0xvZ2dlZEluID0gZmFsc2U7O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXNlcklzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgZ2V0IG9wZXJhdGlvbigpOiBPcGVyYXRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgKiBUaGUgYmFjayBidXR0b24gaXMgZXNzZW50aWFsIGZvciBhIG1hc3Rlci1kZXRhaWwgZmVhdHVyZS5cbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgIG9uQmFja0J1dHRvblRhcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcm91dGVyRXh0ZW5zaW9ucy5iYWNrVG9QcmV2aW91c1BhZ2UoKTtcbiAgICB9XG5cbiAgICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICogVGhlIG1hc3Rlci1kZXRhaWwgdGVtcGxhdGUgY29tZXMgd2l0aCBhbiBleGFtcGxlIG9mIGFuIGl0ZW0gZWRpdCBwYWdlLlxuICAgICogQ2hlY2sgb3V0IHRoZSBlZGl0IHBhZ2UgaW4gdGhlIC9jYXJzL2Nhci1kZXRhaWwtZWRpdCBmb2xkZXIuXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICBvbkVkaXRCdXR0b25UYXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JvdXRlckV4dGVuc2lvbnMubmF2aWdhdGUoW1wiL2NhcnMvY2FyLWRldGFpbC1lZGl0XCIsIHRoaXMuX29wZXJhdGlvbi5pZF0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNsaWRlVG9wXCIsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGN1cnZlOiBcImVhc2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRGlyZWN0aW9uc0J1dHRvblRhcCgpOnZvaWQge1xuICAgICAgICB0aGlzLmRpcmVjdGlvbnMubmF2aWdhdGUoe1xuICAgICAgICAgICAgdG86IHsgLy8gb3B0aW9uYWwsIGRlZmF1bHQgJ2N1cnJlbnQgbG9jYXRpb24nXG4gICAgICAgICAgICBsYXQ6IHRoaXMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsbmc6IHRoaXMubG9uZ2l0dWRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IFwiZHJpdmluZ1wiLCAvLyBvcHRpb25hbCwgY2FuIGJlOiBkcml2aW5nLCB0cmFuc2l0LCBiaWN5Y2xpbmcgb3Igd2Fsa2luZ1xuICAgICAgICAgICAgaW9zOiB7XG4gICAgICAgICAgICAgIHByZWZlckdvb2dsZU1hcHM6IHRydWUsIC8vIElmIHRoZSBHb29nbGUgTWFwcyBhcHAgaXMgaW5zdGFsbGVkLCB1c2UgdGhhdCBvbmUgaW5zdGVhZCBvZiBBcHBsZSBNYXBzLCBiZWNhdXNlIGl0IHN1cHBvcnRzIHdheXBvaW50cy4gRGVmYXVsdCB0cnVlLlxuICAgICAgICAgICAgICBhbGxvd0dvb2dsZU1hcHNXZWI6IHRydWUgLy8gSWYgd2F5cG9pbnRzIGFyZSBwYXNzZWQgaW4gYW5kIEdvb2dsZSBNYXBzIGlzIG5vdCBpbnN0YWxsZWQsIHlvdSBjYW4gZWl0aGVyIG9wZW4gQXBwbGUgTWFwcyBhbmQgdGhlIGZpcnN0IHdheXBvaW50IGlzIHVzZWQgYXMgdGhlIHRvLWFkZHJlc3MgKHRoZSByZXN0IGlzIGlnbm9yZWQpLCBvciB5b3UgY2FuIG9wZW4gR29vZ2xlIE1hcHMgb24gd2ViIHNvIGFsbCB3YXlwb2ludHMgYXJlIHNob3duIChzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlKS4gRGVmYXVsdCBmYWxzZS5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbmRyb2lkOiB7XG4gICAgICAgICAgICAgIG5ld1Rhc2s6IHRydWUgLy8gU3RhcnQgYXMgbmV3IHRhc2suIFRoaXMgbWVhbnMgaXQgd2lsbCBzdGFydCBhIG5ldyBoaXN0b3J5IHN0YWNrIGluc3RlYWQgb2YgdXNpbmcgdGhlIGN1cnJlbnQgYXBwLiBEZWZhdWx0IHRydWUuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcyBhcHAgbGF1bmNoZWQuXCIpO1xuICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVGFwc2V0RmVlZGJhY2tTdGF0ZTEoZXZlbnQpe1xuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuX3VzZXJJc0xvZ2dlZEluICYmIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrICE9PSAxKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIktPTU1FXCIpO1xuICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLnNldEZlZWRiYWNrKHRoaXMuX3NlcnZlcmFkcmVzcywgdGhpcy5fdXNlcm5hbWUsIHRoaXMuX3Bhc3N3b3JkaGFzaCwgdGhpcy5vcGVyYXRpb24uX3V1aWRbJ3ZhbHVlJ10sIHRoaXMuX2Jhc2VkYXRhVVVJRCwgMSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mZWVkYmFja1NlcnZpY2UucGVyc2lzdEZlZWRiYWNrKHRoaXMub3BlcmF0aW9uLl91dWlkWyd2YWx1ZSddLG1vbWVudCgpLmZvcm1hdCgpLCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcEZlZWRiYWNrID0gdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLmdldEZlZWRiYWNrRm9yT3BlcmF0aW9uVVVJRCh0aGlzLm9wZXJhdGlvbi5fdXVpZFsndmFsdWUnXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50T3BlcmF0aW9uRmVlZGJhY2sgPSB0aGlzLmN1cnJlbnRPcEZlZWRiYWNrW1wic3RhdGVcIl07XG4gICAgICAgICAgICAgICAgdGhpcy5mZWVkYmFja1RpbWVzdGFtcCAgPSB0aGlzLmN1cnJlbnRPcEZlZWRiYWNrW1widGltZXN0YW1wXCJdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVGFwc2V0RmVlZGJhY2tTdGF0ZTIoZXZlbnQpe1xuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuX3VzZXJJc0xvZ2dlZEluICYmIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrICE9PSAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIktPTU1FIE5JQ0hUXCIpO1xuICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLnNldEZlZWRiYWNrKHRoaXMuX3NlcnZlcmFkcmVzcywgdGhpcy5fdXNlcm5hbWUsIHRoaXMuX3Bhc3N3b3JkaGFzaCwgdGhpcy5vcGVyYXRpb24uX3V1aWRbJ3ZhbHVlJ10sdGhpcy5fYmFzZWRhdGFVVUlELCAyKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrU2VydmljZS5wZXJzaXN0RmVlZGJhY2sodGhpcy5vcGVyYXRpb24uX3V1aWRbJ3ZhbHVlJ10sbW9tZW50KCkuZm9ybWF0KCksIDIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wRmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja1NlcnZpY2UuZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb25VVUlEKHRoaXMub3BlcmF0aW9uLl91dWlkWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcGVyYXRpb25GZWVkYmFjayA9IHRoaXMuY3VycmVudE9wRmVlZGJhY2tbXCJzdGF0ZVwiXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZlZWRiYWNrVGltZXN0YW1wICA9IHRoaXMuY3VycmVudE9wRmVlZGJhY2tbXCJ0aW1lc3RhbXBcIl07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiPEFjdGlvbkJhciBjbGFzcz1cXFwiaGVhZGVyIHByaW1hcnlcXFwiID5cXG4gICAgPCEtLSBTaG91bGQgcmVtb3ZlIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbiAtLT5cXG4gICAgPE5hdmlnYXRpb25CdXR0b24gaW9zOnZpc2liaWxpdHk9XFxcImNvbGxhcHNlZFxcXCI+PC9OYXZpZ2F0aW9uQnV0dG9uPlxcbiAgICA8TGFiZWwgdGV4dD1cXFwiQUxBUk1pYXRvclxcXCIgaG9yaXpvbnRhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBjbGFzcz1cXFwidC0xOFxcXCI+PC9MYWJlbD5cXG4gICAgPEFjdGlvbkl0ZW0gaW9zLnBvc2l0aW9uPVxcXCJyaWdodFxcXCIgYW5kcm9pZC5wb3NpdGlvbj1cXFwicmlnaHRcXFwiICh0YXApPVxcXCJvblByb2ZpbGVCdXR0b25UYXAoKVxcXCI+XFxuICAgICAgICA8TGFiZWwgY2xhc3M9XFxcImZhcyB0LTIwXFxcIiB0ZXh0PVxcXCImI3hmMGMwO1xcXCI+PC9MYWJlbD4gXFxuICAgIDwvQWN0aW9uSXRlbT5cXG48L0FjdGlvbkJhcj5cXG48Qm90dG9tTmF2aWdhdGlvbiBzZWxlY3RlZEluZGV4PVxcXCIwXFxcIj5cXG5cXG4gICAgPCEtLSBUaGUgYm90dG9tIHRhYiBVSSBpcyBjcmVhdGVkIHZpYSBUYWJTdHJpcCAodGhlIGNvbnRhaW5pZXIpIGFuZCBUYWJTdHJpcEl0ZW0gKGZvciBlYWNoIHRhYiktLT5cXG4gICAgPFRhYlN0cmlwPlxcbiAgICAgICAgPFRhYlN0cmlwSXRlbSAodGFwKT1cXFwib25PcGVyYXRpb25zSXRlbVRhcHBlZCgkZXZlbnQpXFxcIj5cXG4gICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcInRhYlN0cmlwSWNvblRleHRcXFwiIHRleHQ9XFxcIkVpbnPDpHR6ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICA8SW1hZ2Ugc3JjPVxcXCJmb250Oi8vJiN4ZjBmMztcXFwiIGNsYXNzPVxcXCJmYXMgdC0zNlxcXCI+PC9JbWFnZT5cXG4gICAgICAgIDwvVGFiU3RyaXBJdGVtPlxcbiAgICAgICAgPFRhYlN0cmlwSXRlbSBjbGFzcz1cXFwic3BlY2lhbFxcXCI+XFxuICAgICAgICAgICAgPExhYmVsIGNsYXNzPVxcXCJ0YWJTdHJpcEljb25UZXh0XFxcIiB0ZXh0PVxcXCJFaW5zdGVsbHVuZ2VuXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgIDxJbWFnZSBzcmM9XFxcImZvbnQ6Ly8mI3hmMDEzO1xcXCIgY2xhc3M9XFxcImZhcyB0LTM2XFxcIj48L0ltYWdlPlxcbiAgICAgICAgPC9UYWJTdHJpcEl0ZW0+XFxuICAgIDwvVGFiU3RyaXA+XFxuXFxuICAgIDwhLS0gVGhlIG51bWJlciBvZiBUYWJDb250ZW50SXRlbSBjb21wb25lbnRzIHNob3VsZCBjb3Jlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBUYWJTdHJpcEl0ZW0gY29tcG9uZW50cyAtLT5cXG4gICAgPFRhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgPEdyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgPFJhZExpc3RWaWV3ICNsaXN0dmlldyBbaXRlbXNdPVxcXCJvcGVyYXRpb25zXFxcIiAoaXRlbVRhcCk9XFxcIm9uT3BlcmF0aW9uSXRlbVRhcCgkZXZlbnQpXFxcIiBjbGFzcz1cXFwib3BlcmF0aW9ucy1saXN0XFxcIiBzd2lwZUFjdGlvbnM9XFxcInRydWVcXFwiIFxcbiAgICAgICAgICAgIChpdGVtU3dpcGVQcm9ncmVzc0VuZGVkKT1cXFwib25Td2lwZUNlbGxGaW5pc2hlZCgkZXZlbnQpXFxcIlxcbiAgICAgICAgICAgIChpdGVtU3dpcGVQcm9ncmVzc1N0YXJ0ZWQpPVxcXCJvblN3aXBlQ2VsbFN0YXJ0ZWQoJGV2ZW50KVxcXCIgKGl0ZW1Td2lwZVByb2dyZXNzQ2hhbmdlZCk9XFxcIm9uQ2VsbFN3aXBpbmcoJGV2ZW50KVxcXCJcXG4gICAgICAgICAgICA+XFxuICAgICAgICAgICAgICAgIDwhLS1cXG4gICAgICAgICAgICBSYWRMaXN0VmlldyBpcyBhIFVJIGNvbXBvbmVudCBwYXJ0IG9mIHRoZSBQcm9ncmVzcyBOYXRpdmVTY3JpcHQgVUkgc2V0IG9mIGNvbXBvbmVudHMuXFxuICAgICAgICAgICAgTGVhcm4gbW9yZSBhYm91dCB0aGUgUmFkTGlzdFZpZXcgVUkgY29tcG9uZW50IGFuZCBob3cgaXQgY2FuIGJlIGN1c3RvbWl6ZWQgaW4gdGhpcyBkb2N1bWVudGF0aW9uIGFydGljbGU6XFxuICAgICAgICAgICAgaHR0cHM6Ly9kb2NzLm5hdGl2ZXNjcmlwdC5vcmcvYW5ndWxhci91aS9wcm9mZXNzaW9uYWwtdWktY29tcG9uZW50cy9uZy1MaXN0Vmlldy9nZXR0aW5nLXN0YXJ0ZWRcXG4gICAgICAgICAgICBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIG1hc3RlciBsaXN0IGluIHRoZSBtYXN0ZXItZGV0YWlsIHN0cnVjdHVyZS5cXG4gICAgICAgICAgICAtLT5cXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHRrTGlzdEl0ZW1UZW1wbGF0ZSBsZXQtb3BlcmF0aW9uPVxcXCJpdGVtXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwib3BlcmF0aW9ucy1saXN0X19pdGVtXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8R3JpZExheW91dCByb3dzPVxcXCIqLCAqLCAqXFxcIiBjb2x1bW5zPVxcXCJhdXRvLCAqLCBhdXRvXFxcIiBjbGFzcz1cXFwib3BlcmF0aW9ucy1saXN0X19pdGVtLWNvbnRlbnQgdC0xOFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIiYjeGYwMTc7XFxcIiBjbGFzcz1cXFwiZmFzIG9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fYWxhcm1kYXRlLnZhbHVlICsgJyAnICsgb3BlcmF0aW9uLl9hbGFybXRpbWUudmFsdWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCAqbmdJZj1cXFwib3BlcmF0aW9uLl9pY29uICE9IHVuZGVmaW5lZFxcXCIgY29sPVxcXCIyXFxcIiBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJyaWdodFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJtLXItNSBmYXMgdC0zNiBvcGVyYXRpb25zLWxpc3RfX2l0ZW0taWNvblxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX2ljb25cXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCByb3c9XFxcIjFcXFwiIGNsYXNzPVxcXCJociBtLXktNVxcXCIgY29sc3Bhbj1cXFwiM1xcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgcm93PVxcXCIyXFxcIiBjb2w9XFxcIjBcXFwiIGNvbHNwYW49XFxcIjNcXFwiIHJvd3M9XFxcIiosICosICosICpcXFwiIGNvbHVtbnM9XFxcImF1dG8sICosIGF1dG9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBjbGFzcz1cXFwicC1iLTEwIHQtMThcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMFxcXCIgcm93c3Bhbj1cXFwiMlxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCImI3hmMGYzO1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZmFzIG9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uXFxcIj4gPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XFxcIm9wZXJhdGlvbi5fc3ViamVjdC52YWx1ZSArICcgLSAnICsgb3BlcmF0aW9uLl9rZXl3b3JkQ2F0ZWdvcnkudmFsdWVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIxXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9rZXl3b3JkTmFtZS52YWx1ZVxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjJcXFwiIHJvd3NwYW4gPVxcXCIyXFxcIiAqbmdJZj1cXFwiZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb24ob3BlcmF0aW9uLl91dWlkLnZhbHVlKSAhPSBudWxsXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XSA9XFxcImdldEZlZWRiYWNrRm9yT3BlcmF0aW9uKG9wZXJhdGlvbi5fdXVpZC52YWx1ZSlcXFwiIGNsYXNzPVxcXCJmYXMgb3BlcmF0aW9ucy1saXN0X19pdGVtLWZlZWRiYWNrLWljb24gdC0yNVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQgcm93PVxcXCIyXFxcIiBjbGFzcz1cXFwiaHIgbS15LTVcXFwiIGNvbHNwYW49XFxcIjNcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIzXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIiYjeGYyNzY7XFxcIiBjbGFzcz1cXFwiZmFzIG9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uXFxcIj4gPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCAqbmdJZj1cXFwib3BlcmF0aW9uLl9sb2NhdGlvbkNhbGMgPT0gdW5kZWZpbmVkICYmIG9wZXJhdGlvbi5fbG9jYXRpb24gIT0gdW5kZWZpbmVkXFxcIiByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX2xvY2F0aW9uLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCAqbmdJZj1cXFwib3BlcmF0aW9uLl9sb2NhdGlvbkNhbGMgPT0gdW5kZWZpbmVkICYmIG9wZXJhdGlvbi5fbG9jYXRpb24gPT0gdW5kZWZpbmVkXFxcIiByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMVxcXCIgdGV4dD1cXFwiLS1cXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsICpuZ0lmPVxcXCJvcGVyYXRpb24uX2xvY2F0aW9uQ2FsYyAhPSB1bmRlZmluZWRcXFwiIHJvdz1cXFwiM1xcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fbG9jYXRpb25DYWxjLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgIDxHcmlkTGF5b3V0ICp0a0xpc3RJdGVtU3dpcGVUZW1wbGF0ZSBjb2x1bW5zPVxcXCJhdXRvLCAqLCBhdXRvXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTEVGVCBTV0lQSU5HIENVUlJFTlRMWSBOT1QgVVNFRC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiKiwgKiwgKlxcXCIgY29sPVxcXCIwXFxcIiBpZD1cXFwibGVmdC1zdGFja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sPVxcXCIwXFxcIiBjbGFzcz1cXFwibWFya0dyaWRMYXlvdXRcXFwiICh0YXApPVxcXCJvbkxlZnRTd2lwZUNsaWNrKCRldmVudClcXFwiIGlkPVxcXCJidG5NYXJrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcIm1hcmtcXFwiIGNsYXNzPVxcXCJzd2lwZVRlbXBsYXRlTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sPVxcXCIxXFxcIiBjbGFzcz1cXFwiYXJjaGl2ZUdyaWRMYXlvdXRcXFwiICh0YXApPVxcXCJvbkxlZnRTd2lwZUNsaWNrKCRldmVudClcXFwiIGlkPVxcXCJidG5BcmNoaXZlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcImFyY2hpdmVcXFwiIGNsYXNzPVxcXCJzd2lwZVRlbXBsYXRlTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sPVxcXCIyXFxcIiBjbGFzcz1cXFwidW5yZWFkR3JpZExheW91dFxcXCIgKHRhcCk9XFxcIm9uTGVmdFN3aXBlQ2xpY2soJGV2ZW50KVxcXCIgaWQ9XFxcImJ0blVucmVhZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCB0ZXh0PVxcXCJ1bnJlYWRcXFwiIGNsYXNzPVxcXCJzd2lwZVRlbXBsYXRlTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICA8R3JpZExheW91dCBjb2x1bW5zPVxcXCIqXFxcIiBjb2w9XFxcIjJcXFwiIGlkPVxcXCJyaWdodC1zdGFja1xcXCIgY2xhc3M9XFxcIm0tMTBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxHcmlkTGF5b3V0IGNvbD1cXFwiMFxcXCIgY2xhc3M9XFxcImRlbGV0ZUdyaWRMYXlvdXRcXFwiICh0YXApPVxcXCJvblJpZ2h0U3dpcGVDbGljaygkZXZlbnQpXFxcIiBpZD1cXFwiYnRuRGVsZXRlXFxcIiBiYWNrZ3JvdW5kQ29sb3I9XFxcInJlZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCB0ZXh0PVxcXCImI3hmMWY4O1xcXCIgY2xhc3M9XFxcInN3aXBlVGVtcGxhdGVMYWJlbCBmYXMgdC0yMFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgaG9yaXpvbnRhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICAgICAgICAgIDwvUmFkTGlzdFZpZXc+XFxuICAgICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIFtidXN5XT1cXFwiaXNMb2FkaW5nXFxcIj48L0FjdGl2aXR5SW5kaWNhdG9yPlxcbiAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICA8L1RhYkNvbnRlbnRJdGVtPlxcbiAgICA8VGFiQ29udGVudEl0ZW0+XFxuICAgICAgICA8U2Nyb2xsVmlldz5cXG4gICAgICAgICAgICA8bnMtc2V0dGluZ3M+PC9ucy1zZXR0aW5ncz5cXG4gICAgICAgIDwvU2Nyb2xsVmlldz5cXG4gICAgPC9UYWJDb250ZW50SXRlbT5cXG5cXG48L0JvdHRvbU5hdmlnYXRpb24+XCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiQGtleWZyYW1lcyBlbXB0eSB7fS8qIEZvcm1zICovXFxuLypcXG4kYmFzZS10aGVtZTpNYXRlcmlhbDtcXG4kc2tpbi1uYW1lOiBhbGFybWlhdG9yLW1hdDtcXG4kc3dhdGNoLW5hbWU6TWF0ZXJpYWw7XFxuJGJvcmRlci1yYWRpdXM6IDJweDtcXG4kcHJpbWFyeS1wYWxldHRlLW5hbWU6IHJlZDtcXG4kc2Vjb25kYXJ5LXBhbGV0dGUtbmFtZTogcmVkO1xcbiR0aGVtZS10eXBlOiBkYXJrO1xcbiAqL1xcbkFjdGlvbkJhciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTYxNTNEOyB9XFxuXFxuLnRhYlN0cmlwSWNvblRleHQge1xcbiAgZm9udC1zaXplOiAxODsgfVxcblxcbi5mYXMge1xcbiAgZm9udC1mYW1pbHk6IFxcXCJGb250IEF3ZXNvbWUgNSBGcmVlXFxcIiwgXFxcImZhLXNvbGlkLTkwMFxcXCI7XFxuICBmb250LXdlaWdodDogOTAwOyB9XFxuXFxuLnQtMzYge1xcbiAgZm9udC1zaXplOiAzNjsgfVxcblxcbi5vcGVyYXRpb25zRGV0YWlsVGV4dCwgLm9wZXJhdGlvbnMtbGlzdF9faXRlbSB7XFxuICBmb250LXNpemU6IDE0OyB9XFxuXFxuLm9wZXJhdGlvbnMtbGlzdF9faXRlbSB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7IH1cXG4gIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0tY29udGVudCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNGU3ZWI7XFxuICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7IH1cXG4gIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0tbmFtZSwgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uIHtcXG4gICAgY29sb3I6IHJlZDsgfVxcblxcbjpob3N0LWNvbnRleHQoLm5zLWRhcmspIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0ge1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG4gIG1hcmdpbi1yaWdodDogNHB4OyB9XFxuICA6aG9zdC1jb250ZXh0KC5ucy1kYXJrKSAub3BlcmF0aW9ucy1saXN0X19pdGVtLWNvbnRlbnQge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcXG4gICAgYm9yZGVyLXJhZGl1czogNDBweDsgfVxcbiAgOmhvc3QtY29udGV4dCgubnMtZGFyaykgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1uYW1lLCA6aG9zdC1jb250ZXh0KC5ucy1kYXJrKSAub3BlcmF0aW9ucy1saXN0X19pdGVtLWljb24ge1xcbiAgICBjb2xvcjogcmVkOyB9XFxuXFxuLmRlbGV0ZUdyaWRMYXlvdXQge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweDsgfVxcblxcbi5vcGVyYXRpb25zLWxpc3RfX2l0ZW0ge1xcbiAgbWFyZ2luLXRvcDogMjBweDtcXG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xcbiAgcGFkZGluZzogMjBweDsgfVxcbiAgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1jb250ZW50IHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZTdlYjtcXG4gICAgYm9yZGVyLXJhZGl1czogNDBweDtcXG4gICAgbWFyZ2luLXRvcDogMjBweDtcXG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XFxuICAgIG1hcmdpbi1yaWdodDogMjBweDtcXG4gICAgcGFkZGluZzogMjBweDsgfVxcbiAgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1uYW1lLCAub3BlcmF0aW9ucy1saXN0X19pdGVtLWljb24ge1xcbiAgICBjb2xvcjogcmVkOyB9XFxuXFxuOmhvc3QtY29udGV4dCgubnMtZGFyaykgLm9wZXJhdGlvbnMtbGlzdF9faXRlbSB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7IH1cXG4gIDpob3N0LWNvbnRleHQoLm5zLWRhcmspIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0tY29udGVudCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xcbiAgICBib3JkZXItcmFkaXVzOiA0MHB4OyB9XFxuICA6aG9zdC1jb250ZXh0KC5ucy1kYXJrKSAub3BlcmF0aW9ucy1saXN0X19pdGVtLW5hbWUsIDpob3N0LWNvbnRleHQoLm5zLWRhcmspIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0taWNvbiB7XFxuICAgIGNvbG9yOiByZWQ7IH1cXG5cXG4uZGVsZXRlR3JpZExheW91dCB7XFxuICBib3JkZXItcmFkaXVzOiA1MHB4O1xcbiAgbWFyZ2luLXRvcDogMjBweDtcXG4gIHBhZGRpbmctdG9wOiAyMHB4OyB9XFxuXCIiLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyRXh0ZW5zaW9ucyB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IExpc3RWaWV3RXZlbnREYXRhLCBSYWRMaXN0Vmlld30gZnJvbSBcIm5hdGl2ZXNjcmlwdC11aS1saXN0dmlld1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUFycmF5IH0gZnJvbSBcInRucy1jb3JlLW1vZHVsZXMvZGF0YS9vYnNlcnZhYmxlLWFycmF5XCI7XG5cbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9zaGFyZWQvb3BlcmF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gXCIuL3NoYXJlZC9vcGVyYXRpb24ubW9kZWxcIjtcbmltcG9ydCB7IFJhZExpc3RWaWV3Q29tcG9uZW50IH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC11aS1saXN0dmlldy9hbmd1bGFyXCI7XG5pbXBvcnQgeyBWaWV3LCBsYXlvdXQgfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy91aS9wYWdlXCI7XG5pbXBvcnQgeyBGZWVkYmFjaywgRmVlZGJhY2tUeXBlLCBGZWVkYmFja1Bvc2l0aW9uIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1mZWVkYmFja1wiO1xuaW1wb3J0IFRoZW1lIGZyb20gXCJAbmF0aXZlc2NyaXB0L3RoZW1lXCI7XG5pbXBvcnQgeyBGZWVkYmFja1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZmVlZGJhY2suc2VydmljZVwiO1xuXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKiBUaGlzIGlzIHRoZSBtYXN0ZXIgbGlzdCBjb21wb25lbnQgaW4gdGhlIG1hc3Rlci1kZXRhaWwgc3RydWN0dXJlLlxuKiBUaGlzIGNvbXBvbmVudCBnZXRzIHRoZSBkYXRhLCBwYXNzZXMgaXQgdG8gdGhlIG1hc3RlciB2aWV3IGFuZCBkaXNwbGF5cyBpdCBpbiBhIGxpc3QuXG4qIEl0IGFsc28gaGFuZGxlcyB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZGV0YWlscyBwYWdlIGZvciBlYWNoIGl0ZW0uXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwiT3BlcmF0aW9uc0xpc3RcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL29wZXJhdGlvbi1saXN0LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL29wZXJhdGlvbi1saXN0LmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgX2lzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX29wZXJhdGlvbnM6IE9ic2VydmFibGVBcnJheTxPcGVyYXRpb24+O1xuICAgIHB1YmxpYyBzZWxlY3RlZEluZGV4ID0gMTtcblxuICAgIHByaXZhdGUgbWFpblZpZXc7XG4gICAgcHJpdmF0ZSBsZWZ0SXRlbTtcbiAgICBwcml2YXRlIHJpZ2h0SXRlbTtcbiAgICBwcml2YXRlIF9vcGVyYXRpb25Tb3J0aW5nRnVuY3Rpb246IChpdGVtOiBhbnksIG90aGVySXRlbTogYW55KSA9PiBudW1iZXI7XG4gICAgcHJpdmF0ZSBmZWVkYmFjazogRmVlZGJhY2s7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyRXh0ZW5zaW9uczogUm91dGVyRXh0ZW5zaW9ucyxcbiAgICAgICAgcHJpdmF0ZSBfb3BlcmF0aW9uU2VydmljZTogT3BlcmF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmVlZGJhY2tTZXJ2aWNlOiBGZWVkYmFja1NlcnZpY2UsXG4gICAgKSB7IFxuICAgIH1cbiAgICBcbiAgICBAVmlld0NoaWxkKCdsaXN0dmlldycse3N0YXRpYzogZmFsc2V9KSByYWRMaXN0VmlldzogUmFkTGlzdFZpZXdDb21wb25lbnQ7XG4gICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAqIFVzZSB0aGUgXCJuZ09uSW5pdFwiIGhhbmRsZXIgdG8gZ2V0IHRoZSBkYXRhIGFuZCBhc3NpZ24gaXQgdG8gdGhlXG4gICAgKiBwcml2YXRlIHByb3BlcnR5IHRoYXQgaG9sZHMgaXQgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgRmVlZGJhY2soKTsgIFxuICAgICAgICBcbiAgICAgICAgdGhpcy5fb3BlcmF0aW9uU2VydmljZS5nZXRBbGxPcCgpLnN1YnNjcmliZSggKG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMuc3BsaWNlKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJldmVyZXNlZE9wZXJhdGlvbiA9IG9wZXJhdGlvbi5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucyA9IG5ldyBPYnNlcnZhYmxlQXJyYXk8T3BlcmF0aW9uPihyZXZlcmVzZWRPcGVyYXRpb24ucmV2ZXJzZSgpKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub3BlcmF0aW9uU29ydGluZ0Z1bmN0aW9uID0gKGl0ZW06IE9wZXJhdGlvbiwgb3RoZXJJdGVtOiBPcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE86IEFkZCBmaWx0ZXJpbmcgY3JpdGVyaWFcbiAgICAgICAgLy8gICAgY29uc3QgcmVzID0gaXRlbS5pZCA8IG90aGVySXRlbS5pZCA/IC0xIDogaXRlbS5pZCA+IG90aGVySXRlbS5pZCA/IDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gMDtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKTp2b2lkIHtcbiAgICAgICAgICAgIC8vIGdldCBhcmNoaXZlIGZyb20gc3RvcmFnZVxuICAgICAgICAgICAgYWxlcnQoXCJoaVwiKTtcbiAgICAgICAgICAvLyAgdGhpcy5fb3BlcmF0aW9ucyA9IG5ldyBPYnNlcnZhYmxlQXJyYXkodGhpcy5fb3BlcmF0aW9uU2VydmljZS5nZXRBbGxPcGVyYXRpb25zKCkpO1xuICAgIH1cblxuICAgIGdldCBvcGVyYXRpb25zKCkgOiBPYnNlcnZhYmxlQXJyYXk8T3BlcmF0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRpb25zO1xuICAgIH1cblxuICAgIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gICAgfVxuICAgICAgXG4gICAgZ2V0IG9wZXJhdGlvblNvcnRpbmdGdW5jdGlvbigpOiAoaXRlbTogYW55LCBvdGhlckl0ZW06IGFueSkgPT4gbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGlvblNvcnRpbmdGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgb3BlcmF0aW9uU29ydGluZ0Z1bmN0aW9uKHZhbHVlOiAoaXRlbTogYW55LCBvdGhlckl0ZW06IGFueSkgPT4gbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX29wZXJhdGlvblNvcnRpbmdGdW5jdGlvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgKiBVc2UgdGhlIFwiaXRlbVRhcFwiIGV2ZW50IGhhbmRsZXIgb2YgdGhlIDxSYWRMaXN0Vmlldz4gdG8gbmF2aWdhdGUgdG8gdGhlXG4gICAgKiBpdGVtIGRldGFpbHMgcGFnZS4gUmV0cmlldmUgYSByZWZlcmVuY2UgZm9yIHRoZSBkYXRhIGl0ZW0gKHRoZSBpZCkgYW5kIHBhc3MgaXRcbiAgICAqIHRvIHRoZSBpdGVtIGRldGFpbHMgcGFnZSwgc28gdGhhdCBpdCBjYW4gaWRlbnRpZnkgd2hpY2ggZGF0YSBpdGVtIHRvIGRpc3BsYXkuXG4gICAgKiBMZWFybiBtb3JlIGFib3V0IG5hdmlnYXRpbmcgd2l0aCBhIHBhcmFtZXRlciBpbiB0aGlzIGRvY3VtZW50YXRpb24gYXJ0aWNsZTpcbiAgICAqIGh0dHA6Ly9kb2NzLm5hdGl2ZXNjcmlwdC5vcmcvYW5ndWxhci9jb3JlLWNvbmNlcHRzL2FuZ3VsYXItbmF2aWdhdGlvbi5odG1sI3Bhc3NpbmctcGFyYW1ldGVyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICBvbk9wZXJhdGlvbkl0ZW1UYXAoYXJnczogTGlzdFZpZXdFdmVudERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFwcGVkT3BlcmF0aW9uSXRlbSA9IGFyZ3Mudmlldy5iaW5kaW5nQ29udGV4dDtcbiAgICAgICAgdGhpcy5fb3BlcmF0aW9uU2VydmljZS5yZWRpcmVjdFRvT3BlcmF0aW9uRGV0YWlscyh0YXBwZWRPcGVyYXRpb25JdGVtLmlkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25QdWxsVG9SZWZyZXNoSW5pdGlhdGVkKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKTp2b2lkIHtcbiAgICAgICAgY29uc3QgbGlzdFZpZXcgPSBhcmdzLm9iamVjdDtcbiAgICAgICAgbGlzdFZpZXcucmVmcmVzaCgpXG4gICAgICAgIGxpc3RWaWV3Lm5vdGlmeVB1bGxUb1JlZnJlc2hGaW5pc2hlZCgpO1xuICAgIH1cblxuICAgIG9uT3BlcmF0aW9uc0l0ZW1UYXBwZWQoZXZlbnQpe1xuICAgICAgICB0aGlzLnJhZExpc3RWaWV3Lmxpc3RWaWV3LnJlZnJlc2goKTtcbiAgICB9XG4gICAgb25Qcm9maWxlQnV0dG9uVGFwKGV2ZW50KXtcbiAgICAgICAgdGhpcy5fcm91dGVyRXh0ZW5zaW9ucy5uYXZpZ2F0ZShbXCIvcHJvZmlsZXNcIl0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2xpZGVcIixcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgICAgICAgICAgIGN1cnZlOiBcImVhc2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Td2lwZUNlbGxTdGFydGVkKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKSB7XG4gICAgICAgIGNvbnN0IHN3aXBlTGltaXRzID0gYXJncy5kYXRhLnN3aXBlTGltaXRzO1xuICAgICAgICBzd2lwZUxpbWl0cy50aHJlc2hvbGQgPSBhcmdzWydtYWluVmlldyddLmdldE1lYXN1cmVkV2lkdGgoKSAqIDAuMzsgLy8gMzAlIG9mIHdob2xlIHdpZHRoXG4gICAvLyAgICAgc3dpcGVMaW1pdHMubGVmdCA9IGFyZ3NbJ21haW5WaWV3J10uZ2V0TWVhc3VyZWRXaWR0aCgpICogMC42NTsgLy8gNjUlIG9mIHdob2xlIHdpZHRoXG4gICAgICAgIHN3aXBlTGltaXRzLmxlZnQgPSAwOyAvLyB0dXJuIG9mZiBsZWZ0IHN3aXBpbmdcbiAgICAgICAgc3dpcGVMaW1pdHMucmlnaHQgPSBhcmdzWydtYWluVmlldyddLmdldE1lYXN1cmVkV2lkdGgoKSAqIDAuMzA7IC8vIDM1JSBvZiB3aG9sZSB3aWR0aFxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgb25MZWZ0U3dpcGVDbGljayhhcmdzOiBMaXN0Vmlld0V2ZW50RGF0YSkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkxlZnQgc3dpcGUgY2xpY2tcIik7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBvblJpZ2h0U3dpcGVDbGljayhhcmdzOkxpc3RWaWV3RXZlbnREYXRhKSB7XG4gICAgICAvLyAgY29uc29sZS5sb2coXCJSaWdodCBzd2lwZSBjbGlja1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYXJncy52aWV3LmJpbmRpbmdDb250ZXh0KTtcbiAgICAgICAgaWYgKGFyZ3Mub2JqZWN0LmlkID09IFwiYnRuRGVsZXRlXCIpe1xuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyhcIkRFTEVURSBPUEVSQVRJT05cIik7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKGFyZ3Mudmlldy5iaW5kaW5nQ29udGV4dFsnX3V1aWQnXVsndmFsdWUnXSk7XG4gICAgICAgICAgICBpZiAoYXJncy52aWV3LmJpbmRpbmdDb250ZXh0WydfdXVpZCddICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3Mudmlldy5iaW5kaW5nQ29udGV4dFsnX3V1aWQnXVsndmFsdWUnXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGV0ZVJlc3VsdCA9IHRoaXMuX29wZXJhdGlvblNlcnZpY2UuZGVsZXRlT3BlcmF0aW9uRm9yVVVJRChhcmdzLnZpZXcuYmluZGluZ0NvbnRleHRbJ191dWlkJ11bJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlUmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVlZGJhY2suc3VjY2Vzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRXJmb2xncmVpY2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkVpbnNhdHogd3VyZGUgZ2Vsw7ZzY2h0IVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWRMaXN0Vmlldy5saXN0Vmlldy5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRVJST1IgV0hJTEUgREVMRVRJTkc6IE5vIFVVSUQgVkFMVUUgRk9VTkRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFUlJPUiBXSElMRSBERUxFVElORzogTm8gVVVJRCBGT1VORFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblN3aXBlQ2VsbEZpbmlzaGVkKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKSB7XG4gICAgICAgLy8gY29uc29sZS5sb2coXCJjZWxsIHN3aXBpbmcgZmluaXNoZWRcIilcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DZWxsU3dpcGluZyhhcmdzOiBMaXN0Vmlld0V2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBzd2lwZUxpbWl0cyA9IGFyZ3MuZGF0YS5zd2lwZUxpbWl0cztcbiAgICAgICAgY29uc3Qgc3dpcGVWaWV3ID0gYXJnc1snc3dpcGVWaWV3J107XG4gICAgICAgIHRoaXMubWFpblZpZXcgPSBhcmdzWydtYWluVmlldyddO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgcmVmZXJlbmNpbmcgaXRlbSBkb2VzIG5vdCBleGlzdCBhbnltb3JlXG4gICAgICAgIGlmIChzd2lwZVZpZXcgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW0gPSBzd2lwZVZpZXcuZ2V0Vmlld0J5SWQoJ2xlZnQtc3RhY2snKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtID0gc3dpcGVWaWV3LmdldFZpZXdCeUlkKCdyaWdodC1zdGFjaycpO1xuICAgICAgICBcbiAgICAgICAgICAgIGlmIChhcmdzLmRhdGEueCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0RGltZW5zaW9ucyA9IFZpZXcubWVhc3VyZUNoaWxkKFxuICAgICAgICAgICAgICAgICAgICA8Vmlldz50aGlzLmxlZnRJdGVtLnBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyhNYXRoLmFicyhhcmdzLmRhdGEueCksIGxheW91dC5FWEFDVExZKSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyh0aGlzLm1haW5WaWV3LmdldE1lYXN1cmVkSGVpZ2h0KCksIGxheW91dC5FWEFDVExZKSk7XG4gICAgICAgICAgICAgICAgVmlldy5sYXlvdXRDaGlsZCg8Vmlldz50aGlzLmxlZnRJdGVtLnBhcmVudCwgdGhpcy5sZWZ0SXRlbSwgMCwgMCwgbGVmdERpbWVuc2lvbnMubWVhc3VyZWRXaWR0aCwgbGVmdERpbWVuc2lvbnMubWVhc3VyZWRIZWlnaHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU90aGVyU3dpcGVUZW1wbGF0ZVZpZXcoXCJsZWZ0XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodERpbWVuc2lvbnMgPSBWaWV3Lm1lYXN1cmVDaGlsZChcbiAgICAgICAgICAgICAgICAgICAgPFZpZXc+dGhpcy5yaWdodEl0ZW0ucGFyZW50LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyhNYXRoLmFicyhhcmdzLmRhdGEueCksIGxheW91dC5FWEFDVExZKSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyh0aGlzLm1haW5WaWV3LmdldE1lYXN1cmVkSGVpZ2h0KCksIGxheW91dC5FWEFDVExZKSk7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIFZpZXcubGF5b3V0Q2hpbGQoPFZpZXc+dGhpcy5yaWdodEl0ZW0ucGFyZW50LCB0aGlzLnJpZ2h0SXRlbSwgdGhpcy5tYWluVmlldy5nZXRNZWFzdXJlZFdpZHRoKCkgLSByaWdodERpbWVuc2lvbnMubWVhc3VyZWRXaWR0aCwgMCwgdGhpcy5tYWluVmlldy5nZXRNZWFzdXJlZFdpZHRoKCksIHJpZ2h0RGltZW5zaW9ucy5tZWFzdXJlZEhlaWdodCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlT3RoZXJTd2lwZVRlbXBsYXRlVmlldyhcInJpZ2h0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyhcIldBUk5JTkc6IEVYQ0VQVElPTiBDQVVHSFQhXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cbiAgICBcbiAgICBwcml2YXRlIGhpZGVPdGhlclN3aXBlVGVtcGxhdGVWaWV3KGN1cnJlbnRTd2lwZVZpZXc6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRTd2lwZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmlnaHRJdGVtLmdldEFjdHVhbFNpemUoKS53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBWaWV3LmxheW91dENoaWxkKDxWaWV3PnRoaXMucmlnaHRJdGVtLnBhcmVudCwgdGhpcy5yaWdodEl0ZW0sIHRoaXMubWFpblZpZXcuZ2V0TWVhc3VyZWRXaWR0aCgpLCAwLCB0aGlzLm1haW5WaWV3LmdldE1lYXN1cmVkV2lkdGgoKSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVmdEl0ZW0uZ2V0QWN0dWFsU2l6ZSgpLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIFZpZXcubGF5b3V0Q2hpbGQoPFZpZXc+dGhpcy5sZWZ0SXRlbS5wYXJlbnQsIHRoaXMubGVmdEl0ZW0sIDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25EYXJrQnV0dG9uVGFwKCl7XG4gICAgICAgIFRoZW1lLnRvZ2dsZU1vZGUoKTsgLy8gdG8gdG9nZ2xlIGJldHdlZW4gdGhlIG1vZGVzXG4gICAgfVxuXG4gICAgZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb24odXVpZDogc3RyaW5nKTogc3RyaW5ne1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLmdldEZlZWRiYWNrRm9yT3BlcmF0aW9uVVVJRCh1dWlkKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJY29uRm9yRmVlZGJhY2tTdGF0ZShyZXN1bHRbJ3N0YXRlJ10pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJY29uRm9yRmVlZGJhY2tTdGF0ZShzdGF0ZSk6IHN0cmluZ3tcbiAgICAgICAgdmFyIGljb24gPVwiXCJcbiAgICAgICAgc3dpdGNoIChzdGF0ZSl7XG4gICAgICAgICAgICBjYXNlIDE6IFxuICAgICAgICAgICAgICAgIGljb24gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjA1OCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgaWNvbiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhmMDU3KTtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpY29uID0gbnVsbFxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWNvbjtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSwgTk9fRVJST1JTX1NDSEVNQSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRDb21tb25Nb2R1bGUgfSBmcm9tIFwibmF0aXZlc2NyaXB0LWFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRGb3Jtc01vZHVsZSB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTmF0aXZlU2NyaXB0VUlMaXN0Vmlld01vZHVsZSB9IGZyb20gXCJuYXRpdmVzY3JpcHQtdWktbGlzdHZpZXcvYW5ndWxhclwiO1xuXG5pbXBvcnQgeyBPcGVyYXRpb25EZXRhaWxDb21wb25lbnQgfSBmcm9tIFwiLi9vcGVyYXRpb24tZGV0YWlsL29wZXJhdGlvbi1kZXRhaWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25MaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vb3BlcmF0aW9uLWxpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25zUm91dGluZ01vZHVsZSB9IGZyb20gXCIuL29wZXJhdGlvbnMtcm91dGluZy5tb2R1bGVcIjtcbmltcG9ydCB7IFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSBcIi4vLi4vc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50XCJcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE9wZXJhdGlvbnNSb3V0aW5nTW9kdWxlLFxuICAgICAgICBOYXRpdmVTY3JpcHRDb21tb25Nb2R1bGUsXG4gICAgICAgIE5hdGl2ZVNjcmlwdEZvcm1zTW9kdWxlLFxuICAgICAgICBOYXRpdmVTY3JpcHRVSUxpc3RWaWV3TW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgT3BlcmF0aW9uTGlzdENvbXBvbmVudCxcbiAgICAgICAgT3BlcmF0aW9uRGV0YWlsQ29tcG9uZW50LFxuICAgICAgICBTZXR0aW5nc0NvbXBvbmVudFxuICAgIF0sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXG5cbiAgICBdLFxuICAgIHByb3ZpZGVyczogW10sXG4gICAgc2NoZW1hczogW1xuICAgICAgICBOT19FUlJPUlNfU0NIRU1BXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25zTW9kdWxlIHsgfVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVzIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgTmF0aXZlU2NyaXB0Um91dGVyTW9kdWxlIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1hbmd1bGFyL3JvdXRlclwiO1xuXG5pbXBvcnQgeyBPcGVyYXRpb25EZXRhaWxDb21wb25lbnQgfSBmcm9tIFwiLi9vcGVyYXRpb24tZGV0YWlsL29wZXJhdGlvbi1kZXRhaWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25MaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vb3BlcmF0aW9uLWxpc3QuY29tcG9uZW50XCI7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgIHsgcGF0aDogXCJcIiwgY29tcG9uZW50OiBPcGVyYXRpb25MaXN0Q29tcG9uZW50IH0sXG4gICAgeyBwYXRoOiBcIm9wZXJhdGlvbi1kZXRhaWwvOmlkXCIsIGNvbXBvbmVudDogT3BlcmF0aW9uRGV0YWlsQ29tcG9uZW50IH0sXG5dO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXG4gICAgZXhwb3J0czogW05hdGl2ZVNjcmlwdFJvdXRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uc1JvdXRpbmdNb2R1bGUgeyB9XG4iLCJjb25zdCBtb21lbnQgPSByZXF1aXJlKFwibW9tZW50XCIpO1xuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbiB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBfc3ViamVjdCA6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBfbWVzc2FnZSA6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBfZ2VhciA6IGFueTtcbiAgICBfa2V5d29yZENhdGVnb3J5IDogYW55O1xuICAgIF9rZXl3b3JkSWQgOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgX2tleXdvcmROYW1lIDogYW55ID0gdW5kZWZpbmVkO1xuICAgIF9rZXl3b3JkUmF3IDogYW55ID0gdW5kZWZpbmVkO1xuICAgIF96dmVpcyA6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBfYWxhcm1kYXRlIDogYW55ID0gdW5kZWZpbmVkO1xuICAgIF9hbGFybXRpbWUgOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgX2xhdCA6IGFueSA9IDA7XG4gICAgX2xvbiA6IGFueSA9IDA7XG4gICAgX2ljb246IGFueTtcbiAgICBfdXVpZDogYW55O1xuICAgIF9pbmNvbWluZ1RpbWVTdGFtcDogYW55O1xuICAgIF9jcmVhdGVkQXQ6YW55O1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgZmlsbE9wZXJhdGlvbkZDTShwYXlsb2FkOiBKU09OKXtcbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKHBheWxvYWQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICB0aGlzW2tleV09IHBheWxvYWRba2V5XTtcbiAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuaWQgPSAgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgdGhpcy5hc3NpZ25JY29uKCk7XG4gICAgICAgIHRoaXMuX2luY29taW5nVGltZVN0YW1wID0gbW9tZW50KCkuZm9ybWF0KCk7XG4gICAgfVxuXG4gICAgZmlsbE9wZXJhdGlvbkZDTVdpdGhPcHRpb25zKHBheWxvYWQ6IEpTT04sIG9wdGlvbnM6IEpTT04pe1xuICAgICAgICBcbiAgICAgICAgT2JqZWN0LmtleXMocGF5bG9hZCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICB0aGlzW2tleV09IHBheWxvYWRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgdGhpcy5pZCA9ICBNYXRoLnJhbmRvbSgpO1xuICAgICAgICB0aGlzLmFzc2lnbkljb24oKTtcbiAgICAgICAgdGhpcy5faW5jb21pbmdUaW1lU3RhbXAgPSBtb21lbnQoKS5mb3JtYXQoKTtcbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgdGhpc1trZXldPSBvcHRpb25zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgYXNzaWduSWNvbigpe1xuICAgICAgICB2YXIgaWNvbjtcblxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIGNhc2UgL1N0cmHDn2UgcmVpbmlnZW4uKi8udGVzdCh0aGlzLl9rZXl3b3JkTmFtZS52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjUxYTsgLy8gYnJvb21cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL0FiZmFsbC4qLy50ZXN0KHRoaXMuX2tleXdvcmROYW1lLnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmNzk0OyAvLyBkdW1wc3Rlci1maXJlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9eQmF1bS4qLy50ZXN0KHRoaXMuX2tleXdvcmROYW1lLnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMWJiOyAvLyB0cmVlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9UaWVyLiovLnRlc3QodGhpcy5fa2V5d29yZENhdGVnb3J5LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmNmJlOyAvLyBjYXRcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL1ZVLiovLnRlc3QodGhpcy5fa2V5d29yZENhdGVnb3J5LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmNWUxOyAvLyBjYXJfY3Jhc2hcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15SRC4qLy50ZXN0KHRoaXMuX2tleXdvcmRDYXRlZ29yeS52YWx1ZSk6XG4gICAgICAgICAgICBjYXNlIC9eUkQuKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgIGNhc2UgL0ZJUlNUIFJFU1BPTkRFUi4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGYwZjk7IC8vIGFtYnVsYW5jZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvSFVCU0NIUkFVQkVSTEFORFVORy4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY1MzM7IC8vIGhlbGljb3B0ZXJcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL1VOV0VUVEVSLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4Zjc0MDsgLy8gY2xvdWQtc2hvd2Vycy1oZWF2eVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXkFCQyDDlkwuKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgIGNhc2UgL15BQkMgS1JBRlRTVE9GRi4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY2MTM7IC8vIG9pbC1jYW5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15CIEJNQS4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgY2FzZSAvXkFCQyBHRUZBSFJTVE9GRk1FTERFQU5MQUdFLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjU2NjsgLy8gZGlnaXRhbC10YWNob2dyYXBoXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9eVEhMIFAgRUlOR0VTQ0hMT1NTRU4uKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMDg0OyAvLyBrZXlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15USEwgUC4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY3Mjg7IC8vIHVzZXItaW5qdXJlZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITCBCRUxFVUNIVFVORy4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGYwZWI7IC8vIGxpZ2h0YnVsYlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITCBCT01CRS4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGYxZTI7IC8vIGJvbWJcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15USEwgRVJLVU5EVU5HLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjFlNTsgLy8gYmlub2N1bGFyc1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITCBHRULDhFVERS4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY2ZjE7IC8vIGhvdXNlLWRhbWFnZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlBST0JFQUxBUk0uKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgIGNhc2UgL15JTkYuKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMDllOyAvLyByc3NcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15CLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjA2ZDsgLy8gZmlyZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITC4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY3ZDk7IC8vIHRvb2xzXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9eQUJDLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjcxNDsgLy8gc2t1bGwtY3Jvc3Nib25lc1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMGYzOyAvLyBiZWxsXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB0aGlzLl9pY29uID0gU3RyaW5nLmZyb21DaGFyQ29kZShpY29uKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuLy8gVE9ETzogc2hvdWxkIGJlIGltcG9ydGVkIGZyb20ga2ludmV5LW5hdGl2ZXNjcmlwdC1zZGsvYW5ndWxhciBidXQgZGVjbGFyYXRpb24gZmlsZSBpcyBjdXJyZW50bHkgbWlzc2luZ1xuaW1wb3J0IHsgUm91dGVyRXh0ZW5zaW9ucyB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0ICogYXMgZmlyZWJhc2UgZnJvbVwibmF0aXZlc2NyaXB0LXBsdWdpbi1maXJlYmFzZVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCAqIGFzIGFwcFNldHRpbmdzIGZyb20gXCJ0bnMtY29yZS1tb2R1bGVzL2FwcGxpY2F0aW9uLXNldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBhcHBsaWNhdGlvbiBmcm9tICdAbmF0aXZlc2NyaXB0L2NvcmUvYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgaXNBbmRyb2lkLCBpc0lPUywgZGV2aWNlLCBzY3JlZW4gfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy9wbGF0Zm9ybVwiO1xuaW1wb3J0IHsgTG9jYWxOb3RpZmljYXRpb25zIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1sb2NhbC1ub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlQXJyYXkgfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy9kYXRhL29ic2VydmFibGUtYXJyYXlcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvblNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBfYmVoYXZpb3JTdWJqZWN0T3BlcmF0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcm91dGVyRXh0ZW5zaW9uczogUm91dGVyRXh0ZW5zaW9ucywgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSApIHtcbiAgICAgICAgTG9jYWxOb3RpZmljYXRpb25zLmhhc1Blcm1pc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIGlmIChhcHBTZXR0aW5ncy5nZXRCb29sZWFuKFwic2V0dGluZ0FsZXJ0V2hpbGVNdXRlZFwiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRCb29sZWFuKFwic2V0dGluZ0FsZXJ0V2hpbGVNdXRlZFwiLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0TnVtYmVyKFwic2V0dGluZ0FsZXJ0RHVyYXRpb25JblNlY1wiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXROdW1iZXIoXCJzZXR0aW5nQWxlcnREdXJhdGlvbkluU2VjXCIsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGluaXRpYWwgTG9hZGluZ1xuICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3RPcGVyYXRpb25zLm5leHQodGhpcy5nZXRPcGVyYXRpb25zRnJvbUFwcFNldHRpbmdzKCkpO1xuXG4gICAgICAgIGlmIChpc0lPUyl7XG4gICAgICAgICAgICAvLyBFbnRyeXBvaW50IHdoZW4gbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgaU9TXG4gICAgICAgICAgICBmaXJlYmFzZS5hZGRPbk1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBtZXNzYWdlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2VUeXBlID0gbWVzc2FnZS5kYXRhW1wibWVzc2FnZVR5cGVcIl07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgbmV3IGFsYXJtIHJvdXRpbmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT0gXCJhbGFybVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nQWxhcm0obWVzc2FnZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKGlzQW5kcm9pZCl7XG4gICAgICAgICAgICAvLyBFbnRyeXBvaW50IHdoZW4gbm90aWZpY2F0aW9uIGlzIHRhcHBlZCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgTG9jYWxOb3RpZmljYXRpb25zLmFkZE9uTWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKG5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRpb25TdG9yZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uU3RvcmUgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tQXBwU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMubmV4dChvcGVyYXRpb25TdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBvcGVyYXRpb24gZGV0YWlscyB2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9PcGVyYXRpb25EZXRhaWxzKG5vdGlmaWNhdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pICBcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRW50cnlwb2ludCB3aGVuIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgd2l0aCBhcHAgaW4gZm9yZWdyb3VuZCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgZmlyZWJhc2UuYWRkT25NZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayhcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgbWVzc2FnZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlVHlwZSA9IG1lc3NhZ2UuZGF0YVtcIm1lc3NhZ2VUeXBlXCJdO1xuICAgICAgICAgICAgICAgICAgICAvL3ZhciBtZXNzYWdlUGF5bG9hZCA9IEpTT04ucGFyc2UobWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZm9yZWdyb3VuZCA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG5ldyBhbGFybSByb3V0aW5lXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT0gXCJhbGFybVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvblN0b3JlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblN0b3JlID0gdGhpcy5nZXRPcGVyYXRpb25zRnJvbUFwcFNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMubmV4dChvcGVyYXRpb25TdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb09wZXJhdGlvbkRldGFpbHMob3BlcmF0aW9uU3RvcmVbb3BlcmF0aW9uU3RvcmUubGVuZ3RoLTFdLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfSAgICBcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gICAgXG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhbGwgb3BlcmF0aW9ucyBhcyBvYnNlcnZhYmxlXG4gICAgZ2V0QWxsT3AoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBvcGVyYXRpb24gZm9yIHNwZWNpZmljIGlkXG4gICAgZ2V0T3BlcmF0aW9uQnlJZChpZDogbnVtYmVyKTogT3BlcmF0aW9uIHtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wZXJhdGlvbnNGcm9tQXBwU2V0dGluZ3MoKS5maWx0ZXIoKG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbi5pZCA9PT0gaWQ7XG4gICAgICAgIH0pWzBdO1xuICAgIH1cblxuICAgIC8vIENoZWNrcyBmb3IgYSBnaXZlbiB1dWlkIHZhbHVlIHdoZXRoZXIgaXQgYWxyZWFkeSBleGlzdHMgb3Igbm90XG4gICAgY2hlY2tJZk9wZXJhdGlvbkFscmVhZHlFeGlzdHModXVpZDogc3RyaW5nKTpib29sZWFuIHtcbiAgICAgICAgaWYgKCF1dWlkKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gdGhpcy5nZXRPcGVyYXRpb25zRnJvbUFwcFNldHRpbmdzKCkuZmlsdGVyKChvcGVyYXRpb24pID0+IHtcblxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi5fdXVpZCAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24uX3V1aWQudmFsdWUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbi5fdXVpZC52YWx1ZSA9PT0gdXVpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFycyBvcGVyYXRpb24gbGlzdFxuICAgIGNsZWFyT3BlcmF0aW9ucygpe1xuICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbGxPcGVyYXRpb25zXCIsIEpTT04uc3RyaW5naWZ5KFtdKSk7XG4gICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICAvLyBPcGVuIHNwZWNpZmljIG9wZXJhdGlvbiBmb3IgZGV0YWlscyB2aWV3XG4gICAgcmVkaXJlY3RUb09wZXJhdGlvbkRldGFpbHMoaWQ6bnVtYmVyKSB7XG4gICAgICAgIFxuICAgICAgICBpZih0aGlzLl9yb3V0ZXJFeHRlbnNpb25zICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXJFeHRlbnNpb25zLm5hdmlnYXRlKFtcIi9vcGVyYXRpb25zL29wZXJhdGlvbi1kZXRhaWxcIiwgaWRdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzbGlkZVwiLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZTogXCJlYXNlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSAgICAgXG4gICAgfVxuICAgIC8vIEhhbmRsZXMgaW5jb21pbmcgYWxhcm1cbiAgICBpbmNvbWluZ0FsYXJtKF9tZXNzYWdlUGF5bG9hZCl7XG4gICAgICAgIHZhciBvcGVyYXRpb24gPSBuZXcgT3BlcmF0aW9uKCk7XG5cbiAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKF9tZXNzYWdlUGF5bG9hZC5kYXRhW1wicGF5bG9hZFwiXSk7XG4gICAgICAgIHZhciBvcHRpb25zOkpTT04gPSA8SlNPTj57fTtcbiAgICAgICAgdmFyIGZlZWRiYWNrID0gX21lc3NhZ2VQYXlsb2FkLmRhdGFbXCJmZWVkYmFja1wiXTtcbiAgICAgICAgdmFyIHNlcnZlclVVSUQgPSBfbWVzc2FnZVBheWxvYWQuZGF0YVtcInNlcnZlclVVSURcIl07XG5cbiAgICAgICAgaWYgKGZlZWRiYWNrICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBvcHRpb25zWydfZmVlZGJhY2snXSA9IGZlZWRiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlcnZlclVVSUQgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIG9wdGlvbnNbJ19zZXJ2ZXJVVUlEJ10gPSBzZXJ2ZXJVVUlEO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcblxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICBvcGVyYXRpb24uZmlsbE9wZXJhdGlvbkZDTShwYXlsb2FkLm9wZXJhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbi5maWxsT3BlcmF0aW9uRkNNV2l0aE9wdGlvbnMocGF5bG9hZC5vcGVyYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgaWYgKG9wZXJhdGlvbi5fdXVpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciBvcEV4aXN0cyA9IHRoaXMuY2hlY2tJZk9wZXJhdGlvbkFscmVhZHlFeGlzdHMob3BlcmF0aW9uLl91dWlkLnZhbHVlKVxuICAgICAgICAgICAgaWYgKCFvcEV4aXN0cyl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJORVVFUiBFSU5TQVRaXCIpXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggb3BlcmF0aW9uIGxpc3QgXG4gICAgICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0T3BlcmF0aW9ucy5uZXh0KHRoaXMucGVyc2lzdE9wZXJhdGlvbihvcGVyYXRpb24pKTtcblxuICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIG9wZXJhdGlvbiBkZXRhaWxzIHZpZXdcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9PcGVyYXRpb25EZXRhaWxzKG9wZXJhdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFSU5TQVRaIEVYSVNUSUVSVCBCRVJFSVRTXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMRUdBQ1kgU1VQUE9SVFwiKTtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggb3BlcmF0aW9uIGxpc3QgXG4gICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3RPcGVyYXRpb25zLm5leHQodGhpcy5wZXJzaXN0T3BlcmF0aW9uKG9wZXJhdGlvbikpO1xuXG4gICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBvcGVyYXRpb24gZGV0YWlscyB2aWV3XG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9PcGVyYXRpb25EZXRhaWxzKG9wZXJhdGlvbi5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwZXJzaXN0T3BlcmF0aW9uKG9wZXJhdGlvbik6T3BlcmF0aW9uW117XG4gICAgICAgIHZhciBvcGVyYXRpb25TdG9yZSA9IFtdO1xuICAgICAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25TdG9yZSA9IEpTT04ucGFyc2UoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcGVyYXRpb25TdG9yZS5wdXNoKG9wZXJhdGlvbik7XG4gICAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcImFsbE9wZXJhdGlvbnNcIixKU09OLnN0cmluZ2lmeShvcGVyYXRpb25TdG9yZSkpO1xuICAgICAgICByZXR1cm4gb3BlcmF0aW9uU3RvcmU7XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0aW9uc0Zyb21BcHBTZXR0aW5ncygpOk9wZXJhdGlvbltde1xuICAgICAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbGxPcGVyYXRpb25zXCIsIEpTT04uc3RyaW5naWZ5KFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSk7XG4gICAgfVxuXG4gICAgZGVsZXRlT3BlcmF0aW9uRm9yVVVJRCh1dWlkOnN0cmluZyk6Ym9vbGVhbntcbiAgICAgICAgY29uc29sZS5sb2coXCJERUxFVElORyBPUCB3aXRoIHV1aWQ6IFwiK3V1aWQpO1xuICAgICAgICB2YXIgcmVzdWx0RmxhZyA9IGZhbHNlO1xuICAgICAgICB2YXIgb3BlcmF0aW9uU3RvcmUgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tQXBwU2V0dGluZ3MoKS5maWx0ZXIoKG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi5fdXVpZCA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgZmxhZyA9IG9wZXJhdGlvbi5fdXVpZC52YWx1ZSAhPT0gdXVpZDtcbiAgICAgICAgICAgIGlmKCFmbGFnKSB7XG4gICAgICAgICAgICAvLyAgICBjb25zb2xlLmxvZyhcIlVVSUQgRk9VTkRcIik7XG4gICAgICAgICAgICAgICAgcmVzdWx0RmxhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRGVsZXRlIGZlZWRiYWNrIGFzIHdlbGxcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tTdG9yZTpKU09OID0gSlNPTi5wYXJzZShhcHBTZXR0aW5ncy5nZXRTdHJpbmcoXCJvcGVyYXRpb25GZWVkYmFja1N0b3JlXCIsIEpTT04uc3RyaW5naWZ5KDxKU09OPnt9KSkpO1xuXG4gICAgICAgICAgICAgICAgZGVsZXRlIGZlZWRiYWNrU3RvcmVbdXVpZF07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0U3RyaW5nKFwib3BlcmF0aW9uRmVlZGJhY2tTdG9yZVwiLCBKU09OLnN0cmluZ2lmeShmZWVkYmFja1N0b3JlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmxhZztcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAocmVzdWx0RmxhZykge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblN0b3JlLmxlbmd0aCAhPSAwKXtcbiAgICAgICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbGxPcGVyYXRpb25zXCIsSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uU3RvcmUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3RPcGVyYXRpb25zLm5leHQob3BlcmF0aW9uU3RvcmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhck9wZXJhdGlvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0RmxhZztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBIdHRwcyBmcm9tICduYXRpdmVzY3JpcHQtaHR0cHMnXG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9saWJhcnkvaGVscGVyJztcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWZlZWRiYWNrJztcbmltcG9ydCAqIGFzIGFwcFNldHRpbmdzIGZyb20gXCJ0bnMtY29yZS1tb2R1bGVzL2FwcGxpY2F0aW9uLXNldHRpbmdzXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZlZWRiYWNrU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfaGVscGVyOkhlbHBlcjtcbiAgcHJpdmF0ZSBfZmVlZGJhY2s6RmVlZGJhY2s7XG4gIHByaXZhdGUgX29wZXJhdGlvbkZlZWRiYWNrOkpTT047XG5cbiAgY29uc3RydWN0b3IoKSB7IFxuXG4gICAgdGhpcy5faGVscGVyID0gbmV3IEhlbHBlcigpO1xuICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IEZlZWRiYWNrKCk7XG5cbiAgICB0aGlzLl9vcGVyYXRpb25GZWVkYmFjayA9IHRoaXMuZ2V0RmVlZGJhY2tTdG9yZSgpO1xuXG4gIH1cblxuXG5cbi8qKlxuICAgKiBTZXQgZmVlYmFjayBmb3Igc3BlY2lmaWMgb3BlcmF0aW9uIG1ldGhvZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VydmVyYWRyZXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvblVVSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VkYXRhVVVJRFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdGVcbiAgICovXG4gIHB1YmxpYyBzZXRGZWVkYmFjayhzZXJ2ZXJhZHJlc3M6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmRoYXNoOiBzdHJpbmcsIG9wZXJhdGlvblVVSUQ6IHN0cmluZywgYmFzZWRhdGFVVUlEOiBzdHJpbmcsIHN0YXRlOiBudW1iZXIpe1xuICAgIHZhciB1cmwgPSBzZXJ2ZXJhZHJlc3MrXCIvZmVlZGJhY2svc2V0P1wiXG4gICAgKyBcInVzZXJuYW1lPVwiICsgZW5jb2RlVVJJKHVzZXJuYW1lKVxuICAgICsgXCImcGFzc3dvcmRoYXNoPVwiICsgZW5jb2RlVVJJKHBhc3N3b3JkaGFzaClcbiAgICArIFwiJm9wZXJhdGlvblVVSUQ9XCIgKyBlbmNvZGVVUkkob3BlcmF0aW9uVVVJRClcbiAgICArIFwiJmJhc2VkYXRhVVVJRD1cIiArIGVuY29kZVVSSShiYXNlZGF0YVVVSUQpXG4gICAgKyBcIiZzdGF0ZT1cIiArIHN0YXRlO1xuICAgIGNvbnNvbGUubG9nKHVybCk7XG5cbiAgICByZXR1cm4gSHR0cHMucmVxdWVzdCh7XG4gICAgICB1cmw6IHNlcnZlcmFkcmVzcytcIi9mZWVkYmFjay9zZXQ/XCJcbiAgICAgICAgKyBcInVzZXJuYW1lPVwiICsgZW5jb2RlVVJJKHVzZXJuYW1lKVxuICAgICAgICArIFwiJnBhc3N3b3JkaGFzaD1cIiArIGVuY29kZVVSSShwYXNzd29yZGhhc2gpXG4gICAgICAgICsgXCImb3BlcmF0aW9uVVVJRD1cIiArIGVuY29kZVVSSShvcGVyYXRpb25VVUlEKVxuICAgICAgICArIFwiJmJhc2VkYXRhVVVJRD1cIiArIGVuY29kZVVSSShiYXNlZGF0YVVVSUQpXG4gICAgICAgICsgXCImc3RhdGU9XCIgKyBzdGF0ZSxcbiAgICAgIG1ldGhvZDogXCJHRVRcIlxuICAgIH0pLnRoZW4oKHJlc3BvbnNlOiBIdHRwcy5IdHRwc1Jlc3BvbnNlKSA9PiB7XG4gICAgICBcbiAgICAgICAgLy8gQXJndW1lbnQgKHJlc3BvbnNlKSBpcyBIdHRwUmVzcG9uc2VcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICB2YXIgcmVzcG9uc2VDb250ZW50ID0gdGhpcy5faGVscGVyLnByZXBhcmVSZXNwb25zZShyZXNwb25zZVsnY29udGVudCddKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlQ29udGVudFsnc3VjY2VzcyddID09IDEpe1xuICAgICAgICAgIGlmIChzdGF0ZSA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9mZWVkYmFjay5zdWNjZXNzKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJmb2xncmVpY2hcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogXCJSw7xja21lbGR1bmcgJ0tvbW1lJyBnZXNlbmRldFwiXG4gICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZSA9PSAyKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrLnN1Y2Nlc3Moe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVyZm9sZ3JlaWNoXCIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogXCJSw7xja21lbGR1bmcgJ0tvbW1lIG5pY2h0JyBnZXNlbmRldFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhyb3cgXCJFUlJPUjogXCIrIHJlc3BvbnNlQ29udGVudFsnZGVzY3JpcHRpb24nXTtcbiAgICAgICAgfVxuICAgIH0sIChlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrLmVycm9yKHtcbiAgICAgICAgdGl0bGU6IFwiRmVobGVyXCIsXG4gICAgICAgIG1lc3NhZ2U6IGUudG9TdHJpbmcoKVxuICAgIH0pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZlZWRiYWNrU3RvcmUoKTpKU09OIHtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwib3BlcmF0aW9uRmVlZGJhY2tTdG9yZVwiKSA9PT0gdW5kZWZpbmVkKSB7ICAgICAgXG4gICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJvcGVyYXRpb25GZWVkYmFja1N0b3JlXCIsIEpTT04uc3RyaW5naWZ5KDxKU09OPnt9KSk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKGFwcFNldHRpbmdzLmdldFN0cmluZyhcIm9wZXJhdGlvbkZlZWRiYWNrU3RvcmVcIikpO1xuICB9XG5cbiAgY3JlYXRlRmVlZGJhY2tPYmplY3RGb3JPcGVyYXRpb24odGltZVN0YW1wOiBEYXRlLCBzdGF0ZTogbnVtYmVyKTpKU09OIHtcbiAgICB2YXIgZmVlZGJhY2sgPSA8SlNPTj57fTtcbiAgICBmZWVkYmFja1sndGltZVN0YW1wJ10gPSB0aW1lU3RhbXA7XG4gICAgZmVlZGJhY2tbJ3N0YXRlJ10gPSBzdGF0ZTtcbiAgICByZXR1cm4gZmVlZGJhY2s7XG4gIH1cblxuICBnZXRGZWVkYmFja0Zvck9wZXJhdGlvblVVSUQob3BlcmF0aW9uVVVJRDogc3RyaW5nKTpKU09OIHtcbiAgICB2YXIgZmVlZGJhY2tTdG9yZTpKU09OID0gdGhpcy5nZXRGZWVkYmFja1N0b3JlKCk7XG5cbiAgICByZXR1cm4gZmVlZGJhY2tTdG9yZVtvcGVyYXRpb25VVUlEXSAhPSB1bmRlZmluZWQgPyBmZWVkYmFja1N0b3JlW29wZXJhdGlvblVVSURdIDogbnVsbDtcbiAgfVxuXG4gIHBlcnNpc3RGZWVkYmFjayhvcGVyYXRpb25VVUlEOiBzdHJpbmcsIHRpbWVTdGFtcDogRGF0ZSwgc3RhdGU6IG51bWJlcil7XG4gICAgdmFyIGZlZWRiYWNrU3RvcmU6SlNPTiA9IHRoaXMuZ2V0RmVlZGJhY2tTdG9yZSgpO1xuXG4gICAgZmVlZGJhY2tTdG9yZVtvcGVyYXRpb25VVUlEXSA9IHRoaXMuY3JlYXRlRmVlZGJhY2tPYmplY3RGb3JPcGVyYXRpb24odGltZVN0YW1wLCBzdGF0ZSk7XG5cbiAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJvcGVyYXRpb25GZWVkYmFja1N0b3JlXCIsIEpTT04uc3RyaW5naWZ5KGZlZWRiYWNrU3RvcmUpKTtcbiAgfVxuXG4gIGRlbGV0ZUZlZWRiYWNrRnJvbVN0b3JlKG9wZXJhdGlvblVVSUQ6IHN0cmluZykge1xuICAgIHZhciBmZWVkYmFja1N0b3JlOkpTT04gPSB0aGlzLmdldEZlZWRiYWNrU3RvcmUoKTtcblxuICAgIGRlbGV0ZSBmZWVkYmFja1N0b3JlW29wZXJhdGlvblVVSURdO1xuICAgIFxuICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcIm9wZXJhdGlvbkZlZWRiYWNrU3RvcmVcIiwgSlNPTi5zdHJpbmdpZnkoZmVlZGJhY2tTdG9yZSkpO1xuICB9XG5cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gXCI8U3RhY2tMYXlvdXQ+XFxuICAgIFxcbiAgICA8TGFiZWwgY2xhc3M9XFxcInNldHRpbmdzSGVhZGVyTGFiZWwgcC0xMFxcXCIgdGV4dD1cXFwiVG9uZWluc3RlbGx1bmdlblxcXCIgdGV4dEFsaWdubWVudD1cXFwiY2VudGVyXFxcIj48L0xhYmVsPlxcbiAgICA8U3RhY2tMYXlvdXQgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuXFxuICAgIDxHcmlkTGF5b3V0ICpuZ0lmPVxcXCJpc0FuZHJvaWRcXFwiIGNvbHVtbnM9XFxcIiosIGF1dG9cXFwiIHJvd3M9XFxcIipcXFwiIGNsYXNzPVxcXCJwLTEwXFxcIj5cXG4gICAgICAgIDxMYWJlbCAgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkxhdXRsb3MgYmVpIEFsYXJtIGF1ZmhlYmVuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgIDxTd2l0Y2ggcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFtjaGVja2VkXT1cXFwiYWxlcnRXaGlsZU11dGVkXFxcIiAoY2hlY2tlZENoYW5nZSk9XFxcIm9uQ2hlY2tlZEFsZXJ0V2hpbGVNdXRlZENoYW5nZSgkZXZlbnQpXFxcIj48L1N3aXRjaD5cXG4gICAgPC9HcmlkTGF5b3V0PlxcbiAgICA8R3JpZExheW91dCAqbmdJZj1cXFwiaXNBbmRyb2lkXFxcIiBjb2x1bW5zPVxcXCIqLCBhdXRvXFxcIiByb3dzPVxcXCJhdXRvLGF1dG8sYXV0b1xcXCIgY2xhc3M9XFxcInAtMTBcXFwiPlxcbiAgICAgICAgPExhYmVsIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJBbGFybWllcnVuZ3NkYXVlclxcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiYWxlcnREdXJhdGlvbkluU2VjICsgJyBzJ1xcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8U2xpZGVyIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuPVxcXCIyXFxcIiBbdmFsdWVdPVxcXCJhbGVydER1cmF0aW9uSW5TZWNcXFwiIG1pblZhbHVlPVxcXCIxXFxcIiBtYXhWYWx1ZT1cXFwiMTBcXFwiICh2YWx1ZUNoYW5nZSk9XFxcIm9uU2xpZGVyVmFsdWVDaGFuZ2UoJGV2ZW50KVxcXCI+PC9TbGlkZXI+XFxuICAgIDwvR3JpZExheW91dD5cXG4gICAgPEdyaWRMYXlvdXQgKm5nSWY9XFxcImlzQW5kcm9pZFxcXCIgY29sdW1ucz1cXFwiKiwgKlxcXCIgcm93cz1cXFwiKiwqXFxcIiBjbGFzcz1cXFwicC0xMFxcXCI+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkFsYXJtaWVydW5nc3RvblxcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiYW5kcm9pZFJpbmd0b25lVGl0bGVcXFwiIGNsYXNzPVxcXCJzZXR0aW5nc0xhYmVsXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCIgdGV4dEFsaWdubWVudD1cXFwicmlnaHRcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8QnV0dG9uIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuPVxcXCIyXFxcIiAodGFwKT1cXFwib25UYXBPcGVuUmluZ1RvbmUoJGV2ZW50KVxcXCIgY2xhc3M9XFxcInNldHRpbmdzQnV0dG9uXFxcIiB0ZXh0PVxcXCJBbGFybWllcnVuZ3N0b24gw6RuZGVyblxcXCI+PC9CdXR0b24+XFxuICAgIDwvR3JpZExheW91dD5cXG4gICAgXFxuICAgIDxMYWJlbCAqbmdJZj1cXFwiaXNJT1NcXFwiIHRleHQ9XFxcIkxhdXRsb3MgZHVyY2hicmVjaGVuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLTEwXFxcIj48L0xhYmVsPlxcbiAgICA8U3dpdGNoICpuZ0lmPVxcXCJpc0lPU1xcXCIgW2NoZWNrZWRdPVxcXCJjcml0aWNhbEFsZXJ0XFxcIiAoY2hlY2tlZENoYW5nZSk9XFxcIm9uQ2hlY2tlZENyaXRpY2FsQWxlcnRDaGFuZ2UoJGV2ZW50KVxcXCIgY2xhc3M9XFxcInNldHRpbmdzU3dpdGNoIG0tci0xMFxcXCI+PC9Td2l0Y2g+XFxuICAgIFxcbiAgICA8U3RhY2tMYXlvdXQgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuICAgIFxcbiAgICA8R3JpZExheW91dCAqbmdJZj1cXFwiaXNJT1NcXFwiIGNvbHVtbnM9XFxcImF1dG8sICpcXFwiIHJvd3M9XFxcIipcXFwiIGNsYXNzPVxcXCJwLTEwXFxcIj5cXG4gICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiQWxhcm1pZXJ1bmdzdG9uXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLXItMTBcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8IS0tPEJ1dHRvbiByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgKHRhcCk9XFxcIm9uVGFwT3BlblJpbmdUb25lSU9TKCRldmVudClcXFwiIGNsYXNzPVxcXCJzZXR0aW5nc0J1dHRvblxcXCIgdGV4dD1cXFwiQWxhcm1pZXJ1bmdzdG9uIMOkbmRlcm5cXFwiPjwvQnV0dG9uPi0tPlxcbiAgICAgICAgPCEtLTxMaXN0UGlja2VyIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIxXFxcIiBbaXRlbXNdPVxcXCJfaU9TUmluZ3RvbmVzXFxcIiBbc2VsZWN0ZWRJbmRleF09XFxcImlPU1NlbGVjdGVkUmluZ3RvbmVcXFwiIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cXFwib25TZWxlY3RlZFJpbmdUb25lSU9TQ2hhbmdlZCgkZXZlbnQpXFxcIj48L0xpc3RQaWNrZXI+IC0tPlxcbiAgICAgICAgPEJ1dHRvbiByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgKHRhcCk9XFxcIm9uVGFwT3BlbklPU1JpbmdldG9uZU1hbmFnZXIoJGV2ZW50KVxcXCIgY2xhc3M9XFxcInNldHRpbmdzQnV0dG9uXFxcIiB0ZXh0PVxcXCJBbGFybWllcnVuZ3N0b24gw6RuZGVyblxcXCI+PC9CdXR0b24+XFxuICAgIDwvR3JpZExheW91dD5cXG5cXG4gICAgPFN0YWNrTGF5b3V0ICpuZ0lmPVxcXCJpc0lPU1xcXCIgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuXFxuICAgIDxHcmlkTGF5b3V0IGNvbHVtbnM9XFxcIiosIGF1dG9cXFwiIHJvd3M9XFxcImF1dG8sYXV0byxhdXRvXFxcIiBjbGFzcz1cXFwicC0xMFxcXCI+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkxhdXRzdMOkcmtlXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCI+PC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJhbGVydFZvbHVtZSAqIDEwICsgJyAlJ1xcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8U2xpZGVyIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuPVxcXCIyXFxcIiBbdmFsdWVdPVxcXCJhbGVydFZvbHVtZVxcXCIgbWluVmFsdWU9XFxcIjBcXFwiIG1heFZhbHVlPVxcXCIxMFxcXCIgKHZhbHVlQ2hhbmdlKT1cXFwib25Wb2x1bWVTbGlkZXJWYWx1ZUNoYW5nZSgkZXZlbnQpXFxcIj48L1NsaWRlcj5cXG4gICAgPC9HcmlkTGF5b3V0PlxcbiAgICA8QnV0dG9uICpuZ0lmPVxcXCJpc0lPU1xcXCIgdGV4dD1cXFwiVG9uIHRlc3RlblxcXCIgY2xhc3M9XFxcInNldHRpbmdzQnV0dG9uXFxcIiAodGFwKT1cXFwib25UYXBUZXN0QXVkaW8oJGV2ZW50KVxcXCI+PC9CdXR0b24+XFxuXFxuICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgPEdyaWRMYXlvdXQgKm5nSWY9XFxcImlzQW5kcm9pZFxcXCIgY29sdW1ucz1cXFwiKiwgYXV0b1xcXCIgcm93cz1cXFwiKiwqXFxcIiBjbGFzcz1cXFwicC0xMFxcXCI+XFxuICAgICAgICA8TGFiZWwgIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuID0gXFxcIjJcXFwiIHRleHQ9XFxcIkhpbndlaXM6IERpZXNlIEZ1bmt0aW9uIGlzdCBudXIgdmVyZsO8Z2JhciwgZmFsbHMgJ0xhdXRsb3MgYmVpIEFsYXJtIGF1ZmhlYmVuJyBha3RpdiBpc3QuIERpZSBOYWNocmljaHQgd2lyZCBuYWNoIGRlbSBUb24gaW4gZGVyIE1lZGllbmxhdXRzdMOkcmtlIHZvcmdlbGVzZW4hXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJBbGFybXN0aWNod29ydCB2b3JsZXNlblxcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8U3dpdGNoIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbY2hlY2tlZF09XFxcImFsYXJtVGV4dFRvU3BlZWNoXFxcIiAoY2hlY2tlZENoYW5nZSk9XFxcIm9uQ2hlY2tlZEFsYXJtVGV4dFRvU3BlZWNoQ2hhbmdlKCRldmVudClcXFwiPjwvU3dpdGNoPlxcbiAgICA8L0dyaWRMYXlvdXQ+XFxuXFxuICAgIDxMYWJlbCAqbmdJZj1cXFwiaXNJT1NcXFwiIHRleHQ9XFxcIkhpbndlaXM6IERpZXNlIEZ1bmt0aW9uIGlzdCBudXIgdmVyZsO8Z2JhciwgZmFsbHMgJ0xhdXRsb3MgZHVyY2hicmVjaGVuJyBha3RpdiBpc3QuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgIDxMYWJlbCAqbmdJZj1cXFwiaXNJT1NcXFwiIHRleHQ9XFxcIkFsYXJtc3RpY2h3b3J0IHZvcmxlc2VuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLTEwXFxcIj48L0xhYmVsPlxcbiAgICA8U3dpdGNoICpuZ0lmPVxcXCJpc0lPU1xcXCIgW2NoZWNrZWRdPVxcXCJhbGFybVRleHRUb1NwZWVjaFxcXCIgKGNoZWNrZWRDaGFuZ2UpPVxcXCJvbkNoZWNrZWRBbGFybVRleHRUb1NwZWVjaENoYW5nZSgkZXZlbnQpXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NTd2l0Y2ggbS1yLTEwXFxcIj48L1N3aXRjaD5cXG4gICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcblxcbiAgICA8TGFiZWwgY2xhc3M9XFxcInAtMTAgc2V0dGluZ3NIZWFkZXJMYWJlbFxcXCIgdGV4dD1cXFwiR2Vyw6R0ZWluZm9ybWF0aW9uXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgIDxHcmlkTGF5b3V0IGNsYXNzPVxcXCJwLTEwIGRldmljZVNldHRpbmdzXFxcIiBjb2x1bW5zPVxcXCIqLCBhdXRvXFxcIiByb3dzPVxcXCJhdXRvLCBhdXRvLCBhdXRvLCBhdXRvLCBhdXRvLCAqLCBhdXRvXFxcIj4gXFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkhlcnN0ZWxsZXJcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiZGV2aWNlTWFudWZhY3R1cmVyXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJyaWdodFxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiTW9kZWxsXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImRldmljZU1vZGVsXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJyaWdodFxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiUGxhdHRmb3JtXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiMlxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImRldmljZU9TXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJyaWdodFxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiUGxhdHRmb3JtdmVyc2lvblxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJkZXZpY2VPU1ZlcnNpb25cXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNFxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJHZXLDpHRla2xhc3NlXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNFxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImRldmljZVR5cGVcXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNVxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJHZXLDpHRlLVVVSURcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCI1XFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiZGV2aWNlVXVpZFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNlxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJHZXLDpHRlLU5hbWVcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCI2XFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiZGV2aWNlTmFtZVxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICA8L0dyaWRMYXlvdXQ+XFxuXFxuICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG5cXG4gICAgPExhYmVsIGNsYXNzPVxcXCJwLTEwIHNldHRpbmdzSGVhZGVyTGFiZWxcXFwiIHRleHQ9XFxcIlNvbnN0aWdlIEZ1bmt0aW9uZW5cXFwiIHRleHRBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgPEJ1dHRvbiB0ZXh0PVxcXCJFaW5zYXR6bGlzdGUgbGVlcmVuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NCdXR0b25cXFwiICh0YXApPVxcXCJvblRhcFRvQ2xlYXJPcHMoJGV2ZW50KVxcXCI+PC9CdXR0b24+XFxuXFxuICAgIDxMYWJlbCBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLTEwXFxcIiB0ZXh0PVxcXCJUb2tlbiBkaWVzZXMgR2Vyw6R0ZXM6XFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgIDxUZXh0VmlldyBbdGV4dF09ZmNtX3Rva2VuIGVkaXRhYmxlPVxcXCJmYWxzZVxcXCI+PC9UZXh0Vmlldz5cXG4gICAgPEJ1dHRvbiAodGFwKT1cXFwib25UYXBUb1NoYXJlRkNNS2V5KCRldmVudClcXFwiIGNsYXNzPVxcXCJzZXR0aW5nc0J1dHRvblxcXCIgdGV4dD1cXFwiVG9rZW4gdmVyc2VuZGVuXFxcIj48L0J1dHRvbj5cXG5cXG4gICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICA8TGFiZWwgY2xhc3M9XFxcInAtMTAgc2V0dGluZ3NIZWFkZXJMYWJlbFxcXCIgdGV4dD1cXFwiQXBwIEluZm9zXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgIDxHcmlkTGF5b3V0IGNsYXNzPVxcXCJwLTEwIGFwcFNldHRpbmdzXFxcIiBjb2x1bW5zPVxcXCIqLCBhdXRvXFxcIiByb3dzPVxcXCIqLCpcXFwiPiBcXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiQXBwIE5hbWVcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiYXBwTmFtZVxcXCIgdGV4dEFsaWdubWVudD1cXFwicmlnaHRcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIxXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkFwcCBWZXJzaW9uXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImFwcFZlcnNpb25cXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICA8L0dyaWRMYXlvdXQ+XFxuPC9TdGFja0xheW91dD5cIiIsIm1vZHVsZS5leHBvcnRzID0gXCIvKiBBZGQgbW9iaWxlIHN0eWxlcyBmb3IgdGhlIGNvbXBvbmVudCBoZXJlLiAgKi9cXG4uc2V0dGluZ3NIZWFkZXJMYWJlbCB7XFxuICBmb250LXNpemU6IDE4OyB9XFxuXFxuLnNldHRpbmdzTGFiZWwge1xcbiAgZm9udC1zaXplOiAxNTsgfVxcblxcbi5zZXR0aW5nc0J1dHRvbiB7XFxuICBhbmRyb2lkLWVsZXZhdGlvbjogNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjNkMDA7XFxuICBib3JkZXItY29sb3I6ICNjMzAwMDA7XFxuICBib3JkZXItcmFkaXVzOiA0O1xcbiAgYm9yZGVyLXdpZHRoOiAxO1xcbiAgY29sb3I6IHdoaXRlc21va2U7XFxuICBmb250LXNpemU6IDE1O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4uc2V0dGluZ3NCdXR0b246YWN0aXZlIHtcXG4gIGFuZHJvaWQtZWxldmF0aW9uOiA4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MzMDAwMDtcXG4gIGJvcmRlci1jb2xvcjogI2ZmM2QwMDtcXG4gIGJvcmRlci1yYWRpdXM6IDQ7XFxuICBib3JkZXItd2lkdGg6IDE7XFxuICBjb2xvcjogd2hpdGVzbW9rZTtcXG4gIGZvbnQtc2l6ZTogMTU7XFxuICBmb250LXdlaWdodDogYm9sZDsgfVxcblxcbi5jYW5jZWxCdXR0b24ge1xcbiAgYW5kcm9pZC1lbGV2YXRpb246IDQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzljOWM5O1xcbiAgYm9yZGVyLWNvbG9yOiAjMDAwMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogNDtcXG4gIGJvcmRlci13aWR0aDogMTtcXG4gIGNvbG9yOiB3aGl0ZXNtb2tlO1xcbiAgZm9udC1zaXplOiAxNTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XFxuXFxuLmNhbmNlbEJ1dHRvbjphY3RpdmUge1xcbiAgYW5kcm9pZC1lbGV2YXRpb246IDg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO1xcbiAgYm9yZGVyLWNvbG9yOiAjYzljOWM5O1xcbiAgYm9yZGVyLXJhZGl1czogNDtcXG4gIGJvcmRlci13aWR0aDogMTtcXG4gIGNvbG9yOiB3aGl0ZXNtb2tlO1xcbiAgZm9udC1zaXplOiAxNTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XFxuXCIiLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgTmdab25lLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGZpcmViYXNlIGZyb21cIm5hdGl2ZXNjcmlwdC1wbHVnaW4tZmlyZWJhc2VcIjtcbmltcG9ydCAqIGFzIFNvY2lhbFNoYXJlIGZyb20gXCJuYXRpdmVzY3JpcHQtc29jaWFsLXNoYXJlXCI7XG5pbXBvcnQgKiBhcyBhcHBTZXR0aW5ncyBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy9hcHBsaWNhdGlvbi1zZXR0aW5nc1wiO1xuaW1wb3J0ICogYXMgYXBwbGljYXRpb24gZnJvbSBcInRucy1jb3JlLW1vZHVsZXMvYXBwbGljYXRpb25cIjtcbmltcG9ydCB7IGlzQW5kcm9pZCwgaXNJT1MsIGRldmljZSwgc2NyZWVuIH0gZnJvbSBcInRucy1jb3JlLW1vZHVsZXMvcGxhdGZvcm1cIjtcbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi8uLi9vcGVyYXRpb25zL3NoYXJlZC9vcGVyYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgTGlzdFZpZXdFdmVudERhdGEsIFJhZExpc3RWaWV3fSBmcm9tIFwibmF0aXZlc2NyaXB0LXVpLWxpc3R2aWV3XCI7XG5pbXBvcnQgeyBEZXZpY2VJbmZvIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWRuYS1kZXZpY2VpbmZvJztcbmltcG9ydCB7IGFjdGlvbiwgQWN0aW9uT3B0aW9ucyB9IGZyb20gXCJ0bnMtY29yZS1tb2R1bGVzL3VpL2RpYWxvZ3NcIjtcbmltcG9ydCB7IExpc3RQaWNrZXIgfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy91aS9saXN0LXBpY2tlclwiO1xuaW1wb3J0IHsgRXZlbnREYXRhIH0gZnJvbSAndG5zLWNvcmUtbW9kdWxlcy91aS9wYWdlJztcbi8vIEF1ZGlvIHBsYXllciBmb3IgdGVzdGluZyBzb3VuZCBzZXR0aW5nc1xuaW1wb3J0IHsgVE5TUGxheWVyIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWF1ZGlvLXBsYXllcic7XG5pbXBvcnQgeyBNb2RhbERpYWxvZ09wdGlvbnMsIE1vZGFsRGlhbG9nU2VydmljZSB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9tb2RhbC1kaWFsb2dcIjtcbmltcG9ydCB7IE1vZGFsUmluZ3RvbmVDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLXJpbmd0b25lL21vZGFsLXJpbmd0b25lLmNvbXBvbmVudCdcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25zLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2V0dGluZ3MuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIFxuICBwcml2YXRlIF9hbGVydER1cmF0aW9uSW5TZWM6bnVtYmVyO1xuICBwcml2YXRlIF9hbGVydFZvbHVtZTpudW1iZXI7XG4gIHByaXZhdGUgX2FuZHJvaWRSaW5ndG9uZVVSSTpzdHJpbmc7XG4gIHByaXZhdGUgX2FuZHJvaWRSaW5ndG9uZVRpdGxlOnN0cmluZztcbiAgcHJpdmF0ZSBfZmNtdG9rZW46c3RyaW5nO1xuICBwcml2YXRlIF9hbGVydFdoaWxlTXV0ZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NyaXRpY2FsQWxlcnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FsYXJtVGV4dFRvU3BlZWNoOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2lPU1Jpbmd0b25lczogQXJyYXk8c3RyaW5nPiA9IFtcImRlZmF1bHRcIiwgXCJiYmFhYmJhYS53YXZcIl07XG4gIHByaXZhdGUgX2lPU1NlbGVjdGVkUmluZ3RvbmU6IG51bWJlcjtcblxuICBwcml2YXRlIF9wbGF5ZXI6IFROU1BsYXllcjtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX29wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIF92Y1JlZjogVmlld0NvbnRhaW5lclJlZixcblxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5fYWxlcnRXaGlsZU11dGVkID0gdGhpcy5nZXRBbGVydFdoaWxlTXV0ZWQoKTtcbiAgICB0aGlzLl9jcml0aWNhbEFsZXJ0ID0gdGhpcy5nZXRDcml0aWNhbEFsZXJ0KCk7XG4gICAgdGhpcy5faU9TU2VsZWN0ZWRSaW5ndG9uZSA9IHRoaXMuZ2V0aU9TU2VsZWN0ZWRSaW5ndG9uZUluZGV4KCk7XG5cbiAgICB0aGlzLl9hbGVydER1cmF0aW9uSW5TZWMgPSB0aGlzLmdldEFsZXJ0RHVyYXRpb25JblNlYygpO1xuICAgIHRoaXMuX2FsZXJ0Vm9sdW1lID0gdGhpcy5nZXRBbGVydFZvbHVtZSgpO1xuICAgIFxuICAgIHRoaXMuX2FuZHJvaWRSaW5ndG9uZVVSSSA9IHRoaXMuZ2V0QW5kcm9pZFJpbmd0b25lVVJJKCk7XG5cbiAgICB0aGlzLl9hbGFybVRleHRUb1NwZWVjaCA9IHRoaXMuZ2V0QWxhcm1UZXh0VG9TcGVlY2goKTtcblxuICAgIC8vIEdldCBGQ00gVG9rZW5cbiAgICBmaXJlYmFzZS5nZXRDdXJyZW50UHVzaFRva2VuKCkudGhlbigodG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgLy8gbWF5IGJlIG51bGwgaWYgbm90IGtub3duIHlldFxuICAgICAgY29uc29sZS5sb2coYEN1cnJlbnQgcHVzaCB0b2tlbjogJHt0b2tlbn1gKTtcbiAgICAgIHRoaXMuX2ZjbXRva2VuID0gdG9rZW47XG4gICAgfSk7XG5cbiAgICBpZiAoaXNBbmRyb2lkKXtcbiAgICAgIGFwcGxpY2F0aW9uLmFuZHJvaWQub24oYXBwbGljYXRpb24uQW5kcm9pZEFwcGxpY2F0aW9uLmFjdGl2aXR5UmVzdWx0RXZlbnQsIGZ1bmN0aW9uIChhcmdzOiBhcHBsaWNhdGlvbi5BbmRyb2lkQWN0aXZpdHlSZXN1bHRFdmVudERhdGEpIHtcbiAgICAgICAgaWYgKGFyZ3MucmVxdWVzdENvZGUgPT0gMTExKXtcbiAgICAgICAgICAvLyBSaW5ndG9uZVBpY2tlclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRXZlbnQ6IFwiICsgYXJncy5ldmVudE5hbWUgKyBcIiwgQWN0aXZpdHk6IFwiICsgYXJncy5hY3Rpdml0eSArIFwiLCByZXF1ZXN0Q29kZTogXCIgKyBhcmdzLnJlcXVlc3RDb2RlICsgXCIsIHJlc3VsdENvZGU6IFwiICsgYXJncy5yZXN1bHRDb2RlICsgXCIsIEludGVudDogXCIgKyBhcmdzLmludGVudCk7XG4gICAgICAgICAgdmFyIGludGVudFJlc3VsdDogYW5kcm9pZC5jb250ZW50LkludGVudCA9IGFyZ3MuaW50ZW50O1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChpbnRlbnRSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHJpbmd0b25lX1VSSSA9IGludGVudFJlc3VsdC5nZXRQYXJjZWxhYmxlRXh0cmEoYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuRVhUUkFfUklOR1RPTkVfUElDS0VEX1VSSSk7XG4gICAgICAgICAgICBpZiAocmluZ3RvbmVfVVJJICE9IG51bGwpe1xuICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbmRyb2lkUmluZ1RvbmVcIixyaW5ndG9uZV9VUkkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmRyb2lkUmluZ3RvbmVVUkkoKTtcbiAgICAgICAgICAgICAgfSkgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmY21fdG9rZW4oKTpzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mY210b2tlbjtcbiAgfVxuICBnZXQgYWxlcnRXaGlsZU11dGVkKCk6Ym9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsZXJ0V2hpbGVNdXRlZDtcbiAgfVxuXG4gIGdldCBjcml0aWNhbEFsZXJ0KCk6Ym9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NyaXRpY2FsQWxlcnQ7XG4gIH1cblxuICBnZXQgYWxlcnREdXJhdGlvbkluU2VjKCk6bnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWxlcnREdXJhdGlvbkluU2VjO1xuICB9XG5cbiAgZ2V0IGFsZXJ0Vm9sdW1lKCk6bnVtYmVyIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuX2FsZXJ0Vm9sdW1lKTtcbiAgfVxuXG4gIGdldCBhbGFybVRleHRUb1NwZWVjaCgpOmJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbGFybVRleHRUb1NwZWVjaDtcbiAgfVxuXG4gIGdldCBhbmRyb2lkUmluZ3RvbmVVUkkoKTpzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2FuZHJvaWRSaW5ndG9uZVVSSTtcbiAgfVxuXG4gIGdldCBhbmRyb2lkUmluZ3RvbmVUaXRsZSgpOnN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fYW5kcm9pZFJpbmd0b25lVGl0bGU7XG4gIH1cbiAgZ2V0IGlPU1NlbGVjdGVkUmluZ3RvbmUoKTpudW1iZXJ7XG4gICAgcmV0dXJuIHRoaXMuX2lPU1NlbGVjdGVkUmluZ3RvbmU7XG4gIH1cblxuICBzZXQgYW5kcm9pZFJpbmdUb25lVGl0bGUoYW5kcm9pZFJpbmd0b25lVGl0bGUpe1xuICAgIHRoaXMuX2FuZHJvaWRSaW5ndG9uZVRpdGxlID0gYW5kcm9pZFJpbmd0b25lVGl0bGU7ICBcbiAgfVxuXG4gIC8qKlxuICAgICAqIERldmljZS1JbmZvcm1hdGlvbiBnZXR0ZXJzXG4gICAgICovXG4gIGdldCBkZXZpY2VNb2RlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZXZpY2UubW9kZWw7XG4gIH1cbiAgZ2V0IGRldmljZU1hbnVmYWN0dXJlcigpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGRldmljZS5tYW51ZmFjdHVyZXI7XG4gIH1cbiAgZ2V0IGRldmljZU9TKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gZGV2aWNlLm9zO1xuICB9XG4gIGdldCBkZXZpY2VPU1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBkZXZpY2Uub3NWZXJzaW9uO1xuICB9XG4gIGdldCBkZXZpY2VVdWlkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gZGV2aWNlLnV1aWQ7XG4gIH1cbiAgZ2V0IGRldmljZVR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBkZXZpY2UuZGV2aWNlVHlwZTtcbiAgfVxuICBnZXQgZGV2aWNlTmFtZSgpOiBzdHJpbmcgIHtcbiAgICAgcmV0dXJuIERldmljZUluZm8uZGV2aWNlTmFtZSgpO1xuICB9XG4gIGdldCBhcHBOYW1lKCk6IHN0cmluZyAge1xuICAgIHJldHVybiBEZXZpY2VJbmZvLmFwcE5hbWUoKTtcbiAgfVxuICBnZXQgYXBwVmVyc2lvbigpOiBzdHJpbmcgIHtcbiAgICByZXR1cm4gRGV2aWNlSW5mby5hcHBWZXJzaW9uKCk7XG4gIH1cblxuICBnZXQgaXNBbmRyb2lkKCk6Ym9vbGVhbiB7XG4gICAgICByZXR1cm4gaXNBbmRyb2lkO1xuICB9XG5cbiAgZ2V0IGlzSU9TKCk6Ym9vbGVhbiB7XG4gICAgICByZXR1cm4gaXNJT1M7XG4gIH1cbiAgXG4gIGdldEFsZXJ0V2hpbGVNdXRlZCgpe1xuICAgICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldEJvb2xlYW4oXCJzZXR0aW5nQWxlcnRXaGlsZU11dGVkXCIpO1xuICB9XG5cbiAgZ2V0Q3JpdGljYWxBbGVydCgpe1xuICAgIGlmIChhcHBTZXR0aW5ncy5nZXRCb29sZWFuKFwic2V0dGluZ0NyaXRpY2FsQWxlcnRcIikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdDcml0aWNhbEFsZXJ0XCIsIHRydWUpO1xuXG4gICAgICBpZiAoaXNJT1Mpe1xuICAgICAgICBjb25zdCB1c2VyRGVmYXVsdHMgPSBpc0lPUyA/IE5TVXNlckRlZmF1bHRzLmFsbG9jKCkuaW5pdFdpdGhTdWl0ZU5hbWUoJ2dyb3VwLmRlLmFsYXJtaWF0b3IuaW9zJykgOiB1bmRlZmluZWQ7XG4gICAgICAgIHVzZXJEZWZhdWx0cy5zZXRCb29sRm9yS2V5KHRydWUsXCJzZXR0aW5nQ3JpdGljYWxBbGVydFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldEJvb2xlYW4oXCJzZXR0aW5nQ3JpdGljYWxBbGVydFwiLHRydWUpO1xuICB9XG5cbiAgZ2V0QWxhcm1UZXh0VG9TcGVlY2goKXtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0Qm9vbGVhbihcInNldHRpbmdBbGFybVRleHRUb1NwZWVjaFwiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcHBTZXR0aW5ncy5zZXRCb29sZWFuKFwic2V0dGluZ0FsYXJtVGV4dFRvU3BlZWNoXCIsIGZhbHNlKTtcblxuICAgICAgaWYgKGlzSU9TKXtcbiAgICAgICAgY29uc3QgdXNlckRlZmF1bHRzID0gaXNJT1MgPyBOU1VzZXJEZWZhdWx0cy5hbGxvYygpLmluaXRXaXRoU3VpdGVOYW1lKCdncm91cC5kZS5hbGFybWlhdG9yLmlvcycpIDogdW5kZWZpbmVkO1xuICAgICAgICB1c2VyRGVmYXVsdHMuc2V0Qm9vbEZvcktleShmYWxzZSxcInNldHRpbmdBbGFybVRleHRUb1NwZWVjaFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldEJvb2xlYW4oXCJzZXR0aW5nQWxhcm1UZXh0VG9TcGVlY2hcIixmYWxzZSk7XG4gIH1cblxuICBnZXRpT1NTZWxlY3RlZFJpbmd0b25lSW5kZXgoKXtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwic2V0dGluZ0lPU1Jpbmd0b25lXCIpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcInNldHRpbmdJT1NSaW5ndG9uZVwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgIGlmIChpc0lPUyl7XG4gICAgICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdXNlckRlZmF1bHRzLnNldE9iamVjdEZvcktleShcImRlZmF1bHRcIixcImlPU1JpbmdUb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pT1NSaW5ndG9uZXMuaW5kZXhPZihhcHBTZXR0aW5ncy5nZXRTdHJpbmcoXCJzZXR0aW5nSU9TUmluZ3RvbmVcIixcImRlZmF1bHRcIikpXG4gIH1cblxuICBnZXRBbGVydER1cmF0aW9uSW5TZWMoKXtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0TnVtYmVyKFwic2V0dGluZ0FsZXJ0RHVyYXRpb25JblNlY1wiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFwcFNldHRpbmdzLnNldE51bWJlcihcInNldHRpbmdBbGVydER1cmF0aW9uSW5TZWNcIiwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldE51bWJlcihcInNldHRpbmdBbGVydER1cmF0aW9uSW5TZWNcIik7XG4gIH1cblxuICBnZXRBbGVydFZvbHVtZSgpe1xuICAgIGlmIChhcHBTZXR0aW5ncy5nZXROdW1iZXIoXCJzZXR0aW5nQWxlcnRWb2x1bWVcIikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcHBTZXR0aW5ncy5zZXROdW1iZXIoXCJzZXR0aW5nQWxlcnRWb2x1bWVcIiwgMTApO1xuICAgIH1cblxuICAgIHJldHVybiBhcHBTZXR0aW5ncy5nZXROdW1iZXIoXCJzZXR0aW5nQWxlcnRWb2x1bWVcIik7XG4gIH1cblxuICBnZXRBbmRyb2lkUmluZ3RvbmVVUkkoKXtcbiAgICBpZiAoaXNBbmRyb2lkKXtcbiAgICAgICAgaWYgKGFwcFNldHRpbmdzLmdldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgdXJpID0gYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuZ2V0RGVmYXVsdFVyaShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5UWVBFX05PVElGSUNBVElPTik7XG4gICAgICAgICAgICBpZiAodXJpICE9IG51bGwpe1xuICAgICAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiLCB1cmkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmkgPSBhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5nZXREZWZhdWx0VXJpKGFuZHJvaWQubWVkaWEuUmluZ3RvbmVNYW5hZ2VyLlRZUEVfQUxBUk0pO1xuICAgICAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiLCB1cmkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJpbmd0b25lID0gYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuZ2V0UmluZ3RvbmUoYXBwbGljYXRpb24uYW5kcm9pZC5jb250ZXh0LCBhbmRyb2lkLm5ldC5VcmkucGFyc2UoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYW5kcm9pZFJpbmdUb25lXCIpLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgdmFyIHJpbmd0b25lVGl0bGUgPSByaW5ndG9uZS5nZXRUaXRsZShhcHBsaWNhdGlvbi5hbmRyb2lkLmNvbnRleHQpO1xuICAgICAgICB0aGlzLmFuZHJvaWRSaW5nVG9uZVRpdGxlID0gcmluZ3RvbmVUaXRsZTtcbiAgICAgICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hlY2tlZEFsZXJ0V2hpbGVNdXRlZENoYW5nZShzbGlkZXIpe1xuICAgICAgdGhpcy5fYWxlcnRXaGlsZU11dGVkID0gc2xpZGVyLnZhbHVlO1xuICAgICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdBbGVydFdoaWxlTXV0ZWRcIixzbGlkZXIudmFsdWUpO1xuICB9XG5cbiAgb25DaGVja2VkQ3JpdGljYWxBbGVydENoYW5nZShzbGlkZXIpe1xuICAgIHRoaXMuX2NyaXRpY2FsQWxlcnQgPSBzbGlkZXIudmFsdWU7XG4gICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdDcml0aWNhbEFsZXJ0XCIsc2xpZGVyLnZhbHVlKTtcblxuICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICB1c2VyRGVmYXVsdHMuc2V0Qm9vbEZvcktleShzbGlkZXIudmFsdWUsXCJzZXR0aW5nQ3JpdGljYWxBbGVydFwiKTtcbiAgfVxuXG4gIG9uQ2hlY2tlZEFsYXJtVGV4dFRvU3BlZWNoQ2hhbmdlKHNsaWRlcil7XG4gICAgdGhpcy5fYWxhcm1UZXh0VG9TcGVlY2ggPSBzbGlkZXIudmFsdWU7XG4gICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdBbGFybVRleHRUb1NwZWVjaFwiLHNsaWRlci52YWx1ZSk7XG5cbiAgICBpZiAoaXNJT1Mpe1xuICAgICAgY29uc3QgdXNlckRlZmF1bHRzID0gaXNJT1MgPyBOU1VzZXJEZWZhdWx0cy5hbGxvYygpLmluaXRXaXRoU3VpdGVOYW1lKCdncm91cC5kZS5hbGFybWlhdG9yLmlvcycpIDogdW5kZWZpbmVkO1xuICAgICAgdXNlckRlZmF1bHRzLnNldEJvb2xGb3JLZXkoc2xpZGVyLnZhbHVlLFwic2V0dGluZ0FsYXJtVGV4dFRvU3BlZWNoXCIpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFwVG9TaGFyZUZDTUtleShldmVudCl7XG4gICAgICBTb2NpYWxTaGFyZS5zaGFyZVRleHQodGhpcy5mY21fdG9rZW4pO1xuICB9XG5cbiAgb25TbGlkZXJWYWx1ZUNoYW5nZShzbGlkZXIpe1xuICAgIGFwcFNldHRpbmdzLnNldE51bWJlcihcInNldHRpbmdBbGVydER1cmF0aW9uSW5TZWNcIixzbGlkZXIudmFsdWUpO1xuICAgIHRoaXMuX2FsZXJ0RHVyYXRpb25JblNlYyA9IHRoaXMuZ2V0QWxlcnREdXJhdGlvbkluU2VjKCk7XG4gIH1cblxuICBvblRhcE9wZW5SaW5nVG9uZShldmVudCl7XG4gICAgaWYgKGlzQW5kcm9pZCl7XG4gICAgICAgIHZhciBjdXJyZW50VVJJID0gdGhpcy5nZXRBbmRyb2lkUmluZ3RvbmVVUkkoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIkN1cnJlbnRVUkk6XCIgKyBjdXJyZW50VVJJKTtcbiAgICAgICAgdmFyIGludGVudCA9IG5ldyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50KGFuZHJvaWQubWVkaWEuUmluZ3RvbmVNYW5hZ2VyLkFDVElPTl9SSU5HVE9ORV9QSUNLRVIpO1xuXG4gICAgICAgIGludGVudC5wdXRFeHRyYShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5FWFRSQV9SSU5HVE9ORV9USVRMRSwgXCJXw6RobGUgVG9uIGbDvHIgQUxBUk1pYXRvclwiKTtcbiAgICAgICAgaW50ZW50LnB1dEV4dHJhKGFuZHJvaWQubWVkaWEuUmluZ3RvbmVNYW5hZ2VyLkVYVFJBX1JJTkdUT05FX1NIT1dfU0lMRU5ULCBmYWxzZSk7XG4gICAgICAgIGludGVudC5wdXRFeHRyYShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5FWFRSQV9SSU5HVE9ORV9TSE9XX0RFRkFVTFQsIHRydWUpO1xuICAgICAgICBpbnRlbnQucHV0RXh0cmEoYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuRVhUUkFfUklOR1RPTkVfVFlQRSxhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5UWVBFX05PVElGSUNBVElPTik7XG4gICAgICAgIGludGVudC5wdXRFeHRyYShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5FWFRSQV9SSU5HVE9ORV9FWElTVElOR19VUkksIGFuZHJvaWQubmV0LlVyaS5wYXJzZShjdXJyZW50VVJJKSk7XG5cbiAgICAgICAgYXBwbGljYXRpb24uYW5kcm9pZC5mb3JlZ3JvdW5kQWN0aXZpdHkuc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpbnRlbnQsIDExMSk7XG5cbiAgICAgICAgLy8gVE9ETzogUmVmcmVzaCBzZXR0aW5ncyB2aWV3XG4gICAgfSBcbiAgfVxuXG4gIC8qKlxuICAgKiBwbGF5cyBzZWxlY3RkIFNvdW5kZmlsZSBhcyBhbGFybWluZyBzb3VuZCBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgKiBAcGFyYW0gZXZlbnQgXG4gICAqL1xuICBvblRhcFRlc3RBdWRpbyhldmVudCkge1xuICAgIGlmICh0aGlzLl9pT1NSaW5ndG9uZXNbdGhpcy5faU9TU2VsZWN0ZWRSaW5ndG9uZV0gIT0gJ2RlZmF1bHQnKSB7XG4gICAgICAvLyBwbGF5IHNlbGVjdGVkIFJpbmdUb25lXG4gICAgICB2YXIgcmluZ1RvbmVUb1BsYXkgPSB0aGlzLl9pT1NSaW5ndG9uZXNbdGhpcy5faU9TU2VsZWN0ZWRSaW5ndG9uZV07XG4gICAgICBjb25zb2xlLmxvZygnVGVzdGluZyBTb3VuZCBTZXR0aW5ncyB3aXRoIHJpbmd0b25lOiAnICsgcmluZ1RvbmVUb1BsYXkpO1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFROU1BsYXllcigpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlYnVnID0gdHJ1ZTsgLy8gc2V0IHRydWUgdG8gZW5hYmxlIFROU1BsYXllciBjb25zb2xlIGxvZ3MgZm9yIGRlYnVnZ2luZy5cbiAgICAgIHRoaXMuX3BsYXllclxuICAgICAgICAuaW5pdEZyb21GaWxlKHtcbiAgICAgICAgICBhdWRpb0ZpbGU6ICd+Ly4uLycgKyByaW5nVG9uZVRvUGxheSwgLy8gfiA9IGFwcCBkaXJlY3RvcnlcbiAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICBjb21wbGV0ZUNhbGxiYWNrOiB0aGlzLl90cmFja0NvbXBsZXRlLmJpbmQodGhpcyksXG4gICAgICAgICAgZXJyb3JDYWxsYmFjazogdGhpcy5fdHJhY2tFcnJvci5iaW5kKHRoaXMpXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9wbGF5ZXIuZ2V0QXVkaW9UcmFja0R1cmF0aW9uKCkudGhlbihkdXJhdGlvbiA9PiB7XG4gICAgICAgICAgICAvLyBpT1M6IGR1cmF0aW9uIGlzIGluIHNlY29uZHNcbiAgICAgICAgICAgIC8vIEFuZHJvaWQ6IGR1cmF0aW9uIGlzIGluIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uc29sZS5sb2coYERhdWVyIGRlcyBLbGluZ2VsdG9uczpgLCBkdXJhdGlvbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdQbGF5aW5nIHdpdGggVm9sdW1lOiAnICsgdGhpcy5fYWxlcnRWb2x1bWUpO1xuICAgICAgICAgIHRoaXMuX3BsYXllci52b2x1bWUgPSAodGhpcy5fYWxlcnRWb2x1bWUgLyAxMCk7XG4gICAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgc2VsZWN0ZWQsIG5vdCBwbGF5aW5nIGFueXRoaW5nXG4gICAgICBjb25zb2xlLmxvZygnZGVmYXVsdCBzZWxlY3RlZCwgbm90IHBsYXlpbmcgYW55dGhpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIGFmdGVyIHNlbGVjdGVkIFNvdW5kZmlsZSBoYXMgYmVlbiBwbGF5ZWQgc3VjY2Vzc2Z1bGx5XG4gICAqIEBwYXJhbSBhcmdzIFxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhY2tDb21wbGV0ZShhcmdzOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnUmVmZXJlbnogenVyIFBsYXllciBJbnN0YW56OicsIGFyZ3MucGxheWVyKTtcbiAgICBjb25zb2xlLmxvZygnS29ubnRlIEtsaW5nZWx0b24gYWJnZXNwaWVsdCB3ZXJkZW46JywgYXJncy5mbGFnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsZWQgaWYgdGhlcmVzIGJlZW4gYW4gZXJyb3IgcGxheWluZyBzb3VuZGZpbGVcbiAgICogQHBhcmFtIGFyZ3MgXG4gICAqL1xuICBwcml2YXRlIF90cmFja0Vycm9yKGFyZ3M6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdFUlJPUjogUmVmZXJlbnogenVyIFBsYXllciBJbnN0YW56OicsIGFyZ3MucGxheWVyKTtcbiAgICBjb25zb2xlLmxvZygnRVJST1I6IEZlaGxlcm1lbGR1bmc6JywgYXJncy5lcnJvcik7XG4gICAgLy8gQW5kcm9pZCBvbmx5OiBleHRyYSBkZXRhaWwgb24gZXJyb3JcbiAgICBjb25zb2xlLmxvZygnRVJST1I6IE1laHIgSW5mb3JtYXRpb25lbiB6dW0gUGxheWVyOicsIGFyZ3MuZXh0cmEpO1xuICB9XG5cblxuICBvblRhcE9wZW5SaW5nVG9uZUlPUyhldmVudCl7XG4gICAgY29uc3QgYWN0aW9uT3B0aW9uczogQWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiBcIlRvbmF1c3dhaGxcIixcbiAgICAgIG1lc3NhZ2U6IFwiV8OkaGxlIGRlaW5lbiBUb25cIixcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiQWJicmVjaGVuXCIsXG4gICAgICBhY3Rpb25zOiBbXCJkZWZhdWx0XCIsIFwiYmJhYWJiYWEud2F2XCJdLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSAvLyBBbmRyb2lkIG9ubHlcbiAgfTtcblxuICBhY3Rpb24oYWN0aW9uT3B0aW9ucykudGhlbigocmVzdWx0KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2FjdGlvbjogJyArIHJlc3VsdCk7XG4gICAgYXBwU2V0dGluZ3Muc2V0U3RyaW5nKFwiaU9TUmluZ1RvbmVcIiwgcmVzdWx0KTtcbiAgICBcbiAgICBjb25zdCB1c2VyRGVmYXVsdHMgPSBpc0lPUyA/IE5TVXNlckRlZmF1bHRzLmFsbG9jKCkuaW5pdFdpdGhTdWl0ZU5hbWUoJ2dyb3VwLmRlLmFsYXJtaWF0b3IuaW9zJykgOiB1bmRlZmluZWQ7XG4gICAgdXNlckRlZmF1bHRzLnNldE9iamVjdEZvcktleShyZXN1bHQsXCJpT1NSaW5nVG9uZVwiKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWRSaW5nVG9uZUlPU0NoYW5nZWQoYXJnczogRXZlbnREYXRhKSB7XG4gICAgY29uc3QgcGlja2VyID0gPExpc3RQaWNrZXI+YXJncy5vYmplY3Q7XG4gICAgY29uc29sZS5sb2coYCR7dGhpcy5faU9TUmluZ3RvbmVzW3BpY2tlci5zZWxlY3RlZEluZGV4XX1gKTtcbiAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJzZXR0aW5nSU9TUmluZ3RvbmVcIix0aGlzLl9pT1NSaW5ndG9uZXNbcGlja2VyLnNlbGVjdGVkSW5kZXhdKTtcbiAgICB0aGlzLl9pT1NTZWxlY3RlZFJpbmd0b25lID0gcGlja2VyLnNlbGVjdGVkSW5kZXg7XG4gICAgaWYgKGlzSU9TKXtcbiAgICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICAgIHVzZXJEZWZhdWx0cy5zZXRPYmplY3RGb3JLZXkodGhpcy5faU9TUmluZ3RvbmVzW3BpY2tlci5zZWxlY3RlZEluZGV4XSxcImlPU1JpbmdUb25lXCIpO1xuICAgIH1cbn1cblxuICBvblZvbHVtZVNsaWRlclZhbHVlQ2hhbmdlKHNsaWRlcil7XG4gICAgYXBwU2V0dGluZ3Muc2V0TnVtYmVyKFwic2V0dGluZ0FsZXJ0Vm9sdW1lXCIsc2xpZGVyLnZhbHVlKTtcbiAgICB0aGlzLl9hbGVydFZvbHVtZSA9IHRoaXMuZ2V0QWxlcnRWb2x1bWUoKTtcbiAgICBpZiAoaXNJT1MpIHtcbiAgICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICAgIHVzZXJEZWZhdWx0cy5zZXRGbG9hdEZvcktleShzbGlkZXIudmFsdWUsXCJzZXR0aW5nQWxlcnRWb2x1bWVcIik7XG4gICAgfVxuICB9XG5cbiAgb25UYXBUb0NsZWFyT3BzKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKXtcbiAgICB0aGlzLl9vcGVyYXRpb25TZXJ2aWNlLmNsZWFyT3BlcmF0aW9ucygpO1xuICB9XG5cbiAgb25UYXBPcGVuSU9TUmluZ2V0b25lTWFuYWdlcihldmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnM6IE1vZGFsRGlhbG9nT3B0aW9ucyA9IHtcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy5fdmNSZWYsXG4gICAgICAgIGNvbnRleHQ6IHt9LFxuICAgICAgICBmdWxsc2NyZWVuOiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuX21vZGFsU2VydmljZS5zaG93TW9kYWwoTW9kYWxSaW5ndG9uZUNvbXBvbmVudCwgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTU9EQUwgQ0xPU0VEXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1vZGFsIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==