ng-yunzai-mobile
Version:
1. 修改wechat.micro.ts
615 lines • 39.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: devices/ios.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { BaseDevice } from "./base.device";
import { HttpClient } from "@angular/common/http";
import { Inject, Injectable } from "@angular/core";
import { BASE_CLIENT } from "../client/base.client";
import { preloaderFinished } from "../auth/preloader";
import { from } from "rxjs";
import { TokenService } from "../token/token.service";
import { UserService } from "../user/user.service";
import * as i0 from "@angular/core";
import * as i1 from "../token/token.service";
import * as i2 from "@angular/common/http";
import * as i3 from "../user/user.service";
import * as i4 from "../client/base.client";
var IOS = /** @class */ (function (_super) {
tslib_1.__extends(IOS, _super);
function IOS(tokenService, http, user, baseclient) {
var _this = _super.call(this) || this;
_this.tokenService = tokenService;
_this.http = http;
_this.user = user;
_this.baseclient = baseclient;
return _this;
}
/**
* 手机网页认证
*/
/**
* 手机网页认证
* @return {?}
*/
IOS.prototype.auth = /**
* 手机网页认证
* @return {?}
*/
function () {
var _this = this;
if (this.baseclient.ios && this.baseclient.ios.auth === false) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
preloaderFinished();
resolve(true);
}));
}
if (null === this.baseclient.mobileVersion || this.baseclient.mobileVersion === "V6") {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
// 设置token
_this.tokenService.set((/** @type {?} */ (_this.getToken())));
// 发送/user请求
_this.http
.get(_this.baseclient.gateway + "/auth/user")
.subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
// 设置user
_this.user.set(response.principal);
// 加载结束
preloaderFinished();
resolve(true);
}));
}));
}
else if (null !== this.baseclient.mobileVersion && this.baseclient.mobileVersion === "V5") {
/** @type {?} */
var userInfo = yz.getUserInfoSync();
/** @type {?} */
var formData_1 = new FormData();
var account = userInfo.account, password = userInfo.password;
formData_1.set("username", account);
formData_1.set("password", password);
formData_1.set("grant_type", "password");
formData_1.set("client_id", "webapp");
formData_1.set("scope", "webapp");
formData_1.set("client_secret", "123456");
return new Promise(((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
_this.http.post(_this.baseclient.gateway + "/auth/oauth/token", formData_1).subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
/** @type {?} */
var tokenInfo = {};
tokenInfo['accessToken'] = response.access_token;
tokenInfo['tokenType'] = response.token_type;
tokenInfo['refreshToken'] = response.refresh_token;
tokenInfo['expiresIn'] = response.expires_in;
tokenInfo['scope'] = response.scope;
_this.tokenService.set((/** @type {?} */ (tokenInfo)));
_this.http.get(_this.baseclient.gateway + "/auth/user").subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
// 设置user
_this.user.set(response.principal);
// 加载结束
preloaderFinished();
resolve(true);
}));
}));
})));
}
};
/**
* @return {?}
*/
IOS.prototype.getToken = /**
* @return {?}
*/
function () {
return yz.getTokenSync();
};
/**
* @param {?} window
* @return {?}
*/
IOS.prototype.openWindow = /**
* @param {?} window
* @return {?}
*/
function (window) {
yz.navigationOpenWindow(window);
if (window.listener) {
yz.listener.nBack(window.listener);
}
};
/**
* @return {?}
*/
IOS.prototype.scanCode = /**
* @return {?}
*/
function () {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.scanCode({
success: /**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
},
fail: /**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject("error");
}
});
})));
};
/**
* @param {?} navigationBar
* @return {?}
*/
IOS.prototype.setNavigationBar = /**
* @param {?} navigationBar
* @return {?}
*/
function (navigationBar) {
yz.setNavigationBarRightItems({
showMenu: navigationBar.showMenu,
shareFlag: navigationBar.shareFlag,
items: navigationBar.items,
onClick: navigationBar.onClick,
success: navigationBar.success,
fial: navigationBar.fial,
complete: navigationBar.complete
});
};
/**
* @param {?} ititle
* @return {?}
*/
IOS.prototype.setTitle = /**
* @param {?} ititle
* @return {?}
*/
function (ititle) {
yz.setNavigationBarTitle(ititle);
};
/**
* @param {?} ishare
* @return {?}
*/
IOS.prototype.share = /**
* @param {?} ishare
* @return {?}
*/
function (ishare) {
yz.setWebCanShare(ishare);
};
/**
* @return {?}
*/
IOS.prototype.userLocation = /**
* @return {?}
*/
function () {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.userLocation({
success: /**
* @param {?} data
* @return {?}
*/
function (data) {
resolve((/** @type {?} */ ({
address: data.address,
latitude: data.latitude,
longitude: data.longitude
})));
},
fail: /**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
}
});
})));
};
/**
* @param {?} bssids
* @return {?}
*/
IOS.prototype.validateInWifi = /**
* @param {?} bssids
* @return {?}
*/
function (bssids) {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.userLocationContainAp({
bssids: bssids,
success: /**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
},
fail: /**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
}
});
})));
};
/**
* @return {?}
*/
IOS.prototype.getWifiMac = /**
* @return {?}
*/
function () {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.getMac({
success: /**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
},
fail: /**
* @param {?} errorMsg
* @return {?}
*/
function (errorMsg) {
reject(errorMsg);
}
});
})));
};
/**
* @param {?} count
* @return {?}
*/
IOS.prototype.chooseContacts = /**
* @param {?} count
* @return {?}
*/
function (count) {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.chooseContacts({
count: count,
success: /**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
},
fail: /**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
}
});
})));
};
/**
* @param {?} targetUserId
* @return {?}
*/
IOS.prototype.contactDetails = /**
* @param {?} targetUserId
* @return {?}
*/
function (targetUserId) {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.ContactDetails({
targetUserId: targetUserId,
success: (/**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
}),
fail: (/**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
})
});
})));
};
/**
* @param {?} count
* @param {?} sourceType
* @return {?}
*/
IOS.prototype.uploadImage = /**
* @param {?} count
* @param {?} sourceType
* @return {?}
*/
function (count, sourceType) {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.uploadImage({
count: count,
sourceType: sourceType,
success: (/**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
}),
fail: (/**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
})
});
})));
};
/**
* @param {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
IOS.prototype.openReadWithTimer = /**
* @param {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
function (url, openType, title, id, type) {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.openReadWithTimer({
url: url,
openType: openType,
title: title,
id: id,
type: type,
success: (/**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
}),
fail: (/**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
})
});
})));
};
/**
* @param {?} limitMinute
* @return {?}
*/
IOS.prototype.uploadMovie = /**
* @param {?} limitMinute
* @return {?}
*/
function (limitMinute) {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.uploadMovie({
limitMinute: limitMinute,
success: (/**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
}),
fail: (/**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
})
});
})));
};
/**
* @param {?} url
* @param {?} title
* @return {?}
*/
IOS.prototype.fileBrowser = /**
* @param {?} url
* @param {?} title
* @return {?}
*/
function (url, title) {
return from(new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
yz.fileBrowser({
url: url,
title: title,
success: (/**
* @param {?} data
* @return {?}
*/
function (data) {
resolve(data);
}),
fail: (/**
* @param {?} errMsg
* @return {?}
*/
function (errMsg) {
reject(errMsg);
})
});
})));
};
/**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
IOS.prototype.startSearchBeacons = /**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
function (ticket, callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
IOS.prototype.stopSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
IOS.prototype.onSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
IOS.decorators = [
{ type: Injectable, args: [{
providedIn: "root"
},] }
];
/** @nocollapse */
IOS.ctorParameters = function () { return [
{ type: TokenService },
{ type: HttpClient },
{ type: UserService },
{ type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] }
]; };
/** @nocollapse */ IOS.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function IOS_Factory() { return new IOS(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT)); }, token: IOS, providedIn: "root" });
return IOS;
}(BaseDevice));
export { IOS };
if (false) {
/**
* @type {?}
* @private
*/
IOS.prototype.tokenService;
/**
* @type {?}
* @private
*/
IOS.prototype.http;
/**
* @type {?}
* @private
*/
IOS.prototype.user;
/**
* @type {?}
* @private
*/
IOS.prototype.baseclient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbImRldmljZXMvaW9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxXQUFXLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRCxPQUFPLEVBQWEsSUFBSSxFQUFLLE1BQU0sTUFBTSxDQUFDO0FBSzFDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQUlqRDtJQUd5QiwrQkFBVTtJQUNqQyxhQUNVLFlBQTBCLEVBQzFCLElBQWdCLEVBQ2hCLElBQWlCLEVBQ0ksVUFBc0I7UUFKckQsWUFNRSxpQkFBTyxTQUNSO1FBTlMsa0JBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsVUFBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFJLEdBQUosSUFBSSxDQUFhO1FBQ0ksZ0JBQVUsR0FBVixVQUFVLENBQVk7O0lBR3JELENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCxrQkFBSTs7OztJQUFKO1FBQUEsaUJBcURDO1FBcERDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUM3RCxPQUFPLElBQUksT0FBTzs7Ozs7WUFBTSxVQUFDLE9BQU8sRUFBRSxNQUFNO2dCQUN0QyxpQkFBaUIsRUFBRSxDQUFDO2dC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Q0FBQzs7Ozs7SUFDRCwrQkFBaUI7Ozs7SUFBakIsVUFBa0IsUUFBNkI7UUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Ozs7O0lBQ0QsNkJBQWU7Ozs7SUFBZixVQUFnQixRQUE2QjtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Z0JBdlJGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBUE8sWUFBWTtnQkFYWixVQUFVO2dCQVlWLFdBQVc7Z0RBWWQsTUFBTSxTQUFDLFdBQVc7OztjQXpCdkI7Q0F5U0MsQUF4UkQsQ0FHeUIsVUFBVSxHQXFSbEM7U0FyUlksR0FBRzs7Ozs7O0lBRVosMkJBQWtDOzs7OztJQUNsQyxtQkFBd0I7Ozs7O0lBQ3hCLG1CQUF5Qjs7Ozs7SUFDekIseUJBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYXNlRGV2aWNlfSBmcm9tIFwiLi9iYXNlLmRldmljZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtCQVNFX0NMSUVOVCwgQmFzZUNsaWVudH0gZnJvbSBcIi4uL2NsaWVudC9iYXNlLmNsaWVudFwiO1xyXG5pbXBvcnQge3ByZWxvYWRlckZpbmlzaGVkfSBmcm9tIFwiLi4vYXV0aC9wcmVsb2FkZXJcIjtcclxuaW1wb3J0IHtJdG9rZW59IGZyb20gXCIuLi9hdXRoL2l0b2tlblwiO1xyXG5pbXBvcnQge0lXaW5kb3d9IGZyb20gXCIuL21vZGVsL3dpbmRvd1wiO1xyXG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG9mfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge05hdmlnYXRpb25CYXJ9IGZyb20gXCIuL21vZGVsL25hdmlnYXRpb25iYXJcIjtcclxuaW1wb3J0IHtJVGl0bGV9IGZyb20gXCIuL21vZGVsL3RpdGxlXCI7XHJcbmltcG9ydCB7SVNoYXJlfSBmcm9tIFwiLi9tb2RlbC9zaGFyZVwiO1xyXG5pbXBvcnQge1VzZXJMb2NhdGlvbn0gZnJvbSBcIi4vbW9kZWwvbG9jYXRpb25cIjtcclxuaW1wb3J0IHtUb2tlblNlcnZpY2V9IGZyb20gXCIuLi90b2tlbi90b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gXCIuLi91c2VyL3VzZXIuc2VydmljZVwiO1xyXG5cclxuZGVjbGFyZSBsZXQgeXo7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIElPUyBleHRlbmRzIEJhc2VEZXZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJBU0VfQ0xJRU5UKSBwcml2YXRlIGJhc2VjbGllbnQ6IEJhc2VDbGllbnRcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiYvmnLrnvZHpobXorqTor4FcclxuICAgKi9cclxuICBhdXRoKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmlvcyAmJiB0aGlzLmJhc2VjbGllbnQuaW9zLmF1dGggPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBwcmVsb2FkZXJGaW5pc2hlZCgpO1xyXG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG51bGwgPT09IHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uIHx8IHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uID09PSBcIlY2XCIpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIC8vIOiuvue9rnRva2VuXHJcbiAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRoaXMuZ2V0VG9rZW4oKSBhcyBhbnkpO1xyXG4gICAgICAgIC8vIOWPkemAgS91c2Vy6K+35rGCXHJcbiAgICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgICAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyDorr7nva51c2VyXHJcbiAgICAgICAgICAgIHRoaXMudXNlci5zZXQocmVzcG9uc2UucHJpbmNpcGFsKTtcclxuICAgICAgICAgICAgLy8g5Yqg6L2957uT5p2fXHJcbiAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG51bGwgIT09IHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uICYmIHRoaXMuYmFzZWNsaWVudC5tb2JpbGVWZXJzaW9uID09PSBcIlY1XCIpIHtcclxuICAgICAgY29uc3QgdXNlckluZm8gPSB5ei5nZXRVc2VySW5mb1N5bmMoKTtcclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgY29uc3Qge2FjY291bnQsIHBhc3N3b3JkfSA9IHVzZXJJbmZvO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJ1c2VybmFtZVwiLCBhY2NvdW50KTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwicGFzc3dvcmRcIiwgcGFzc3dvcmQpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJncmFudF90eXBlXCIsIFwicGFzc3dvcmRcIik7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImNsaWVudF9pZFwiLCBcIndlYmFwcFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwic2NvcGVcIiwgXCJ3ZWJhcHBcIik7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImNsaWVudF9zZWNyZXRcIiwgXCIxMjM0NTZcIik7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvb2F1dGgvdG9rZW5gLCBmb3JtRGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IHRva2VuSW5mbyA9IHt9O1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ2FjY2Vzc1Rva2VuJ10gPSByZXNwb25zZS5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1sndG9rZW5UeXBlJ10gPSByZXNwb25zZS50b2tlbl90eXBlO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ3JlZnJlc2hUb2tlbiddID0gcmVzcG9uc2UucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydleHBpcmVzSW4nXSA9IHJlc3BvbnNlLmV4cGlyZXNfaW47XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1snc2NvcGUnXSA9IHJlc3BvbnNlLnNjb3BlO1xyXG4gICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodG9rZW5JbmZvIGFzIGFueSlcclxuICAgICAgICAgICAgdGhpcy5odHRwLmdldChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC91c2VyYCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyDorr7nva51c2VyXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIuc2V0KHJlc3BvbnNlLnByaW5jaXBhbCk7XHJcbiAgICAgICAgICAgICAgICAvLyDliqDovb3nu5PmnZ9cclxuICAgICAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG9rZW4oKTogSXRva2VuIHtcclxuICAgIHJldHVybiB5ei5nZXRUb2tlblN5bmMoKTtcclxuICB9XHJcblxyXG4gIG9wZW5XaW5kb3cod2luZG93OiBJV2luZG93KTogdm9pZCB7XHJcbiAgICB5ei5uYXZpZ2F0aW9uT3BlbldpbmRvdyh3aW5kb3cpO1xyXG4gICAgaWYgKHdpbmRvdy5saXN0ZW5lcikge1xyXG4gICAgICB5ei5saXN0ZW5lci5uQmFjayh3aW5kb3cubGlzdGVuZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2NhbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5zY2FuQ29kZSh7XHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZykge1xyXG4gICAgICAgICAgICByZWplY3QoXCJlcnJvclwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXROYXZpZ2F0aW9uQmFyKG5hdmlnYXRpb25CYXI6IE5hdmlnYXRpb25CYXIpOiB2b2lkIHtcclxuICAgIHl6LnNldE5hdmlnYXRpb25CYXJSaWdodEl0ZW1zKHtcclxuICAgICAgc2hvd01lbnU6IG5hdmlnYXRpb25CYXIuc2hvd01lbnUsXHJcbiAgICAgIHNoYXJlRmxhZzogbmF2aWdhdGlvbkJhci5zaGFyZUZsYWcsXHJcbiAgICAgIGl0ZW1zOiBuYXZpZ2F0aW9uQmFyLml0ZW1zLFxyXG4gICAgICBvbkNsaWNrOiBuYXZpZ2F0aW9uQmFyLm9uQ2xpY2ssXHJcbiAgICAgIHN1Y2Nlc3M6IG5hdmlnYXRpb25CYXIuc3VjY2VzcyxcclxuICAgICAgZmlhbDogbmF2aWdhdGlvbkJhci5maWFsLFxyXG4gICAgICBjb21wbGV0ZTogbmF2aWdhdGlvbkJhci5jb21wbGV0ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUaXRsZShpdGl0bGU6IElUaXRsZSk6IHZvaWQge1xyXG4gICAgeXouc2V0TmF2aWdhdGlvbkJhclRpdGxlKGl0aXRsZSk7XHJcbiAgfVxyXG5cclxuICBzaGFyZShpc2hhcmU6IElTaGFyZSk6IHZvaWQge1xyXG4gICAgeXouc2V0V2ViQ2FuU2hhcmUoaXNoYXJlKTtcclxuICB9XHJcblxyXG4gIHVzZXJMb2NhdGlvbigpOiBPYnNlcnZhYmxlPFVzZXJMb2NhdGlvbiB8IGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei51c2VyTG9jYXRpb24oe1xyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgYWRkcmVzczogZGF0YS5hZGRyZXNzLFxyXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBkYXRhLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICAgIGxvbmdpdHVkZTogZGF0YS5sb25naXR1ZGVcclxuICAgICAgICAgICAgfSBhcyBVc2VyTG9jYXRpb24pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVJbldpZmkoYnNzaWRzOiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgYW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVzZXJMb2NhdGlvbkNvbnRhaW5BcCh7XHJcbiAgICAgICAgICBic3NpZHMsXHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZzogYW55KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFdpZmlNYWMoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouZ2V0TWFjKHtcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJvck1zZykge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyb3JNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNob29zZUNvbnRhY3RzKGNvdW50OiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5jaG9vc2VDb250YWN0cyh7XHJcbiAgICAgICAgICBjb3VudCxcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogYW55KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2c6IGFueSkge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb250YWN0RGV0YWlscyh0YXJnZXRVc2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LkNvbnRhY3REZXRhaWxzKHtcclxuICAgICAgICAgIHRhcmdldFVzZXJJZCxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRJbWFnZShjb3VudDogbnVtYmVyLCBzb3VyY2VUeXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei51cGxvYWRJbWFnZSh7XHJcbiAgICAgICAgICBjb3VudCxcclxuICAgICAgICAgIHNvdXJjZVR5cGUsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvcGVuUmVhZFdpdGhUaW1lcih1cmw6IGFueSwgb3BlblR5cGU6IGFueSwgdGl0bGU6IGFueSwgaWQ6IGFueSwgdHlwZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoub3BlblJlYWRXaXRoVGltZXIoe1xyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgb3BlblR5cGUsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRNb3ZpZShsaW1pdE1pbnV0ZTogbnVtYmVyICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZE1vdmllKHtcclxuICAgICAgICAgIGxpbWl0TWludXRlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmlsZUJyb3dzZXIodXJsOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5maWxlQnJvd3Nlcih7XHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoQmVhY29ucyh0aWNrZXQ6IHN0cmluZywgY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBzdG9wU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIG9uU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG59XHJcbiJdfQ==