UNPKG

ng-yunzai-mobile

Version:

1. 适配yunzai_uni_app_x

377 lines 31.4 kB
/** * @fileoverview added by tsickle * Generated from: devices/browser.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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 { map } from "rxjs/operators"; import { preloaderFinished } from "../auth/preloader"; import { of } from "rxjs"; import { Title } from "@angular/platform-browser"; 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"; import * as i5 from "@angular/platform-browser"; export class Browser extends BaseDevice { /** * @param {?} tokenService * @param {?} http * @param {?} user * @param {?} baseclient * @param {?} title */ constructor(tokenService, http, user, baseclient, title) { super(); this.tokenService = tokenService; this.http = http; this.user = user; this.baseclient = baseclient; this.title = title; } /** * @return {?} */ auth() { if (this.baseclient.browser && this.baseclient.browser.auth === false) { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { preloaderFinished(); resolve(true); })); } // 如果是本地开发配置了账号密码 if (this.baseclient.dev && this.baseclient.dev.username && this.baseclient.dev.password) { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { this.authByConfiguredUserPass().then((/** * @return {?} */ () => { this.http .get(`${this.baseclient.gateway}/auth/user`) .subscribe((/** * @param {?} response * @return {?} */ (response) => { this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId })); preloaderFinished(); resolve(true); })); })); })); } // 走cas认证流程 return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { this.authByCas().then((/** * @return {?} */ () => { this.http .get(`${this.baseclient.gateway}/auth/user`) .subscribe((/** * @param {?} response * @return {?} */ (response) => { this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId })); preloaderFinished(); resolve(true); })); })); })); } /** * @private * @return {?} */ authByCas() { /** @type {?} */ const url = encodeURIComponent(window.location.href); return this.http.get(this.baseclient.gateway + '/cas-proxy/app/validate_full?callback=' + url + '&timestamp=' + new Date().getTime()) .pipe(map((/** * @param {?} res * @return {?} */ (res) => { switch (res.errcode) { case 2000: /** @type {?} */ const token = {}; token.tokenType = res.data.token_type; token.accessToken = res.data.access_token; token.scope = res.data.scope; token.tokenDateLine = res.data.expires_in; this.tokenService.set(token); break; case 2001: window.location.href = res.msg; break; case 2002: alert(res.data); break; case 2003: case 5000: case 5001: alert(res.msg); break; default: break; } }))).toPromise(); } /** * @private * @return {?} */ authByConfiguredUserPass() { /** @type {?} */ const form = new FormData(); form.set('username', this.baseclient.dev.username); form.set('password', this.baseclient.dev.password); form.set('grant_type', 'password'); form.set('client_id', 'webapp'); form.set('scope', 'webapp'); form.set('client_secret', '123456'); return this.http .post(`${this.baseclient.gateway}/auth/oauth/token`, form) .pipe(map((/** * @param {?} response * @return {?} */ (response) => { /** @type {?} */ const token = {}; token.tokenType = response.token_type; token.accessToken = response.access_token; token.scope = response.scope; token.tokenDateLine = response.expires_in; this.tokenService.set(token); }))) .toPromise(); } /** * @return {?} */ getToken() { /** @type {?} */ const itoken = { accessToken: this.tokenService.get().accessToken, tokenType: this.tokenService.get().tokenType, tokenDataLine: this.tokenService.get().tokenDateLine, scope: this.tokenService.get().scope }; return itoken; } /** * @return {?} */ getUser() { /** @type {?} */ const iuser = Object.create({ account: this.user.get().username, userName: this.user.get().username, password: this.user.get().password, userId: this.user.get().id, realName: this.user.get().realname, deptId: this.user.get().deptId, deptName: this.user.get().deptName, userType: this.user.get().userType }); return iuser; } /** * @param {?} iwindow * @return {?} */ openWindow(iwindow) { window.location.href = iwindow.url; } /** * @return {?} */ scanCode() { alert("浏览器暂不支持扫码,请在APP中使用此功能!"); return of("浏览器暂不支持扫码,请在APP中使用此功能!"); } /** * @param {?} navigationBar * @return {?} */ setNavigationBar(navigationBar) { alert("浏览器暂不支持放置按钮,请在APP中使用此功能!"); } /** * @param {?} ititle * @return {?} */ setTitle(ititle) { this.title.setTitle(ititle.title); } /** * @return {?} */ share() { alert("浏览器暂不支持分享,请在APP中使用此功能!"); } /** * @return {?} */ userLocation() { alert("浏览器暂不支持定位,请在APP中使用此功能!"); return of(null); } /** * @param {?} bssids * @return {?} */ validateInWifi(bssids) { alert("浏览器暂不支持WIFI验证,请在APP中使用此功能!"); return of(null); } /** * @return {?} */ getWifiMac() { alert("浏览器暂不支持获取MAC地址,请在APP中使用此功能!"); return of("浏览器暂不支持获取MAC地址,请在APP中使用此功能!"); } /** * @param {?} count * @return {?} */ chooseContacts(count) { alert("浏览器暂不支持获取联系人,请在APP中使用此功能!"); return of("浏览器暂不支持获取联系人,请在APP中使用此功能!"); } /** * @param {?} targetUserId * @return {?} */ contactDetails(targetUserId) { alert("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!"); return of("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!"); } /** * @param {?} count * @param {?} sourceType * @return {?} */ uploadImage(count, sourceType) { alert('浏览器暂不支持图片上传,请在APP中使用此功能!'); return undefined; } /** * @param {?} url * @param {?} openType * @param {?} title * @param {?} id * @param {?} type * @return {?} */ openReadWithTimer(url, openType, title, id, type) { alert('浏览器暂不支持读物时间统计,请在APP中使用此功能!'); return undefined; } /** * @param {?} limitMinute * @return {?} */ uploadMovie(limitMinute) { alert('浏览器暂不支持视频上传,请在APP中使用此功能!'); return undefined; } /** * @param {?} url * @param {?} title * @return {?} */ fileBrowser(url, title) { alert('浏览器暂不支持此功能,请在APP中使用此功能!'); return undefined; } /** * @param {?} ticket * @param {?} callback * @return {?} */ startSearchBeacons(ticket, callback) { throw new Error("Method not implemented."); } /** * @param {?} callback * @return {?} */ stopSearchBeacons(callback) { throw new Error("Method not implemented."); } /** * @param {?} callback * @return {?} */ onSearchBeacons(callback) { throw new Error("Method not implemented."); } } Browser.decorators = [ { type: Injectable, args: [{ providedIn: "root" },] } ]; /** @nocollapse */ Browser.ctorParameters = () => [ { type: TokenService }, { type: HttpClient }, { type: UserService }, { type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] }, { type: Title } ]; /** @nocollapse */ Browser.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Browser_Factory() { return new Browser(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT), i0.ɵɵinject(i5.Title)); }, token: Browser, providedIn: "root" }); if (false) { /** * @type {?} * @private */ Browser.prototype.tokenService; /** * @type {?} * @private */ Browser.prototype.http; /** * @type {?} * @private */ Browser.prototype.user; /** * @type {?} * @private */ Browser.prototype.baseclient; /** * @type {?} * @private */ Browser.prototype.title; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJkZXZpY2VzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3RELE9BQU8sRUFBb0IsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBTW5ELE1BQU0sT0FBTyxPQUFRLFNBQVEsVUFBVTs7Ozs7Ozs7SUFDckMsWUFDVSxZQUEwQixFQUMxQixJQUFnQixFQUNoQixJQUFpQixFQUNJLFVBQXNCLEVBQzNDLEtBQVk7UUFFcEIsS0FBSyxFQUFFLENBQUM7UUFOQSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDSSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQzNDLFVBQUssR0FBTCxLQUFLLENBQU87SUFHdEIsQ0FBQzs7OztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxV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QWUsQ0FBQyxRQUE2QjtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7O1lBek1GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQU5RLFlBQVk7WUFaWixVQUFVO1lBYVYsV0FBVzs0Q0FXZixNQUFNLFNBQUMsV0FBVztZQWJkLEtBQUs7Ozs7Ozs7O0lBVVYsK0JBQWtDOzs7OztJQUNsQyx1QkFBd0I7Ozs7O0lBQ3hCLHVCQUF5Qjs7Ozs7SUFDekIsNkJBQW1EOzs7OztJQUNuRCx3QkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRGV2aWNlIH0gZnJvbSBcIi4vYmFzZS5kZXZpY2VcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCQVNFX0NMSUVOVCwgQmFzZUNsaWVudCB9IGZyb20gXCIuLi9jbGllbnQvYmFzZS5jbGllbnRcIjtcclxuaW1wb3J0IHsgSVRpdGxlIH0gZnJvbSBcIi4vbW9kZWwvdGl0bGVcIjtcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IHByZWxvYWRlckZpbmlzaGVkIH0gZnJvbSBcIi4uL2F1dGgvcHJlbG9hZGVyXCI7XHJcbmltcG9ydCB7IEl0b2tlbiB9IGZyb20gXCIuLi9hdXRoL2l0b2tlblwiO1xyXG5pbXBvcnQgeyBJV2luZG93IH0gZnJvbSBcIi4vbW9kZWwvd2luZG93XCI7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkJhciB9IGZyb20gXCIuL21vZGVsL25hdmlnYXRpb25iYXJcIjtcclxuaW1wb3J0IHsgVXNlckxvY2F0aW9uIH0gZnJvbSBcIi4vbW9kZWwvbG9jYXRpb25cIjtcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gXCIuLi91c2VyL3VzZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJVXNlciB9IGZyb20gXCIuLi91c2VyL3VzZXIuaW50ZXJmYWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyb3dzZXIgZXh0ZW5kcyBCYXNlRGV2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHVzZXI6IFVzZXJTZXJ2aWNlLFxyXG4gICAgQEluamVjdChCQVNFX0NMSUVOVCkgcHJpdmF0ZSBiYXNlY2xpZW50OiBCYXNlQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB0aXRsZTogVGl0bGVcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBhdXRoKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmJyb3dzZXIgJiYgdGhpcy5iYXNlY2xpZW50LmJyb3dzZXIuYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyDlpoLmnpzmmK/mnKzlnLDlvIDlj5HphY3nva7kuobotKblj7flr4bnoIFcclxuICAgIGlmICh0aGlzLmJhc2VjbGllbnQuZGV2ICYmIHRoaXMuYmFzZWNsaWVudC5kZXYudXNlcm5hbWUgJiYgdGhpcy5iYXNlY2xpZW50LmRldi5wYXNzd29yZCkge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdXRoQnlDb25maWd1cmVkVXNlclBhc3MoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyLnNldCh7IC4uLnJlc3BvbnNlLnByaW5jaXBhbCwgdGVuYW50SWQ6IHJlc3BvbnNlLnRlbmFudElkIH0pO1xyXG4gICAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8g6LWwY2Fz6K6k6K+B5rWB56iLXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuYXV0aEJ5Q2FzKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgICAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIuc2V0KHsgLi4ucmVzcG9uc2UucHJpbmNpcGFsLCB0ZW5hbnRJZDogcmVzcG9uc2UudGVuYW50SWQgfSk7XHJcbiAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGF1dGhCeUNhcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHVybCA9IGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheSArICcvY2FzLXByb3h5L2FwcC92YWxpZGF0ZV9mdWxsP2NhbGxiYWNrPScgKyB1cmwgKyAnJnRpbWVzdGFtcD0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHN3aXRjaCAocmVzLmVycmNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAyMDAwOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHRva2VuOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICB0b2tlbi50b2tlblR5cGUgPSByZXMuZGF0YS50b2tlbl90eXBlO1xyXG4gICAgICAgICAgICAgIHRva2VuLmFjY2Vzc1Rva2VuID0gcmVzLmRhdGEuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICAgIHRva2VuLnNjb3BlID0gcmVzLmRhdGEuc2NvcGU7XHJcbiAgICAgICAgICAgICAgdG9rZW4udG9rZW5EYXRlTGluZSA9IHJlcy5kYXRhLmV4cGlyZXNfaW47XHJcbiAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyMDAxOlxyXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVzLm1zZztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyMDAyOlxyXG4gICAgICAgICAgICAgIGFsZXJ0KHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyMDAzOlxyXG4gICAgICAgICAgICBjYXNlIDUwMDA6XHJcbiAgICAgICAgICAgIGNhc2UgNTAwMTpcclxuICAgICAgICAgICAgICBhbGVydChyZXMubXNnKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdXRoQnlDb25maWd1cmVkVXNlclBhc3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBmb3JtOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybS5zZXQoJ3VzZXJuYW1lJywgdGhpcy5iYXNlY2xpZW50LmRldi51c2VybmFtZSk7XHJcbiAgICBmb3JtLnNldCgncGFzc3dvcmQnLCB0aGlzLmJhc2VjbGllbnQuZGV2LnBhc3N3b3JkKTtcclxuICAgIGZvcm0uc2V0KCdncmFudF90eXBlJywgJ3Bhc3N3b3JkJyk7XHJcbiAgICBmb3JtLnNldCgnY2xpZW50X2lkJywgJ3dlYmFwcCcpO1xyXG4gICAgZm9ybS5zZXQoJ3Njb3BlJywgJ3dlYmFwcCcpO1xyXG4gICAgZm9ybS5zZXQoJ2NsaWVudF9zZWNyZXQnLCAnMTIzNDU2Jyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC9vYXV0aC90b2tlbmAsIGZvcm0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG9rZW46IGFueSA9IHt9O1xyXG4gICAgICAgICAgdG9rZW4udG9rZW5UeXBlID0gcmVzcG9uc2UudG9rZW5fdHlwZTtcclxuICAgICAgICAgIHRva2VuLmFjY2Vzc1Rva2VuID0gcmVzcG9uc2UuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgdG9rZW4uc2NvcGUgPSByZXNwb25zZS5zY29wZTtcclxuICAgICAgICAgIHRva2VuLnRva2VuRGF0ZUxpbmUgPSByZXNwb25zZS5leHBpcmVzX2luO1xyXG4gICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuKCk6IEl0b2tlbiB7XHJcbiAgICBjb25zdCBpdG9rZW46IEl0b2tlbiA9IHtcclxuICAgICAgYWNjZXNzVG9rZW46IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpLmFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGU6IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpLnRva2VuVHlwZSxcclxuICAgICAgdG9rZW5EYXRhTGluZTogdGhpcy50b2tlblNlcnZpY2UuZ2V0KCkudG9rZW5EYXRlTGluZSxcclxuICAgICAgc2NvcGU6IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpLnNjb3BlXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGl0b2tlbjtcclxuICB9XHJcblxyXG4gIGdldFVzZXIoKTogSVVzZXIge1xyXG4gICAgY29uc3QgaXVzZXI6IElVc2VyID0gT2JqZWN0LmNyZWF0ZSh7XHJcbiAgICAgIGFjY291bnQ6IHRoaXMudXNlci5nZXQoKS51c2VybmFtZSxcclxuICAgICAgdXNlck5hbWU6IHRoaXMudXNlci5nZXQoKS51c2VybmFtZSxcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMudXNlci5nZXQoKS5wYXNzd29yZCxcclxuICAgICAgdXNlcklkOiB0aGlzLnVzZXIuZ2V0KCkuaWQsXHJcbiAgICAgIHJlYWxOYW1lOiB0aGlzLnVzZXIuZ2V0KCkucmVhbG5hbWUsXHJcbiAgICAgIGRlcHRJZDogdGhpcy51c2VyLmdldCgpLmRlcHRJZCxcclxuICAgICAgZGVwdE5hbWU6IHRoaXMudXNlci5nZXQoKS5kZXB0TmFtZSxcclxuICAgICAgdXNlclR5cGU6IHRoaXMudXNlci5nZXQoKS51c2VyVHlwZVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXVzZXI7XHJcbiAgfVxyXG5cclxuICBvcGVuV2luZG93KGl3aW5kb3c6IElXaW5kb3cpOiB2b2lkIHtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaXdpbmRvdy51cmw7XHJcbiAgfVxyXG5cclxuICBzY2FuQ29kZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHmiavnoIEs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihcIua1j+iniOWZqOaaguS4jeaUr+aMgeaJq+eggSzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgc2V0TmF2aWdhdGlvbkJhcihuYXZpZ2F0aW9uQmFyOiBOYXZpZ2F0aW9uQmFyKTogdm9pZCB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeaUvue9ruaMiemSrizor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGl0bGUoaXRpdGxlOiBJVGl0bGUpOiB2b2lkIHtcclxuICAgIHRoaXMudGl0bGUuc2V0VGl0bGUoaXRpdGxlLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNoYXJlKCk6IHZvaWQge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHliIbkuqss6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIHVzZXJMb2NhdGlvbigpOiBPYnNlcnZhYmxlPFVzZXJMb2NhdGlvbj4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHlrprkvY0s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlSW5XaWZpKGJzc2lkczogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIFXSUZJ6aqM6K+BLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgfVxyXG5cclxuICBnZXRXaWZpTWFjKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeiOt+WPlk1BQ+WcsOWdgCzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIG9mKFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6I635Y+WTUFD5Zyw5Z2ALOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgfVxyXG5cclxuICBjaG9vc2VDb250YWN0cyhjb3VudDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6I635Y+W6IGU57O75Lq6LOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHojrflj5bogZTns7vkuros6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIGNvbnRhY3REZXRhaWxzKHRhcmdldFVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5p+l6K+i6IGU57O75Lq66K+m57uG5L+h5oGvLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHmn6Xor6LogZTns7vkurror6bnu4bkv6Hmga8s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZEltYWdlKGNvdW50OiBudW1iZXIsIHNvdXJjZVR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydCgn5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5Zu+54mH5LiK5LygLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSEnKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBvcGVuUmVhZFdpdGhUaW1lcih1cmw6IGFueSwgb3BlblR5cGU6IGFueSwgdGl0bGU6IGFueSwgaWQ6IGFueSwgdHlwZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KCfmtY/op4jlmajmmoLkuI3mlK/mjIHor7vnianml7bpl7Tnu5/orqEs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IScpO1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgdXBsb2FkTW92aWUobGltaXRNaW51dGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydCgn5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6KeG6aKR5LiK5LygLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSEnKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGZpbGVCcm93c2VyKHVybDogc3RyaW5nLHRpdGxlOnN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydCgn5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5q2k5Yqf6IO9LOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSEnKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHN0YXJ0U2VhcmNoQmVhY29ucyh0aWNrZXQ6IHN0cmluZywgY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBzdG9wU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIG9uU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG59XHJcbiJdfQ==