ng-easycommerce-v18 0.6.25 → 0.6.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/esm2022/lib/ec-services/auth.service.mjs +17 -1
- package/esm2022/lib/ec-services/cart.service.mjs +131 -59
- package/esm2022/lib/ec-services/local-storage.service.mjs +2 -2
- package/esm2022/lib/interceptors/auth.interceptor.mjs +2 -1
- package/fesm2022/ng-easycommerce-v18.mjs +148 -59
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-services/auth.service.d.ts +5 -0
- package/lib/ec-services/cart.service.d.ts +26 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# Version 0.6.26
|
|
2
|
+
- Carrito: se agrega `cart_owner` para identificar el carrito activo por sesión y evitar reutilizar `cart_token` entre cuentas distintas.
|
|
3
|
+
- Carrito: al arrancar la app se hidrata el estado persistido y se decide si corresponde recuperar el carrito anónimo o el carrito del usuario autenticado.
|
|
4
|
+
- Carrito: al hacer login se preserva el carrito invitado solo cuando realmente pertenece a la sesión anónima actual; si no, se consulta el carrito del usuario.
|
|
5
|
+
- Carrito: al cerrar sesión se limpia el estado completo del carrito, incluyendo `cart_token`, `cart_owner`, items, cupones, promociones y balance.
|
|
6
|
+
- `auth.service` y `auth.interceptor`: se elimina `cart_owner` junto con el resto de credenciales para evitar restos de sesión al desloguear.
|
|
7
|
+
- `LocalStorageService`: `CART_OWNER` queda marcado como clave local-only para que no se persista como cookie.
|
|
8
|
+
- Tests: se agrega cobertura para sesión autenticada, carrito anónimo con items, carrito vacío y limpieza en logout.
|
|
1
9
|
# Version 0.6.25
|
|
2
10
|
- Checkout legacy (envío): se robusteció el render de contratos para tolerar `contracts` vacíos/undefined y evitar errores al iterar o seleccionar opciones.
|
|
3
11
|
- `shipment-ec`: la selección de contrato ahora es segura (guards nulos) y se mantiene el estado `selected` sólo cuando el contrato existe.
|
|
@@ -263,6 +263,7 @@ export class AuthService {
|
|
|
263
263
|
this._authStorage.setAuthToken(null);
|
|
264
264
|
this._localStorage.removeItem(this.REFRESH_TOKEN);
|
|
265
265
|
this._localStorage.removeItem('cart_token');
|
|
266
|
+
this._localStorage.removeItem('cart_owner');
|
|
266
267
|
this._localStorage.removeItem(this.MAIL);
|
|
267
268
|
this._localStorage.removeItem(this.CHANNEL);
|
|
268
269
|
this._localStorage.removeItem(this.CHANNELSELLER);
|
|
@@ -435,6 +436,21 @@ export class AuthService {
|
|
|
435
436
|
return null;
|
|
436
437
|
}
|
|
437
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* Devuelve la llave estable que identifica el carrito activo de la sesión actual.
|
|
441
|
+
* Se usa para evitar reusar `cart_token` de otro usuario/cuenta.
|
|
442
|
+
*/
|
|
443
|
+
getCartSessionOwnerKey() {
|
|
444
|
+
const customer = this.getCustomer();
|
|
445
|
+
if (customer?.id != null) {
|
|
446
|
+
return `customer:${customer.id}`;
|
|
447
|
+
}
|
|
448
|
+
const user = this.getUserProfileSnapshot();
|
|
449
|
+
if (user?.username) {
|
|
450
|
+
return `user:${user.username.toLowerCase()}`;
|
|
451
|
+
}
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
438
454
|
/**
|
|
439
455
|
* Devuelve el usuario actual logueado.
|
|
440
456
|
* @returns
|
|
@@ -551,4 +567,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
551
567
|
providedIn: 'root'
|
|
552
568
|
}]
|
|
553
569
|
}], ctorParameters: () => [] });
|
|
554
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUNwRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ2YsYUFBYSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNoRSxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsR0FBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEUsVUFBVSxHQUF3QixNQUFNLENB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QUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlclJvbGVUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vYXV0aC5zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG4vKipcbiAqIFNlcnZpY2lvIGRlIGF1dGVudGlmaWNhY2nDs24gZGVsIHVzdWFyaW8gZW4gbGEgcGxhdGFmb3JtYS5cbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuXHRwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSlcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25zdGFudHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfYXBpQ29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xuXHRwcml2YXRlIF9hdXRoU3RvcmFnZTogQXV0aFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KEF1dGhTdG9yYWdlU2VydmljZSk7XG5cblx0Ly8gQ29udGFudGVzIHBhcmEgZWwgc3RvcmFnZS5cblx0cHJpdmF0ZSByZWFkb25seSBKV1RfVE9LRU4gPSAnSldUX1RPS0VOJ1xuXHRwcml2YXRlIHJlYWRvbmx5IFJFRlJFU0hfVE9LRU4gPSAnUkVGUkVTSF9UT0tFTidcblx0cHJpdmF0ZSByZWFkb25seSBFWFBJUkFURVNfSU4gPSAnRVhQSVJBVEVTX0lOJ1xuXHRwcml2YXRlIHJlYWRvbmx5IFVTRVIgPSAnVVNFUidcblx0cHJpdmF0ZSByZWFkb25seSBNQUlMID0gJ21haWwnXG5cdHByaXZhdGUgcmVhZG9ubHkgTE9DQUxFID0gJ0xPQ0FMRSdcblx0cHJpdmF0ZSByZWFkb25seSBDSEFOTkVMID0gJ0NIQU5ORUwnXG5cdHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NRVIgPSAnQ1VTVE9NRVInXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTFNFTExFUiA9ICdDSEFOTkVMU0VMTEVSJ1xuXG5cdHByaXZhdGUgY2hhbm5lbHNVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuXHRwdWJsaWMgY2hhbm5lbHMkID0gdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cdHByaXZhdGUgX2NoYW5uZWwkID0gdGhpcy5fY2hhbm5lbFNlcnZpY2UuZ2V0Q2hhbm5lbCgpXG5cdHByaXZhdGUgX3VzZXJJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXIgfCBudWxsPihudWxsKVxuXHRwcml2YXRlIF9sb2dnZWRJblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXHRwdWJsaWMgbG9nZ2VkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fbG9nZ2VkSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9sb2dnaW5nSW5TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHVibGljIGxvZ2dpbmdJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9sb2dnaW5nSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9jdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnkgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55IHwgbnVsbD4obnVsbCk7XG5cdHB1YmxpYyBjdXN0b21lciQ6IE9ic2VydmFibGU8YW55IHwgbnVsbD4gPSB0aGlzLl9jdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblx0LyoqXG5cdCAqIFBhcmEgaW5kaWNhciBzaSB1biBjYW5hbCBjYW1iaW8uXG5cdCAqL1xuXHRwcml2YXRlIF9hY3RpdmVDaGFubmVsQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBHdWFyZGEgbG9zIGRhdG9zIGRlbCB1c3VhcmlvXG5cdCAqL1xuXHRwcml2YXRlIF91c2VyOiBVc2VyIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgX2N1c3RvbWVyOiBhbnkgPSBudWxsO1xuXHQvKipcblx0ICogR3VhcmRhIGxvcyBkYXRvcyBkZWwgY2FuYWxcblx0ICovXG5cdHB1YmxpYyBjaGFubmVsOiBhbnkgPSBbXVxuXHRwdWJsaWMgY2hhbm5lbHM6IGFueVtdID0gW11cblx0LyoqXG5cdCAqIFV0aWxpemFkbyBwYXJhIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHRpZW5lIHF1ZSByZWRpcmVjY2lvbmFyXG5cdCAqIGxhIHBhZ2luYSB0cmFzIHVuIGV2ZW50by5cblx0ICovXG5cdHByaXZhdGUgX2hvbWVSZXNvbHZlcjogYW55O1xuXHQvKipcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB0b2tlbiBkZSB1c3VhcmlvIHVuYSB2ZXogbG9ndWVhZG9cblx0ICovXG5cdHByaXZhdGUgX3Rva2VuU2lnbmFsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXHQvKipcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB1c3VhcmlvXG5cdCAqL1xuXHRwcml2YXRlIF91c2VyU2lnbmFsID0gc2lnbmFsPFVzZXIgfCBudWxsPihudWxsKTtcblx0Ly9BUElzXG5cdHByaXZhdGUgc2hvcEFwaTogc3RyaW5nID0gdGhpcy5fYXBpQ29uc3RzLlNIT1BfQVBJX1VSTFxuXHRwcml2YXRlIGNoYW5uZWxBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMXG5cdHByaXZhdGUgdG9rZW5BcGkoKSB7IHJldHVybiB0aGlzLnNob3BBcGkgKyAnbG9naW5fY2hlY2snIH1cblx0cHJpdmF0ZSByZWNvdmVyUGFzc3dvcmRBcGkoKSB7IHJldHVybiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3JlcXVlc3QtcGFzc3dvcmQtcmVzZXRgIH1cblx0cHJpdmF0ZSByZXNldFBhc3N3b3JkQXBpID0gKHRva2VuOiBzdHJpbmcpID0+IGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcGFzc3dvcmQtcmVzZXQvJHt0b2tlbn1gO1xuXHRwcml2YXRlIGNvbmZpcm1BY2NvdW50QXBpKHRva2VuOiBzdHJpbmcpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vdmVyaWZ5LWFjY291bnQ/dG9rZW49JHt0b2tlbn1gIH1cblx0cHJpdmF0ZSByZWdpc3RlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXJgIH1cblx0cHJpdmF0ZSByZWdpc3Rlcldob2xlc2FsZXJBcGkoKSB7IHJldHVybiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3JlZ2lzdGVyLXdob2xlc2FsZXJgIH1cblx0cHJvdGVjdGVkIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcblxuXHRwdWJsaWMgd2luZG93PzogV2luZG93O1xuXHRwdWJsaWMgbG9jYWxTdG9yYWdlPzogU3RvcmFnZTtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcblx0XHRcdHRoaXMud2luZG93ID0gd2luZG93XG5cdFx0XHR0aGlzLmxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcblx0XHR9XG5cdFx0dGhpcy5sb2FkVG9rZW5Gcm9tU3RvcmFnZSgpO1xuXHRcdHRoaXMuX2N1c3RvbWVyU3ViamVjdC5uZXh0KHRoaXMuZ2V0Q3VzdG9tZXIoKSk7XG5cdFx0dGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLl9sb2dnZWRJblN1YmplY3QubmV4dCh0cnVlKTtcblx0fVxuXHQvKipcblx0ICogTG9ndWVhIGFsIHVzdWFyaW8gZW4gbGEgYXBsaWNhY2nDs24uXG5cdCAqIEBwYXJhbSB1c2VyIGRhdG9zIGRlbCB1c3VhcmlvXG5cdCAqIEBwYXJhbSB3aXRoUm9sZXMgcm9sZXMgZGVsIHVzdWFyaW9cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRsb2dpbih1c2VyOiB7IHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcgfSwgd2l0aFJvbGVzOiBVc2VyUm9sZVR5cGVbXSA9IFtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcblx0XHR0aGlzLl9jaGFubmVsJC5zdWJzY3JpYmUoY2ggPT4gdGhpcy5jaGFubmVsID0gY2gpO1xuXHRcdHRoaXMuY2hhbm5lbHMkLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xuXHRcdHRoaXMuX2xvZ2dpbmdJblN1YmplY3QubmV4dCh0cnVlKTtcblx0XHR1c2VyID0geyAuLi51c2VyLCAuLi50aGlzLmxvZ2luRXh0cmFEYXRhKCkgfVxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy50b2tlbkFwaSgpLCB1c2VyKS5waXBlKFxuXHRcdFx0bWFwKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5jaGFubmVsQWNjZXNzUGVybWlzc2lvbih7IC4uLnVzZXIsIC4uLnJlcyB9KSAmJiB0aGlzLmlzQWxsb3dlZFJvbGUod2l0aFJvbGVzLCByZXMudHlwZSkpIHtcblx0XHRcdFx0XHR0aGlzLmRvTG9naW5Vc2VyKHsgLi4udXNlciwgLi4ucmVzIH0pO1xuXHRcdFx0XHRcdHJldHVybiAnb2snO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAnZXJyb3InO1xuXHRcdFx0fSksXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuX2xvZ2dpbmdJblN1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTsgLy8gPC0tIFByb3BhZ2EgZWwgZXJyb3IgcmVhbFxuXHRcdFx0fSlcblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIENvbnRyb2xhIHF1ZSBlbCB1c3VhcmlvIGxvZ3VlYWRvIHRlbmdhIHBlcm1pc29zIFxuXHQgKiBwYXJhIGVsIGNhbmFsIGFjdHVhbCBkZSBsYSBhcGxpY2FjacOzbi5cblx0ICogQHBhcmFtIHJlcyBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGNoYW5uZWxBY2Nlc3NQZXJtaXNzaW9uKHJlczogYW55KSB7XG5cdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQoW10pO1xuXG5cdFx0LyogTm8gYXV0aG9yaXplZCBjaGFubmVscyAqL1xuXHRcdGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA9PSAwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cdFx0LyogU29tZSBhdXRob3JpemVkIGNoYW5uZWwocykgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuXHRcdGlmIChyZXMuY2hhbm5lbHMuZmluZCgodXNlcmNoYW5uZWw6IGFueSkgPT4gdXNlcmNoYW5uZWwuY29kZSA9PT0gdGhpcy5jaGFubmVsLmNvZGUpKSB7XG5cdFx0XHQvKiBNdWx0aXBsZSBhdXRob3JpemVkIGNoYW5uZWxzIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cblx0XHRcdGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA+IDEgJiYgdGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSlcblx0XHRcdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0LyogT25lIGF1dGhvcml6ZWQgY2hhbm5lbCBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuXHRcdGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA9PSAxICYmIHRoaXMuX2FjdGl2ZUNoYW5uZWxDaGFuZ2UpIHtcblx0XHRcdGRlbGV0ZSByZXMucGFzc3dvcmRcblx0XHRcdHRoaXMuY2hhbm5lbEFjY2VzcyhyZXMuY2hhbm5lbHNbMF0sIHJlcylcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cblx0XHRpZiAodGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSkge1xuXHRcdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblx0LyoqXG5cdCAqIENvbnRyb2xhIGVsIGFjY2VzbyBhbCBjYW5hbCwgZGUgc2VyIG90cm8gbnVldm8gY2FtYmlhIGxvcyB2YWxvcmVzLlxuXHQgKiBAcGFyYW0gY2hhbm5lbCBcblx0ICogQHBhcmFtIHVzZXIgXG5cdCAqL1xuXHRjaGFubmVsQWNjZXNzKGNoYW5uZWw6IGFueSwgdXNlciA9IG51bGwpIHtcblx0XHRpZiAodGhpcy53aW5kb3c/LmxvY2F0aW9uLmhvc3RuYW1lICE9IGNoYW5uZWwuaG9zdG5hbWUpIHtcblx0XHRcdGxldCBlbmNvZGVkID0gYnRvYShKU09OLnN0cmluZ2lmeSh1c2VyICE9IG51bGwgPyB1c2VyIDogdGhpcy5fdXNlcikpXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVwbGFjZShgJHt0aGlzLndpbmRvdz8ubG9jYXRpb24ucHJvdG9jb2x9Ly8ke2NoYW5uZWwuaG9zdG5hbWV9L2F1dGgvcmVkaXJlY3QvJHtlbmNvZGVkfWApXG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKGNoYW5uZWwpXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVsb2FkKClcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIENvbnRyb2xhIHF1ZSBlbCByb2wgZGVsIHVzdWFyaW8gc2VhIHVuIHJvbCBwZXJtaXRpZG8gcG9yIGxhIGFwbGljYWNpw7NuLlxuXHQgKiBAcGFyYW0gYWxsb3dlZFJvbGVzIHJvbGVzIHF1ZSBwZXJtaXRlIGxhIGFwbGljYWNpw7NuLlxuXHQgKiBAcGFyYW0gcm9sZSByb2wgZGVsIHVzdWFyaW9zXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBpc0FsbG93ZWRSb2xlKGFsbG93ZWRSb2xlczogVXNlclJvbGVUeXBlW10sIHJvbGU6IHN0cmluZykge1xuXHRcdHJldHVybiBhbGxvd2VkUm9sZXMubGVuZ3RoXG5cdFx0XHQ/IGFsbG93ZWRSb2xlcy5pbmNsdWRlcyhyb2xlIGFzIFVzZXJSb2xlVHlwZSlcblx0XHRcdDogdHJ1ZVxuXHR9XG5cdC8qKlxuXHQgKiBUcmFzIHVuIGxvZ3VlbyBleGl0b3NvLCBndWFyZGEgbG9zIGRhdG9zIG5lY2VzYXJpb3MgZW4gZWwgc3RvcmFnZSB5IGRlbcOhc1xuXHQgKiBjb25maWd1cmFjaW9uZXMgbmVjZXNhcmlhcy5cblx0ICogQHBhcmFtIHRva2VucyBcblx0ICovXG5cdHByaXZhdGUgZG9Mb2dpblVzZXIodG9rZW5zOiBhbnkpIHtcblx0XHR0aGlzLl91c2VyID0gbmV3IFVzZXIoKVxuXHRcdHRoaXMuX3VzZXIuaW5pdGlsaXplZCh0b2tlbnMpXG5cdFx0dGhpcy5fY3VzdG9tZXIgPSBudWxsO1xuXHRcdHRoaXMuX2N1c3RvbWVyU3ViamVjdC5uZXh0KG51bGwpO1xuXG5cdFx0dGhpcy5mb3JjZUNoYW5uZWxzRm9yU2VsbGVyKHRva2Vucylcblx0XHQvL0NoYW5uZWxcblx0XHRjb25zdCB1c2VySnNvbmlmeSA9IHRoaXMuX3VzZXIuanNvbmlmeSgpXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5VU0VSLCBKU09OLnN0cmluZ2lmeSh1c2VySnNvbmlmeSkpXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5SRUZSRVNIX1RPS0VOLCBtb21lbnQodG9rZW5zLmV4cGlyZV9pbikuYWRkKDEsICdoJykuZm9ybWF0KCkpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuSldUX1RPS0VOLCB0b2tlbnMudG9rZW4pO1xuXHRcdHRoaXMuX2F1dGhTdG9yYWdlLnNldEF1dGhUb2tlbih0b2tlbnMudG9rZW4pXG5cdFx0dGhpcy5fdG9rZW5TaWduYWwuc2V0KHRva2Vucy50b2tlbik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5NQUlMLCB0b2tlbnMudXNlcm5hbWUpO1xuXHRcdC8vT2JzZXJ2YWJsZXNcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XG5cdFx0dGhpcy5fbG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0fVxuXHQvKipcblx0ICogQ2FtYmlhIGxhIGZ1bmNpb24gcXVlIHNlIGVuY2FyZ2EgZGUgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgcmVkaXJpZ2UgZWwgZnJvbnRlbmRcblx0ICogdHJhcyB1bmEgYWNjacOzblxuXHQgKiBAcGFyYW0gcmVzb2x2ZXJGdW5jdGlvbiBcblx0ICovXG5cdHB1YmxpYyBzZXRIb21lUmVzb2x2ZXIocmVzb2x2ZXJGdW5jdGlvbjogYW55KSB7IHRoaXMuX2hvbWVSZXNvbHZlciA9IHJlc29sdmVyRnVuY3Rpb24gfVxuXHQvKipcblx0ICogT2J0aWVuZSBsYSBmdW5jaW9uIHF1ZSBzZSBlbmNhcmdhIGRlIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHJlZGlyaWdlIGVsIGZyb250ZW5kLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRIb21lUmVzb2x2ZXIoKSB7IHJldHVybiB0aGlzLl9ob21lUmVzb2x2ZXIgfVxuXHQvKipcblx0ICogRWplY3V0YSBlbCByZXNvbHZlciBkZSBob21lIGNvbmZpZ3VyYWRvIHBvciBlbCBmcm9udGVuZCBvIHVzYSB1biBmYWxsYmFjay5cblx0ICogU2UgdXNhIHRhbnRvIGVuIGxvZ2luIGNvbW8gZW4gbG9nb3V0IHBhcmEgZXZpdGFyIGhhcmRjb2RlcyBwb3IgY29tcG9uZW50ZS5cblx0ICovXG5cdHB1YmxpYyByZXNvbHZlSG9tZU5hdmlnYXRpb24oZmFsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvbHZlckZ1bmN0aW9uID0gdGhpcy5nZXRIb21lUmVzb2x2ZXIoKTtcblx0XHRyZXNvbHZlckZ1bmN0aW9uXG5cdFx0XHQ/IHJlc29sdmVyRnVuY3Rpb24oKVxuXHRcdFx0OiBmYWxsYmFjaygpO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGVsIHRva2VuIGRlbCBzdG9yYWdlIHkgbG8gZ3VhcmRhIGVuIGxhIHNpZ25hbC5cblx0ICovXG5cdHB1YmxpYyBsb2FkVG9rZW5Gcm9tU3RvcmFnZSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuSldUX1RPS0VOKTtcblx0XHRpZiAodG9rZW4pIHtcblx0XHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldCh0b2tlbik7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEZXNsb2d1ZWEgYWwgdXN1YXJpby5cblx0ICovXG5cdHB1YmxpYyBsb2dvdXQoKSB7XG5cdFx0dGhpcy5kb0xvZ291dFVzZXIoKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSBzaSBoYXkgdW4gdXN1YXJpbyBsb2d1ZWFkbyBvIG5vLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cdFx0aWYgKCF0b2tlbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmdldEN1cnJlbnRVc2VyQXNVc2VyKCk7XG5cdFx0cmV0dXJuIHRoaXMuX3VzZXIgIT0gbnVsbDtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSBlbCB0b2tlbiBkZSB1c3VhcmlvXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldFRva2VuKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Rva2VuU2lnbmFsKCk7XG5cdH1cblx0LyoqXG5cdCAqIExpbXBpYSBlbCBzdG9yYWdlIHkgbGFzIGNvbmZpZ3VyYWNpb25lcyBpbnRlcm5hc1xuXHQgKi9cblx0cHVibGljIGRvTG9nb3V0VXNlcigpIHtcblx0XHR0aGlzLl91c2VyID0gbnVsbFxuXHRcdHRoaXMuX2N1c3RvbWVyID0gbnVsbDtcblx0XHR0aGlzLl9jdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlVTRVIpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRVhQSVJBVEVTX0lOKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XG5cdFx0dGhpcy5fYXV0aFN0b3JhZ2Uuc2V0QXV0aFRva2VuKG51bGwpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuUkVGUkVTSF9UT0tFTik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLk1BSUwpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuQ0hBTk5FTCk7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkxPQ0FMRSk7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DVVNUT01FUik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ01BU1RFUl9DSEFOTkVMJyk7XG5cdFx0dGhpcy5fbG9nZ2VkSW5TdWJqZWN0Lm5leHQoZmFsc2UpO1xuXHRcdHRoaXMuX3VzZXJJblN1YmplY3QubmV4dCh0aGlzLl91c2VyKTtcblx0XHR0aGlzLmNoYW5uZWxzVXNlclN1YmplY3QubmV4dChbXSlcblx0XHR0aGlzLl90b2tlblNpZ25hbC5zZXQobnVsbClcblx0fVxuXHQvKipcblx0ICogRGV2dWVsdmUgYHRydWVgc2kgZWwgdG9rZW4gZXhwaXJvLCBgZmFsc2VgIGNhc28gY29udHJhcmlvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgaXNUb2tlbkV4cGlyZWQoKSB7XG5cdFx0Y29uc3QgZmVjaGFfZXhwaXJhY2lvbiA9IHRoaXMuZ2V0RXhwaXJhdGVzQXQoKTtcblx0XHRjb25zdCByZXN1bHQgPSBtb21lbnQoKSA+PSBtb21lbnQoZmVjaGFfZXhwaXJhY2lvbik7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSBsYSBmZWNoYSBkZSBleHBpcmFjacOzbiBkZWwgdG9rZW4uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRFeHBpcmF0ZXNBdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4pO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGFsIHVzdWFyaW8gYWN0dWFsIHkgbG8gY29udmllcnRlIGVuIHVuYSBpbnN0YW5jaWEgZGUgYFVzZXJgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDdXJyZW50VXNlckFzVXNlcigpOiBVc2VyIHwgbnVsbCB7XG5cdFx0dGhpcy5fdXNlciA9IG5ldyBVc2VyKCk7XG5cdFx0Y29uc3QgbG9hZGVkID0gdGhpcy5sb2FkVXNlckZyb21TdG9yYWdlKCk7XG5cdFx0aWYgKCFsb2FkZWQpIHtcblx0XHRcdHRoaXMuX3VzZXIgPSBudWxsO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0aGlzLl91c2VyPy5jaGFubmVscy5maW5kKCh1c2VyY2hhbm5lbDogYW55KSA9PiB1c2VyY2hhbm5lbD8uY29kZSA9PT0gdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdXNlcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2kgaGF5IGNsaWVudGUgYWN0aXZvIChpbXBlcnNvbmFjacOzbiBkZSBzZWxsZXIpLCBlbCBjYW5hbCBwdWVkZSBzZXJcblx0XHRcdC8vIGVsIGRlbCBjbGllbnRlIHkgbm8gbmVjZXNhcmlhbWVudGUgdW5vIGRlbCB2ZW5kZWRvci5cblx0XHRcdC8vIEVuIGVzZSBjYXNvIG5vIGludmFsaWRhbW9zIHNlc2nDs24gcG9yIG1pc21hdGNoIGRlIGNhbmFsLlxuXHRcdFx0aWYgKHRoaXMuZ2V0Q3VzdG9tZXIoKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fdXNlcjtcblx0XHRcdH1cblx0XHRcdHRoaXMubG9nb3V0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl91c2VyO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGVsIHVzdWFyaW8gZGVsIHN0b3JhZ2UuXG5cdCAqIEBwYXJhbSBrZXkgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBsb2FkVXNlckZyb21TdG9yYWdlKGtleSA9IHRoaXMuVVNFUikge1xuXHRcdGNvbnN0IHN0b3JlZCA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cdFx0aWYgKHN0b3JlZCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgdXNlck9iaiA9IEpTT04ucGFyc2Uoc3RvcmVkKTtcblx0XHRcdFx0dGhpcy5fdXNlciA9IE9iamVjdC5hc3NpZ24obmV3IFVzZXIoKSwgdXNlck9iaik7IC8vIDwtLSBBc8OtIHJlY3VwZXJhcyBsb3MgbcOpdG9kb3MgZGUgVXNlclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cblx0fVxuXG5cdHBhc3N3b3JkUmVzZXQgPSAobmV3X3Bhc3N3b3JkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHtcblx0XHRcblx0XHRjb25zdCBkYXRhID0geyBwYXNzd29yZDogeyBmaXJzdDogbmV3X3Bhc3N3b3JkLCBzZWNvbmQ6IG5ld19wYXNzd29yZCB9IH07XG5cdFx0Y29uc29sZS5sb2codGhpcy5yZXNldFBhc3N3b3JkQXBpKHRva2VuKSwgZGF0YSlcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy5yZXNldFBhc3N3b3JkQXBpKHRva2VuKSwgZGF0YSk7XG5cdH1cblx0LyoqXG5cdCAqIEVudmlhIGxhIHNvbGljaXR1ZCBwYXJhIGNhbWJpYXIgbGEgY29udHJhc2XDsWEuXG5cdCAqIEBwYXJhbSBlbWFpbCBlbWFpbCBkZWwgc29saWNpdGFudGUuXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cmVjb3ZlclBhc3N3b3JkKGVtYWlsOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wdXQodGhpcy5yZWNvdmVyUGFzc3dvcmRBcGkoKSwgeyBlbWFpbCB9KTtcblx0fVxuXHQvKipcblx0ICogUGFyYSBjb25maXJtYXIgZWwgcmVnaXN0cm8gZGUgdXN1YXJpby5cblx0ICogQHBhcmFtIHRva2VuIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGNvbmZpcm1BY2NvdW50KHRva2VuOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5nZXQodGhpcy5jb25maXJtQWNjb3VudEFwaSh0b2tlbikpO1xuXHR9XG5cdC8qKlxuXHQgKiBQYXJhIHJlZ2lzdHJhciBhIHVuIHVzdWFyaW8gY29tw7puXG5cdCAqIEBwYXJhbSBkYXRhIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHNpbmdVcChkYXRhOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMucmVnaXN0ZXJBcGkoKSwgZGF0YSk7XG5cdH1cblx0LyoqXG5cdCAqIFBhcmEgcmVnaXN0cmFyIGEgdW4gdXN1YXJpbyBtYXlvcmlzdGEuXG5cdCAqIEBwYXJhbSBkYXRhIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHNpZ25VcFdob2xlc2FsZXIoZGF0YTogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ucG9zdCh0aGlzLnJlZ2lzdGVyV2hvbGVzYWxlckFwaSgpLCBkYXRhKTtcblx0fVxuXHQvKipcblx0ICogQ2hlcXVlYSBzaSB1biB1c3VhcmlvIGVzdGEgaGFiaWxpdGFkbyBhIGNvbXByYXIgbyBuby5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHQvLyBpc0FibGVUb0J1eSgpOmJvb2xlYW4ge1xuXHQvLyBcdGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRVc2VyUHJvZmlsZUFzVXNlcigpIGFzIFVzZXI7XG5cdC8vIFx0Y29uc3QgaXNTZWxsZXIgPSBjdXJyZW50VXNlci50eXBlVXNlciAmJiBjdXJyZW50VXNlci50eXBlVXNlciA9PSAnc2VsbGVyJyB8fCBmYWxzZVxuXHQvLyBcdHJldHVybiAhaXNTZWxsZXIgfHwgIXRoaXMuZ2V0Q3VzdG9tZXIoKTtcblx0Ly8gfVxuXHRwdWJsaWMgaXNBYmxlVG9CdXkgPSAoKTogYm9vbGVhbiA9PiAhdGhpcy5nZXRVc2VyUHJvZmlsZVNuYXBzaG90KCk/LmlzU2VsbGVyKCkgfHwgISF0aGlzLmdldEN1c3RvbWVyKClcblxuXHQvKipcblx0ICogSW5kaWNhIHNpIGVsIHVzdWFyaW8gcHVlZGUgYWNjZWRlci92ZXIgZWwgZGFzaGJvYXJkIGRlIHZlbmRlZG9yLlxuXHQgKiBFbiBTU1Igc2llbXByZSBkZXZ1ZWx2ZSBmYWxzZSBwYXJhIGV2aXRhciBhY2Nlc29zIGEgc3RvcmFnZS5cblx0ICovXG5cdHB1YmxpYyBjYW5BY2Nlc3NTZWxsZXJEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm4gZmFsc2U7XG5cdFx0Y29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlclByb2ZpbGVTbmFwc2hvdCgpO1xuXHRcdGNvbnN0IGhhc0N1c3RvbWVycyA9ICEhdXNlcj8uY3VzdG9tZXJzPy5sZW5ndGg7XG5cdFx0Y29uc3QgaXNTZWxsZXIgPSAhIXVzZXI/LmlzU2VsbGVyKCk7XG5cdFx0Y29uc3QgaGFzQWN0aXZlQ3VzdG9tZXIgPSAhIXRoaXMuZ2V0Q3VzdG9tZXIoKTtcblx0XHRyZXR1cm4gaXNTZWxsZXIgfHwgaGFzQ3VzdG9tZXJzIHx8IGhhc0FjdGl2ZUN1c3RvbWVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYSBzaSBkZWJlIG1vc3RyYXJzZSBlbCBhY2Nlc28gYSBcIk1pIGN1ZW50YVwiIGVuIGVsIG1lbsO6IGRlbCBoZWFkZXIuXG5cdCAqIC0gQ2xpZW50ZXMgbm9ybWFsZXM6IHNpZW1wcmUgdHJ1ZSBjdWFuZG8gZXN0w6FuIGxvZ3VlYWRvcy5cblx0ICogLSBWZW5kZWRvcmVzOiB0cnVlIHNvbG8gY3VhbmRvIG9wZXJhbiBjb24gdW4gY2xpZW50ZSBzZWxlY2Npb25hZG8uXG5cdCAqL1xuXHRwdWJsaWMgY2FuQWNjZXNzTXlBY2NvdW50TWVudSgpOiBib29sZWFuIHtcblx0XHRpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybiBmYWxzZTtcblx0XHRjb25zdCB1c2VyID0gdGhpcy5nZXRVc2VyUHJvZmlsZVNuYXBzaG90KCk7XG5cdFx0Y29uc3QgaXNTZWxsZXIgPSAhIXVzZXI/LmlzU2VsbGVyKCk7XG5cdFx0aWYgKCFpc1NlbGxlcikgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuICEhdGhpcy5nZXRDdXN0b21lcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNuYXBzaG90IGRlIHVzdWFyaW8gc2luIHNpZGUtZWZmZWN0cyAobm8gZGlzcGFyYSBsb2dvdXQpLlxuXHQgKiBTZSB1c2EgZW4gaGVscGVycyBkZSBVSSBwYXJhIGV2aXRhciBsb29wcyBkZSByZW5kZXIuXG5cdCAqL1xuXHRwcml2YXRlIGdldFVzZXJQcm9maWxlU25hcHNob3QoKTogVXNlciB8IG51bGwge1xuXHRcdGlmICh0aGlzLl91c2VyKSByZXR1cm4gdGhpcy5fdXNlcjtcblx0XHRjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRVc2VyRnJvbVN0b3JhZ2UoKTtcblx0XHRyZXR1cm4gbG9hZGVkID8gdGhpcy5fdXNlciA6IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0b3JuYSB1biB1c3VhcmlvIGRlIHRpcG8gY2xpZW50ZS5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRDdXN0b21lcigpOiBhbnkgfCBudWxsIHtcblx0XHRpZiAodGhpcy5fY3VzdG9tZXIpIHJldHVybiB0aGlzLl9jdXN0b21lcjtcblx0XHRjb25zdCBzdG9yZWQgPSB0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNVU1RPTUVSKTtcblx0XHRpZiAoIXN0b3JlZCkgcmV0dXJuIG51bGw7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2N1c3RvbWVyID0gSlNPTi5wYXJzZShzdG9yZWQpO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2N1c3RvbWVyO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBlbCB1c3VhcmlvIGFjdHVhbCBsb2d1ZWFkby5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRVc2VyUHJvZmlsZUFzVXNlcigpOiBVc2VyIHtcblx0XHRyZXR1cm4gdGhpcy5fdXNlciEgYXMgVXNlciB8fCB0aGlzLmdldEN1cnJlbnRVc2VyQXNVc2VyKCk7XG5cdH1cblx0LyoqXG5cdCAqIEFncmVnYSBkYXRhIGV4dHJhIGFsIG9iamVjdG8gZGUgVXN1YXJpby5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRsb2dpbkV4dHJhRGF0YSA9ICgpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xpZW50X2lkOiAnZGVtb19jbGllbnQnLFxuXHRcdFx0Y2xpZW50X3NlY3JldDogJ3NlY3JldF9kZW1vX2NsaWVudCcsXG5cdFx0XHRncmFudF90eXBlOiAncGFzc3dvcmQnXG5cdFx0fVxuXHR9XG5cdC8qIFBsZWFzZSByZW1vdmUgdGhpcyBBU0FQIC0gTmVlZHMgKmNoYW5uZWxzKiBhcnJheSBpbiB1c2VyIG9iamVjdCBBTFdBWVMgKi9cblx0cHJpdmF0ZSBmb3JjZUNoYW5uZWxzRm9yU2VsbGVyKHRva2VuczogYW55KSB7XG5cdFx0aWYgKFVzZXJSb2xlVHlwZS5TRUxMRVIgPT0gdG9rZW5zLnR5cGUgYXMgVXNlclJvbGVUeXBlKVxuXHRcdFx0dGhpcy5jaGFubmVscz8ubGVuZ3RoXG5cdFx0XHRcdD8gdGhpcy5fdXNlciEuc2V0Q2hhbm5lbHMoLi4udGhpcy5jaGFubmVscylcblx0XHRcdFx0OiB0aGlzLl91c2VyIS5zZXRDaGFubmVscyh0aGlzLmNoYW5uZWwpXG5cdH1cblxuXHQvKipcblx0KiBDYXJnYSBlbCBjbGllbnRlIGNvbiBlbCBxdWUgc2UgcmVhbGl6YXJhbiBwZWRpZG9zLiBTaSByZWNpYmUgZWwgdmFsb3IgbnVsbFxuXHQqIHNlIHZ1ZWx2ZSBhIGNhcmdhciBlbCB2ZW5kZWRvciBwYXJhIHN1IHVzby4gIFxuXHQqIEBwYXJhbSBjdXN0b21lciBcblx0Ki9cblx0cHVibGljIHNldEN1c3RvbWVyKGN1c3RvbWVyOiBhbnkpIHtcblx0XHR0aGlzLl9jdXN0b21lciA9IGN1c3RvbWVyID8/IG51bGw7XG5cblx0XHRpZiAoY3VzdG9tZXIpIHtcblx0XHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ1VTVE9NRVIsIEpTT04uc3RyaW5naWZ5KGN1c3RvbWVyKSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DVVNUT01FUik7XG5cdFx0XHR0aGlzLl9jdXN0b21lciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3VzdG9tZXJDaGFubmVsID0gY3VzdG9tZXI/LmNoYW5uZWxzPy5bMF07XG5cdFx0Y29uc3QgY3VzdG9tZXJDaGFubmVsQ29kZSA9IGN1c3RvbWVyQ2hhbm5lbD8uY29kZTtcblx0XHRjb25zdCBjdXN0b21lckxvY2FsZUNvZGUgPSBjdXN0b21lckNoYW5uZWw/LmxvY2FsZXM/LmNvZGU7XG5cdFx0Y29uc3Qgc2FtZUNoYW5uZWwgPSBjdXN0b21lckNoYW5uZWxDb2RlICYmIGN1c3RvbWVyTG9jYWxlQ29kZVxuXHRcdFx0PyB0aGlzLnNhbWVDaGFubmVsKGN1c3RvbWVyQ2hhbm5lbENvZGUsIGN1c3RvbWVyTG9jYWxlQ29kZSlcblx0XHRcdDogbnVsbFxuXG5cdFx0aWYgKGN1c3RvbWVyKSB7XG5cdFx0XHRpZiAoIXNhbWVDaGFubmVsICYmIGN1c3RvbWVyQ2hhbm5lbENvZGUgJiYgY3VzdG9tZXJMb2NhbGVDb2RlKSB7XG5cdFx0XHRcdCF0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpID9cblx0XHRcdFx0XHR0aGlzLl9sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIsIEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdGNoYW5uZWw6IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMLFxuXHRcdFx0XHRcdFx0bG9jYWxlOiB0aGlzLl9hcGlDb25zdHMuTE9DQUxFXG5cdFx0XHRcdFx0fSkpIDogbnVsbDtcblx0XHRcdFx0dGhpcy5jaGFuZ2VDaGFubmVsKHtcblx0XHRcdFx0XHRjaGFubmVsOiBjdXN0b21lckNoYW5uZWxDb2RlLFxuXHRcdFx0XHRcdGxvY2FsZTogY3VzdG9tZXJMb2NhbGVDb2RlXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCByZXMgPSBudWxsO1xuXHRcdFx0Y29uc3Qgc3RvcmVkID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcblx0XHRcdGlmIChzdG9yZWQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXMgPSBKU09OLnBhcnNlKHN0b3JlZCk7XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdHJlcyA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0aWYgKCF0aGlzLnNhbWVDaGFubmVsKHJlcy5jaGFubmVsLCByZXMubG9jYWxlKSkge1xuXHRcdFx0XHRcdHRoaXMuY2hhbmdlQ2hhbm5lbChyZXMpXG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMU0VMTEVSKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly90aGlzLl9jYXJ0U2VydmljZS5jbGVhckFuZFJlc2V0Q3VzdG9tZXJDYXJ0KClcblx0XHR0aGlzLl9jdXN0b21lclN1YmplY3QubmV4dCh0aGlzLl9jdXN0b21lciA/PyBudWxsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21wcnVlYmEgc2kgbG9zIHZhbG9yZXMgZGVsIGNhbmFsIGFjdHVhbCBzb24gaWd1YWxlcyBhIGxvcyBpbmdyZXNhZG8gcG9yIHBhcmFtZXRyb3MuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIE5vbWJyZSBkZWwgY2FuYWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSAgTG9jYWxlIGRlbCBjYW5hbFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBzaSBlcyBlbCBtaXNtbyBjYW5hbCwgRmFsc2UgY2FzbyBjb250cmFyaW8uXG5cdCAqL1xuXHRwcml2YXRlIHNhbWVDaGFubmVsID0gKGNoYW5uZWw6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IChjaGFubmVsID09IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMKSAmJiAobG9jYWxlID09IHRoaXMuX2FwaUNvbnN0cy5MT0NBTEUpXG5cblx0LyoqXG5cdCAqIENhbWJpYSBkZSBjYW5hbFxuXHQgKiBAcGFyYW0gY2hhbm5lbENvbmZpZyBkZWJlIHNlciB1biBvYmpldG8gcXVlIGNvbnRlbmdhIGFsIG1lbm9zIGxhcyBrZXlzIGNoYW5uZWwgeSBsb2NhbGUuXG5cdCAqL1xuXHRwcml2YXRlIGNoYW5nZUNoYW5uZWwgPSAoY2hhbm5lbENvbmZpZzogYW55KSA9PiB7XG5cdFx0dGhpcy5fY29uc3RhbnRzLm1vZGlmeUNoYW5uZWxDb25maWcoe1xuXHRcdFx0Y2hhbm5lbDogY2hhbm5lbENvbmZpZy5jaGFubmVsLFxuXHRcdFx0bG9jYWxlOiBjaGFubmVsQ29uZmlnLmxvY2FsZSxcblx0XHRcdGNoZWNrb3V0VmlldzogY2hhbm5lbENvbmZpZy5jaGVja291dFZpZXdcblx0XHR9KVxuXHR9XG5cdGdldFVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8VXNlciB8IG51bGw+IHtcblx0XHRyZXR1cm4gKHRoaXMuX3VzZXIgJiYgb2YodGhpcy5fdXNlcikpIHx8IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcblx0fVxuXHRwcml2YXRlIGdldEN1cnJlbnRVc2VyKCk6IE9ic2VydmFibGU8VXNlciB8IG51bGw+IHtcblx0XHR0aGlzLl91c2VyID0gbmV3IFVzZXIoKTtcblx0XHRpZiAoIXRoaXMubG9hZFVzZXJGcm9tU3RvcmFnZSgpKSB7XG5cdFx0XHR0aGlzLl91c2VyID0gbnVsbFxuXHRcdH1cblx0XHRyZXR1cm4gb2YodGhpcy5fdXNlcik7XG5cdH1cbn1cbiJdfQ==
|
|
570
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUNwRDs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ2YsYUFBYSxHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNoRSxXQUFXLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFVBQVUsR0FBeUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEUsVUFBVSxHQUF3QixNQUFNLENB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UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFDTyxjQUFjO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtRQUNsQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7d0dBaGpCVyxXQUFXOzRHQUFYLFdBQVcsY0FGWCxNQUFNOzs0RkFFTixXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlclJvbGVUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpQ29uc3RhbnRzU2VydmljZSwgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vYXV0aC5zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG4vKipcbiAqIFNlcnZpY2lvIGRlIGF1dGVudGlmaWNhY2nDs24gZGVsIHVzdWFyaW8gZW4gbGEgcGxhdGFmb3JtYS5cbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuXHRwcml2YXRlIF9sb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlU2VydmljZSlcblx0cHJpdmF0ZSBfY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHRwcml2YXRlIF9jaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UgPSBpbmplY3QoQ2hhbm5lbFNlcnZpY2UpO1xuXHRwcml2YXRlIF9jb25zdGFudHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfYXBpQ29uc3RzOiBBcGlDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xuXHRwcml2YXRlIF9hdXRoU3RvcmFnZTogQXV0aFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KEF1dGhTdG9yYWdlU2VydmljZSk7XG5cblx0Ly8gQ29udGFudGVzIHBhcmEgZWwgc3RvcmFnZS5cblx0cHJpdmF0ZSByZWFkb25seSBKV1RfVE9LRU4gPSAnSldUX1RPS0VOJ1xuXHRwcml2YXRlIHJlYWRvbmx5IFJFRlJFU0hfVE9LRU4gPSAnUkVGUkVTSF9UT0tFTidcblx0cHJpdmF0ZSByZWFkb25seSBFWFBJUkFURVNfSU4gPSAnRVhQSVJBVEVTX0lOJ1xuXHRwcml2YXRlIHJlYWRvbmx5IFVTRVIgPSAnVVNFUidcblx0cHJpdmF0ZSByZWFkb25seSBNQUlMID0gJ21haWwnXG5cdHByaXZhdGUgcmVhZG9ubHkgTE9DQUxFID0gJ0xPQ0FMRSdcblx0cHJpdmF0ZSByZWFkb25seSBDSEFOTkVMID0gJ0NIQU5ORUwnXG5cdHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NRVIgPSAnQ1VTVE9NRVInXG5cdHByaXZhdGUgcmVhZG9ubHkgQ0hBTk5FTFNFTExFUiA9ICdDSEFOTkVMU0VMTEVSJ1xuXG5cdHByaXZhdGUgY2hhbm5lbHNVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuXHRwdWJsaWMgY2hhbm5lbHMkID0gdGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cdHByaXZhdGUgX2NoYW5uZWwkID0gdGhpcy5fY2hhbm5lbFNlcnZpY2UuZ2V0Q2hhbm5lbCgpXG5cdHByaXZhdGUgX3VzZXJJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXIgfCBudWxsPihudWxsKVxuXHRwcml2YXRlIF9sb2dnZWRJblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXHRwdWJsaWMgbG9nZ2VkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fbG9nZ2VkSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9sb2dnaW5nSW5TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblx0cHVibGljIGxvZ2dpbmdJbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9sb2dnaW5nSW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9jdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnkgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55IHwgbnVsbD4obnVsbCk7XG5cdHB1YmxpYyBjdXN0b21lciQ6IE9ic2VydmFibGU8YW55IHwgbnVsbD4gPSB0aGlzLl9jdXN0b21lclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblx0LyoqXG5cdCAqIFBhcmEgaW5kaWNhciBzaSB1biBjYW5hbCBjYW1iaW8uXG5cdCAqL1xuXHRwcml2YXRlIF9hY3RpdmVDaGFubmVsQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBHdWFyZGEgbG9zIGRhdG9zIGRlbCB1c3VhcmlvXG5cdCAqL1xuXHRwcml2YXRlIF91c2VyOiBVc2VyIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgX2N1c3RvbWVyOiBhbnkgPSBudWxsO1xuXHQvKipcblx0ICogR3VhcmRhIGxvcyBkYXRvcyBkZWwgY2FuYWxcblx0ICovXG5cdHB1YmxpYyBjaGFubmVsOiBhbnkgPSBbXVxuXHRwdWJsaWMgY2hhbm5lbHM6IGFueVtdID0gW11cblx0LyoqXG5cdCAqIFV0aWxpemFkbyBwYXJhIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHRpZW5lIHF1ZSByZWRpcmVjY2lvbmFyXG5cdCAqIGxhIHBhZ2luYSB0cmFzIHVuIGV2ZW50by5cblx0ICovXG5cdHByaXZhdGUgX2hvbWVSZXNvbHZlcjogYW55O1xuXHQvKipcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB0b2tlbiBkZSB1c3VhcmlvIHVuYSB2ZXogbG9ndWVhZG9cblx0ICovXG5cdHByaXZhdGUgX3Rva2VuU2lnbmFsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXHQvKipcblx0ICogU2lnbmFsIHBhcmEgZ3VhcmRhciBlbCB1c3VhcmlvXG5cdCAqL1xuXHRwcml2YXRlIF91c2VyU2lnbmFsID0gc2lnbmFsPFVzZXIgfCBudWxsPihudWxsKTtcblx0Ly9BUElzXG5cdHByaXZhdGUgc2hvcEFwaTogc3RyaW5nID0gdGhpcy5fYXBpQ29uc3RzLlNIT1BfQVBJX1VSTFxuXHRwcml2YXRlIGNoYW5uZWxBcGk6IHN0cmluZyA9IHRoaXMuX2FwaUNvbnN0cy5DSEFOTkVMXG5cdHByaXZhdGUgdG9rZW5BcGkoKSB7IHJldHVybiB0aGlzLnNob3BBcGkgKyAnbG9naW5fY2hlY2snIH1cblx0cHJpdmF0ZSByZWNvdmVyUGFzc3dvcmRBcGkoKSB7IHJldHVybiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3JlcXVlc3QtcGFzc3dvcmQtcmVzZXRgIH1cblx0cHJpdmF0ZSByZXNldFBhc3N3b3JkQXBpID0gKHRva2VuOiBzdHJpbmcpID0+IGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcGFzc3dvcmQtcmVzZXQvJHt0b2tlbn1gO1xuXHRwcml2YXRlIGNvbmZpcm1BY2NvdW50QXBpKHRva2VuOiBzdHJpbmcpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vdmVyaWZ5LWFjY291bnQ/dG9rZW49JHt0b2tlbn1gIH1cblx0cHJpdmF0ZSByZWdpc3RlckFwaSgpIHsgcmV0dXJuIGAke3RoaXMuc2hvcEFwaX0ke3RoaXMuY2hhbm5lbEFwaX0vcmVnaXN0ZXJgIH1cblx0cHJpdmF0ZSByZWdpc3Rlcldob2xlc2FsZXJBcGkoKSB7IHJldHVybiBgJHt0aGlzLnNob3BBcGl9JHt0aGlzLmNoYW5uZWxBcGl9L3JlZ2lzdGVyLXdob2xlc2FsZXJgIH1cblx0cHJvdGVjdGVkIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcblxuXHRwdWJsaWMgd2luZG93PzogV2luZG93O1xuXHRwdWJsaWMgbG9jYWxTdG9yYWdlPzogU3RvcmFnZTtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcblx0XHRcdHRoaXMud2luZG93ID0gd2luZG93XG5cdFx0XHR0aGlzLmxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZTtcblx0XHR9XG5cdFx0dGhpcy5sb2FkVG9rZW5Gcm9tU3RvcmFnZSgpO1xuXHRcdHRoaXMuX2N1c3RvbWVyU3ViamVjdC5uZXh0KHRoaXMuZ2V0Q3VzdG9tZXIoKSk7XG5cdFx0dGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLl9sb2dnZWRJblN1YmplY3QubmV4dCh0cnVlKTtcblx0fVxuXHQvKipcblx0ICogTG9ndWVhIGFsIHVzdWFyaW8gZW4gbGEgYXBsaWNhY2nDs24uXG5cdCAqIEBwYXJhbSB1c2VyIGRhdG9zIGRlbCB1c3VhcmlvXG5cdCAqIEBwYXJhbSB3aXRoUm9sZXMgcm9sZXMgZGVsIHVzdWFyaW9cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRsb2dpbih1c2VyOiB7IHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcgfSwgd2l0aFJvbGVzOiBVc2VyUm9sZVR5cGVbXSA9IFtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcblx0XHR0aGlzLl9jaGFubmVsJC5zdWJzY3JpYmUoY2ggPT4gdGhpcy5jaGFubmVsID0gY2gpO1xuXHRcdHRoaXMuY2hhbm5lbHMkLnN1YnNjcmliZShjaCA9PiB0aGlzLmNoYW5uZWxzID0gY2gpO1xuXHRcdHRoaXMuX2xvZ2dpbmdJblN1YmplY3QubmV4dCh0cnVlKTtcblx0XHR1c2VyID0geyAuLi51c2VyLCAuLi50aGlzLmxvZ2luRXh0cmFEYXRhKCkgfVxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy50b2tlbkFwaSgpLCB1c2VyKS5waXBlKFxuXHRcdFx0bWFwKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5jaGFubmVsQWNjZXNzUGVybWlzc2lvbih7IC4uLnVzZXIsIC4uLnJlcyB9KSAmJiB0aGlzLmlzQWxsb3dlZFJvbGUod2l0aFJvbGVzLCByZXMudHlwZSkpIHtcblx0XHRcdFx0XHR0aGlzLmRvTG9naW5Vc2VyKHsgLi4udXNlciwgLi4ucmVzIH0pO1xuXHRcdFx0XHRcdHJldHVybiAnb2snO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAnZXJyb3InO1xuXHRcdFx0fSksXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuX2xvZ2dpbmdJblN1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTsgLy8gPC0tIFByb3BhZ2EgZWwgZXJyb3IgcmVhbFxuXHRcdFx0fSlcblx0XHQpXG5cdH1cblx0LyoqXG5cdCAqIENvbnRyb2xhIHF1ZSBlbCB1c3VhcmlvIGxvZ3VlYWRvIHRlbmdhIHBlcm1pc29zIFxuXHQgKiBwYXJhIGVsIGNhbmFsIGFjdHVhbCBkZSBsYSBhcGxpY2FjacOzbi5cblx0ICogQHBhcmFtIHJlcyBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGNoYW5uZWxBY2Nlc3NQZXJtaXNzaW9uKHJlczogYW55KSB7XG5cdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQoW10pO1xuXG5cdFx0LyogTm8gYXV0aG9yaXplZCBjaGFubmVscyAqL1xuXHRcdGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA9PSAwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cdFx0LyogU29tZSBhdXRob3JpemVkIGNoYW5uZWwocykgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuXHRcdGlmIChyZXMuY2hhbm5lbHMuZmluZCgodXNlcmNoYW5uZWw6IGFueSkgPT4gdXNlcmNoYW5uZWwuY29kZSA9PT0gdGhpcy5jaGFubmVsLmNvZGUpKSB7XG5cdFx0XHQvKiBNdWx0aXBsZSBhdXRob3JpemVkIGNoYW5uZWxzIGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cblx0XHRcdGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA+IDEgJiYgdGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSlcblx0XHRcdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0LyogT25lIGF1dGhvcml6ZWQgY2hhbm5lbCBub3QgaW5jbHVkaW5nIGN1cnJlbnQgY2hhbm5lbCAqL1xuXHRcdGlmIChyZXMuY2hhbm5lbHM/Lmxlbmd0aCA9PSAxICYmIHRoaXMuX2FjdGl2ZUNoYW5uZWxDaGFuZ2UpIHtcblx0XHRcdGRlbGV0ZSByZXMucGFzc3dvcmRcblx0XHRcdHRoaXMuY2hhbm5lbEFjY2VzcyhyZXMuY2hhbm5lbHNbMF0sIHJlcylcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdC8qIE11bHRpcGxlIGF1dGhvcml6ZWQgY2hhbm5lbHMgbm90IGluY2x1ZGluZyBjdXJyZW50IGNoYW5uZWwgKi9cblx0XHRpZiAodGhpcy5fYWN0aXZlQ2hhbm5lbENoYW5nZSkge1xuXHRcdFx0dGhpcy5jaGFubmVsc1VzZXJTdWJqZWN0Lm5leHQocmVzLmNoYW5uZWxzKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblx0LyoqXG5cdCAqIENvbnRyb2xhIGVsIGFjY2VzbyBhbCBjYW5hbCwgZGUgc2VyIG90cm8gbnVldm8gY2FtYmlhIGxvcyB2YWxvcmVzLlxuXHQgKiBAcGFyYW0gY2hhbm5lbCBcblx0ICogQHBhcmFtIHVzZXIgXG5cdCAqL1xuXHRjaGFubmVsQWNjZXNzKGNoYW5uZWw6IGFueSwgdXNlciA9IG51bGwpIHtcblx0XHRpZiAodGhpcy53aW5kb3c/LmxvY2F0aW9uLmhvc3RuYW1lICE9IGNoYW5uZWwuaG9zdG5hbWUpIHtcblx0XHRcdGxldCBlbmNvZGVkID0gYnRvYShKU09OLnN0cmluZ2lmeSh1c2VyICE9IG51bGwgPyB1c2VyIDogdGhpcy5fdXNlcikpXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVwbGFjZShgJHt0aGlzLndpbmRvdz8ubG9jYXRpb24ucHJvdG9jb2x9Ly8ke2NoYW5uZWwuaG9zdG5hbWV9L2F1dGgvcmVkaXJlY3QvJHtlbmNvZGVkfWApXG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NvbnN0YW50cy5tb2RpZnlDaGFubmVsQ29uZmlnKGNoYW5uZWwpXG5cdFx0XHR0aGlzLndpbmRvdz8ubG9jYXRpb24ucmVsb2FkKClcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIENvbnRyb2xhIHF1ZSBlbCByb2wgZGVsIHVzdWFyaW8gc2VhIHVuIHJvbCBwZXJtaXRpZG8gcG9yIGxhIGFwbGljYWNpw7NuLlxuXHQgKiBAcGFyYW0gYWxsb3dlZFJvbGVzIHJvbGVzIHF1ZSBwZXJtaXRlIGxhIGFwbGljYWNpw7NuLlxuXHQgKiBAcGFyYW0gcm9sZSByb2wgZGVsIHVzdWFyaW9zXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBpc0FsbG93ZWRSb2xlKGFsbG93ZWRSb2xlczogVXNlclJvbGVUeXBlW10sIHJvbGU6IHN0cmluZykge1xuXHRcdHJldHVybiBhbGxvd2VkUm9sZXMubGVuZ3RoXG5cdFx0XHQ/IGFsbG93ZWRSb2xlcy5pbmNsdWRlcyhyb2xlIGFzIFVzZXJSb2xlVHlwZSlcblx0XHRcdDogdHJ1ZVxuXHR9XG5cdC8qKlxuXHQgKiBUcmFzIHVuIGxvZ3VlbyBleGl0b3NvLCBndWFyZGEgbG9zIGRhdG9zIG5lY2VzYXJpb3MgZW4gZWwgc3RvcmFnZSB5IGRlbcOhc1xuXHQgKiBjb25maWd1cmFjaW9uZXMgbmVjZXNhcmlhcy5cblx0ICogQHBhcmFtIHRva2VucyBcblx0ICovXG5cdHByaXZhdGUgZG9Mb2dpblVzZXIodG9rZW5zOiBhbnkpIHtcblx0XHR0aGlzLl91c2VyID0gbmV3IFVzZXIoKVxuXHRcdHRoaXMuX3VzZXIuaW5pdGlsaXplZCh0b2tlbnMpXG5cdFx0dGhpcy5fY3VzdG9tZXIgPSBudWxsO1xuXHRcdHRoaXMuX2N1c3RvbWVyU3ViamVjdC5uZXh0KG51bGwpO1xuXG5cdFx0dGhpcy5mb3JjZUNoYW5uZWxzRm9yU2VsbGVyKHRva2Vucylcblx0XHQvL0NoYW5uZWxcblx0XHRjb25zdCB1c2VySnNvbmlmeSA9IHRoaXMuX3VzZXIuanNvbmlmeSgpXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5VU0VSLCBKU09OLnN0cmluZ2lmeSh1c2VySnNvbmlmeSkpXG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFBJUkFURVNfSU4sIG1vbWVudCh0b2tlbnMuZXhwaXJlX2luKS5hZGQoMSwgJ2gnKS5mb3JtYXQoKSk7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5SRUZSRVNIX1RPS0VOLCBtb21lbnQodG9rZW5zLmV4cGlyZV9pbikuYWRkKDEsICdoJykuZm9ybWF0KCkpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuSldUX1RPS0VOLCB0b2tlbnMudG9rZW4pO1xuXHRcdHRoaXMuX2F1dGhTdG9yYWdlLnNldEF1dGhUb2tlbih0b2tlbnMudG9rZW4pXG5cdFx0dGhpcy5fdG9rZW5TaWduYWwuc2V0KHRva2Vucy50b2tlbik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5NQUlMLCB0b2tlbnMudXNlcm5hbWUpO1xuXHRcdC8vT2JzZXJ2YWJsZXNcblx0XHR0aGlzLl91c2VySW5TdWJqZWN0Lm5leHQodGhpcy5fdXNlcik7XG5cdFx0dGhpcy5fbG9nZ2VkSW5TdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0dGhpcy5fbG9nZ2luZ0luU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0fVxuXHQvKipcblx0ICogQ2FtYmlhIGxhIGZ1bmNpb24gcXVlIHNlIGVuY2FyZ2EgZGUgcmVzb2x2ZXIgaGFjaWEgZG9uZGUgc2UgcmVkaXJpZ2UgZWwgZnJvbnRlbmRcblx0ICogdHJhcyB1bmEgYWNjacOzblxuXHQgKiBAcGFyYW0gcmVzb2x2ZXJGdW5jdGlvbiBcblx0ICovXG5cdHB1YmxpYyBzZXRIb21lUmVzb2x2ZXIocmVzb2x2ZXJGdW5jdGlvbjogYW55KSB7IHRoaXMuX2hvbWVSZXNvbHZlciA9IHJlc29sdmVyRnVuY3Rpb24gfVxuXHQvKipcblx0ICogT2J0aWVuZSBsYSBmdW5jaW9uIHF1ZSBzZSBlbmNhcmdhIGRlIHJlc29sdmVyIGhhY2lhIGRvbmRlIHNlIHJlZGlyaWdlIGVsIGZyb250ZW5kLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRIb21lUmVzb2x2ZXIoKSB7IHJldHVybiB0aGlzLl9ob21lUmVzb2x2ZXIgfVxuXHQvKipcblx0ICogRWplY3V0YSBlbCByZXNvbHZlciBkZSBob21lIGNvbmZpZ3VyYWRvIHBvciBlbCBmcm9udGVuZCBvIHVzYSB1biBmYWxsYmFjay5cblx0ICogU2UgdXNhIHRhbnRvIGVuIGxvZ2luIGNvbW8gZW4gbG9nb3V0IHBhcmEgZXZpdGFyIGhhcmRjb2RlcyBwb3IgY29tcG9uZW50ZS5cblx0ICovXG5cdHB1YmxpYyByZXNvbHZlSG9tZU5hdmlnYXRpb24oZmFsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvbHZlckZ1bmN0aW9uID0gdGhpcy5nZXRIb21lUmVzb2x2ZXIoKTtcblx0XHRyZXNvbHZlckZ1bmN0aW9uXG5cdFx0XHQ/IHJlc29sdmVyRnVuY3Rpb24oKVxuXHRcdFx0OiBmYWxsYmFjaygpO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGVsIHRva2VuIGRlbCBzdG9yYWdlIHkgbG8gZ3VhcmRhIGVuIGxhIHNpZ25hbC5cblx0ICovXG5cdHB1YmxpYyBsb2FkVG9rZW5Gcm9tU3RvcmFnZSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuSldUX1RPS0VOKTtcblx0XHRpZiAodG9rZW4pIHtcblx0XHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldCh0b2tlbik7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEZXNsb2d1ZWEgYWwgdXN1YXJpby5cblx0ICovXG5cdHB1YmxpYyBsb2dvdXQoKSB7XG5cdFx0dGhpcy5kb0xvZ291dFVzZXIoKTtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSBzaSBoYXkgdW4gdXN1YXJpbyBsb2d1ZWFkbyBvIG5vLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cdFx0aWYgKCF0b2tlbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmdldEN1cnJlbnRVc2VyQXNVc2VyKCk7XG5cdFx0cmV0dXJuIHRoaXMuX3VzZXIgIT0gbnVsbDtcblx0fVxuXHQvKipcblx0ICogUmV0b3JuYSBlbCB0b2tlbiBkZSB1c3VhcmlvXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldFRva2VuKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Rva2VuU2lnbmFsKCk7XG5cdH1cblx0LyoqXG5cdCAqIExpbXBpYSBlbCBzdG9yYWdlIHkgbGFzIGNvbmZpZ3VyYWNpb25lcyBpbnRlcm5hc1xuXHQgKi9cblx0cHVibGljIGRvTG9nb3V0VXNlcigpIHtcblx0XHR0aGlzLl91c2VyID0gbnVsbFxuXHRcdHRoaXMuX2N1c3RvbWVyID0gbnVsbDtcblx0XHR0aGlzLl9jdXN0b21lclN1YmplY3QubmV4dChudWxsKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlVTRVIpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRVhQSVJBVEVTX0lOKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkpXVF9UT0tFTik7XG5cdFx0dGhpcy5fYXV0aFN0b3JhZ2Uuc2V0QXV0aFRva2VuKG51bGwpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuUkVGUkVTSF9UT0tFTik7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2FydF9vd25lcicpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTUFJTCk7XG5cdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5DSEFOTkVMKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpO1xuXHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9DQUxFKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNVU1RPTUVSKTtcblx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnTUFTVEVSX0NIQU5ORUwnKTtcblx0XHR0aGlzLl9sb2dnZWRJblN1YmplY3QubmV4dChmYWxzZSk7XG5cdFx0dGhpcy5fdXNlckluU3ViamVjdC5uZXh0KHRoaXMuX3VzZXIpO1xuXHRcdHRoaXMuY2hhbm5lbHNVc2VyU3ViamVjdC5uZXh0KFtdKVxuXHRcdHRoaXMuX3Rva2VuU2lnbmFsLnNldChudWxsKVxuXHR9XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBgdHJ1ZWBzaSBlbCB0b2tlbiBleHBpcm8sIGBmYWxzZWAgY2FzbyBjb250cmFyaW8uXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBpc1Rva2VuRXhwaXJlZCgpIHtcblx0XHRjb25zdCBmZWNoYV9leHBpcmFjaW9uID0gdGhpcy5nZXRFeHBpcmF0ZXNBdCgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG1vbWVudCgpID49IG1vbWVudChmZWNoYV9leHBpcmFjaW9uKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGxhIGZlY2hhIGRlIGV4cGlyYWNpw7NuIGRlbCB0b2tlbi5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGdldEV4cGlyYXRlc0F0KCkge1xuXHRcdHJldHVybiB0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkVYUElSQVRFU19JTik7XG5cdH1cblx0LyoqXG5cdCAqIE9idGllbmUgYWwgdXN1YXJpbyBhY3R1YWwgeSBsbyBjb252aWVydGUgZW4gdW5hIGluc3RhbmNpYSBkZSBgVXNlcmBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGdldEN1cnJlbnRVc2VyQXNVc2VyKCk6IFVzZXIgfCBudWxsIHtcblx0XHR0aGlzLl91c2VyID0gbmV3IFVzZXIoKTtcblx0XHRjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRVc2VyRnJvbVN0b3JhZ2UoKTtcblx0XHRpZiAoIWxvYWRlZCkge1xuXHRcdFx0dGhpcy5fdXNlciA9IG51bGw7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRoaXMuX3VzZXI/LmNoYW5uZWxzLmZpbmQoKHVzZXJjaGFubmVsOiBhbnkpID0+IHVzZXJjaGFubmVsPy5jb2RlID09PSB0aGlzLl9hcGlDb25zdHMuQ0hBTk5FTCkpIHtcblx0XHRcdHJldHVybiB0aGlzLl91c2VyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBTaSBoYXkgY2xpZW50ZSBhY3Rpdm8gKGltcGVyc29uYWNpw7NuIGRlIHNlbGxlciksIGVsIGNhbmFsIHB1ZWRlIHNlclxuXHRcdFx0Ly8gZWwgZGVsIGNsaWVudGUgeSBubyBuZWNlc2FyaWFtZW50ZSB1bm8gZGVsIHZlbmRlZG9yLlxuXHRcdFx0Ly8gRW4gZXNlIGNhc28gbm8gaW52YWxpZGFtb3Mgc2VzacOzbiBwb3IgbWlzbWF0Y2ggZGUgY2FuYWwuXG5cdFx0XHRpZiAodGhpcy5nZXRDdXN0b21lcigpKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl91c2VyO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5sb2dvdXQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX3VzZXI7XG5cdH1cblx0LyoqXG5cdCAqIE9idGllbmUgZWwgdXN1YXJpbyBkZWwgc3RvcmFnZS5cblx0ICogQHBhcmFtIGtleSBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGxvYWRVc2VyRnJvbVN0b3JhZ2Uoa2V5ID0gdGhpcy5VU0VSKSB7XG5cdFx0Y29uc3Qgc3RvcmVkID0gdGhpcy5fbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcblx0XHRpZiAoc3RvcmVkKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB1c2VyT2JqID0gSlNPTi5wYXJzZShzdG9yZWQpO1xuXHRcdFx0XHR0aGlzLl91c2VyID0gT2JqZWN0LmFzc2lnbihuZXcgVXNlcigpLCB1c2VyT2JqKTsgLy8gPC0tIEFzw60gcmVjdXBlcmFzIGxvcyBtw6l0b2RvcyBkZSBVc2VyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cblxuXHR9XG5cblx0cGFzc3dvcmRSZXNldCA9IChuZXdfcGFzc3dvcmQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4ge1xuXHRcdFxuXHRcdGNvbnN0IGRhdGEgPSB7IHBhc3N3b3JkOiB7IGZpcnN0OiBuZXdfcGFzc3dvcmQsIHNlY29uZDogbmV3X3Bhc3N3b3JkIH0gfTtcblx0XHRjb25zb2xlLmxvZyh0aGlzLnJlc2V0UGFzc3dvcmRBcGkodG9rZW4pLCBkYXRhKVxuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLnJlc2V0UGFzc3dvcmRBcGkodG9rZW4pLCBkYXRhKTtcblx0fVxuXHQvKipcblx0ICogRW52aWEgbGEgc29saWNpdHVkIHBhcmEgY2FtYmlhciBsYSBjb250cmFzZcOxYS5cblx0ICogQHBhcmFtIGVtYWlsIGVtYWlsIGRlbCBzb2xpY2l0YW50ZS5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRyZWNvdmVyUGFzc3dvcmQoZW1haWw6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnB1dCh0aGlzLnJlY292ZXJQYXNzd29yZEFwaSgpLCB7IGVtYWlsIH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBQYXJhIGNvbmZpcm1hciBlbCByZWdpc3RybyBkZSB1c3VhcmlvLlxuXHQgKiBAcGFyYW0gdG9rZW4gXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Y29uZmlybUFjY291bnQodG9rZW46IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLmdldCh0aGlzLmNvbmZpcm1BY2NvdW50QXBpKHRva2VuKSk7XG5cdH1cblx0LyoqXG5cdCAqIFBhcmEgcmVnaXN0cmFyIGEgdW4gdXN1YXJpbyBjb23Dum5cblx0ICogQHBhcmFtIGRhdGEgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0c2luZ1VwKGRhdGE6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLl9jb25uZWN0aW9uLnBvc3QodGhpcy5yZWdpc3RlckFwaSgpLCBkYXRhKTtcblx0fVxuXHQvKipcblx0ICogUGFyYSByZWdpc3RyYXIgYSB1biB1c3VhcmlvIG1heW9yaXN0YS5cblx0ICogQHBhcmFtIGRhdGEgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0c2lnblVwV2hvbGVzYWxlcihkYXRhOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5wb3N0KHRoaXMucmVnaXN0ZXJXaG9sZXNhbGVyQXBpKCksIGRhdGEpO1xuXHR9XG5cdC8qKlxuXHQgKiBDaGVxdWVhIHNpIHVuIHVzdWFyaW8gZXN0YSBoYWJpbGl0YWRvIGEgY29tcHJhciBvIG5vLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdC8vIGlzQWJsZVRvQnV5KCk6Ym9vbGVhbiB7XG5cdC8vIFx0Y29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmdldFVzZXJQcm9maWxlQXNVc2VyKCkgYXMgVXNlcjtcblx0Ly8gXHRjb25zdCBpc1NlbGxlciA9IGN1cnJlbnRVc2VyLnR5cGVVc2VyICYmIGN1cnJlbnRVc2VyLnR5cGVVc2VyID09ICdzZWxsZXInIHx8IGZhbHNlXG5cdC8vIFx0cmV0dXJuICFpc1NlbGxlciB8fCAhdGhpcy5nZXRDdXN0b21lcigpO1xuXHQvLyB9XG5cdHB1YmxpYyBpc0FibGVUb0J1eSA9ICgpOiBib29sZWFuID0+ICF0aGlzLmdldFVzZXJQcm9maWxlU25hcHNob3QoKT8uaXNTZWxsZXIoKSB8fCAhIXRoaXMuZ2V0Q3VzdG9tZXIoKVxuXG5cdC8qKlxuXHQgKiBJbmRpY2Egc2kgZWwgdXN1YXJpbyBwdWVkZSBhY2NlZGVyL3ZlciBlbCBkYXNoYm9hcmQgZGUgdmVuZGVkb3IuXG5cdCAqIEVuIFNTUiBzaWVtcHJlIGRldnVlbHZlIGZhbHNlIHBhcmEgZXZpdGFyIGFjY2Vzb3MgYSBzdG9yYWdlLlxuXHQgKi9cblx0cHVibGljIGNhbkFjY2Vzc1NlbGxlckRhc2hib2FyZCgpOiBib29sZWFuIHtcblx0XHRpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybiBmYWxzZTtcblx0XHRjb25zdCB1c2VyID0gdGhpcy5nZXRVc2VyUHJvZmlsZVNuYXBzaG90KCk7XG5cdFx0Y29uc3QgaGFzQ3VzdG9tZXJzID0gISF1c2VyPy5jdXN0b21lcnM/Lmxlbmd0aDtcblx0XHRjb25zdCBpc1NlbGxlciA9ICEhdXNlcj8uaXNTZWxsZXIoKTtcblx0XHRjb25zdCBoYXNBY3RpdmVDdXN0b21lciA9ICEhdGhpcy5nZXRDdXN0b21lcigpO1xuXHRcdHJldHVybiBpc1NlbGxlciB8fCBoYXNDdXN0b21lcnMgfHwgaGFzQWN0aXZlQ3VzdG9tZXI7XG5cdH1cblxuXHQvKipcblx0ICogSW5kaWNhIHNpIGRlYmUgbW9zdHJhcnNlIGVsIGFjY2VzbyBhIFwiTWkgY3VlbnRhXCIgZW4gZWwgbWVuw7ogZGVsIGhlYWRlci5cblx0ICogLSBDbGllbnRlcyBub3JtYWxlczogc2llbXByZSB0cnVlIGN1YW5kbyBlc3TDoW4gbG9ndWVhZG9zLlxuXHQgKiAtIFZlbmRlZG9yZXM6IHRydWUgc29sbyBjdWFuZG8gb3BlcmFuIGNvbiB1biBjbGllbnRlIHNlbGVjY2lvbmFkby5cblx0ICovXG5cdHB1YmxpYyBjYW5BY2Nlc3NNeUFjY291bnRNZW51KCk6IGJvb2xlYW4ge1xuXHRcdGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXJQcm9maWxlU25hcHNob3QoKTtcblx0XHRjb25zdCBpc1NlbGxlciA9ICEhdXNlcj8uaXNTZWxsZXIoKTtcblx0XHRpZiAoIWlzU2VsbGVyKSByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gISF0aGlzLmdldEN1c3RvbWVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogU25hcHNob3QgZGUgdXN1YXJpbyBzaW4gc2lkZS1lZmZlY3RzIChubyBkaXNwYXJhIGxvZ291dCkuXG5cdCAqIFNlIHVzYSBlbiBoZWxwZXJzIGRlIFVJIHBhcmEgZXZpdGFyIGxvb3BzIGRlIHJlbmRlci5cblx0ICovXG5cdHByaXZhdGUgZ2V0VXNlclByb2ZpbGVTbmFwc2hvdCgpOiBVc2VyIHwgbnVsbCB7XG5cdFx0aWYgKHRoaXMuX3VzZXIpIHJldHVybiB0aGlzLl91c2VyO1xuXHRcdGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZFVzZXJGcm9tU3RvcmFnZSgpO1xuXHRcdHJldHVybiBsb2FkZWQgPyB0aGlzLl91c2VyIDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRvcm5hIHVuIHVzdWFyaW8gZGUgdGlwbyBjbGllbnRlLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldEN1c3RvbWVyKCk6IGFueSB8IG51bGwge1xuXHRcdGlmICh0aGlzLl9jdXN0b21lcikgcmV0dXJuIHRoaXMuX2N1c3RvbWVyO1xuXHRcdGNvbnN0IHN0b3JlZCA9IHRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ1VTVE9NRVIpO1xuXHRcdGlmICghc3RvcmVkKSByZXR1cm4gbnVsbDtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5fY3VzdG9tZXIgPSBKU09OLnBhcnNlKHN0b3JlZCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY3VzdG9tZXI7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGV2dWVsdmUgbGEgbGxhdmUgZXN0YWJsZSBxdWUgaWRlbnRpZmljYSBlbCBjYXJyaXRvIGFjdGl2byBkZSBsYSBzZXNpw7NuIGFjdHVhbC5cblx0ICogU2UgdXNhIHBhcmEgZXZpdGFyIHJldXNhciBgY2FydF90b2tlbmAgZGUgb3RybyB1c3VhcmlvL2N1ZW50YS5cblx0ICovXG5cdHB1YmxpYyBnZXRDYXJ0U2Vzc2lvbk93bmVyS2V5KCk6IHN0cmluZyB8IG51bGwge1xuXHRcdGNvbnN0IGN1c3RvbWVyID0gdGhpcy5nZXRDdXN0b21lcigpO1xuXHRcdGlmIChjdXN0b21lcj8uaWQgIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGBjdXN0b21lcjoke2N1c3RvbWVyLmlkfWA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlclByb2ZpbGVTbmFwc2hvdCgpO1xuXHRcdGlmICh1c2VyPy51c2VybmFtZSkge1xuXHRcdFx0cmV0dXJuIGB1c2VyOiR7dXNlci51c2VybmFtZS50b0xvd2VyQ2FzZSgpfWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0LyoqXG5cdCAqIERldnVlbHZlIGVsIHVzdWFyaW8gYWN0dWFsIGxvZ3VlYWRvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldFVzZXJQcm9maWxlQXNVc2VyKCk6IFVzZXIge1xuXHRcdHJldHVybiB0aGlzLl91c2VyISBhcyBVc2VyIHx8IHRoaXMuZ2V0Q3VycmVudFVzZXJBc1VzZXIoKTtcblx0fVxuXHQvKipcblx0ICogQWdyZWdhIGRhdGEgZXh0cmEgYWwgb2JqZWN0byBkZSBVc3VhcmlvLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGxvZ2luRXh0cmFEYXRhID0gKCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbGllbnRfaWQ6ICdkZW1vX2NsaWVudCcsXG5cdFx0XHRjbGllbnRfc2VjcmV0OiAnc2VjcmV0X2RlbW9fY2xpZW50Jyxcblx0XHRcdGdyYW50X3R5cGU6ICdwYXNzd29yZCdcblx0XHR9XG5cdH1cblx0LyogUGxlYXNlIHJlbW92ZSB0aGlzIEFTQVAgLSBOZWVkcyAqY2hhbm5lbHMqIGFycmF5IGluIHVzZXIgb2JqZWN0IEFMV0FZUyAqL1xuXHRwcml2YXRlIGZvcmNlQ2hhbm5lbHNGb3JTZWxsZXIodG9rZW5zOiBhbnkpIHtcblx0XHRpZiAoVXNlclJvbGVUeXBlLlNFTExFUiA9PSB0b2tlbnMudHlwZSBhcyBVc2VyUm9sZVR5cGUpXG5cdFx0XHR0aGlzLmNoYW5uZWxzPy5sZW5ndGhcblx0XHRcdFx0PyB0aGlzLl91c2VyIS5zZXRDaGFubmVscyguLi50aGlzLmNoYW5uZWxzKVxuXHRcdFx0XHQ6IHRoaXMuX3VzZXIhLnNldENoYW5uZWxzKHRoaXMuY2hhbm5lbClcblx0fVxuXG5cdC8qKlxuXHQqIENhcmdhIGVsIGNsaWVudGUgY29uIGVsIHF1ZSBzZSByZWFsaXphcmFuIHBlZGlkb3MuIFNpIHJlY2liZSBlbCB2YWxvciBudWxsXG5cdCogc2UgdnVlbHZlIGEgY2FyZ2FyIGVsIHZlbmRlZG9yIHBhcmEgc3UgdXNvLiAgXG5cdCogQHBhcmFtIGN1c3RvbWVyIFxuXHQqL1xuXHRwdWJsaWMgc2V0Q3VzdG9tZXIoY3VzdG9tZXI6IGFueSkge1xuXHRcdHRoaXMuX2N1c3RvbWVyID0gY3VzdG9tZXIgPz8gbnVsbDtcblxuXHRcdGlmIChjdXN0b21lcikge1xuXHRcdFx0dGhpcy5fbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5DVVNUT01FUiwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXIpKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNVU1RPTUVSKTtcblx0XHRcdHRoaXMuX2N1c3RvbWVyID0gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBjdXN0b21lckNoYW5uZWwgPSBjdXN0b21lcj8uY2hhbm5lbHM/LlswXTtcblx0XHRjb25zdCBjdXN0b21lckNoYW5uZWxDb2RlID0gY3VzdG9tZXJDaGFubmVsPy5jb2RlO1xuXHRcdGNvbnN0IGN1c3RvbWVyTG9jYWxlQ29kZSA9IGN1c3RvbWVyQ2hhbm5lbD8ubG9jYWxlcz8uY29kZTtcblx0XHRjb25zdCBzYW1lQ2hhbm5lbCA9IGN1c3RvbWVyQ2hhbm5lbENvZGUgJiYgY3VzdG9tZXJMb2NhbGVDb2RlXG5cdFx0XHQ/IHRoaXMuc2FtZUNoYW5uZWwoY3VzdG9tZXJDaGFubmVsQ29kZSwgY3VzdG9tZXJMb2NhbGVDb2RlKVxuXHRcdFx0OiBudWxsXG5cblx0XHRpZiAoY3VzdG9tZXIpIHtcblx0XHRcdGlmICghc2FtZUNoYW5uZWwgJiYgY3VzdG9tZXJDaGFubmVsQ29kZSAmJiBjdXN0b21lckxvY2FsZUNvZGUpIHtcblx0XHRcdFx0IXRoaXMuX2xvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUikgP1xuXHRcdFx0XHRcdHRoaXMuX2xvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuQ0hBTk5FTFNFTExFUiwgSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0Y2hhbm5lbDogdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwsXG5cdFx0XHRcdFx0XHRsb2NhbGU6IHRoaXMuX2FwaUNvbnN0cy5MT0NBTEVcblx0XHRcdFx0XHR9KSkgOiBudWxsO1xuXHRcdFx0XHR0aGlzLmNoYW5nZUNoYW5uZWwoe1xuXHRcdFx0XHRcdGNoYW5uZWw6IGN1c3RvbWVyQ2hhbm5lbENvZGUsXG5cdFx0XHRcdFx0bG9jYWxlOiBjdXN0b21lckxvY2FsZUNvZGVcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IHJlcyA9IG51bGw7XG5cdFx0XHRjb25zdCBzdG9yZWQgPSB0aGlzLl9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpO1xuXHRcdFx0aWYgKHN0b3JlZCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHJlcyA9IEpTT04ucGFyc2Uoc3RvcmVkKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0cmVzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHJlcykge1xuXHRcdFx0XHRpZiAoIXRoaXMuc2FtZUNoYW5uZWwocmVzLmNoYW5uZWwsIHJlcy5sb2NhbGUpKSB7XG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VDaGFubmVsKHJlcylcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkNIQU5ORUxTRUxMRVIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvL3RoaXMuX2NhcnRTZXJ2aWNlLmNsZWFyQW5kUmVzZXRDdXN0b21lckNhcnQoKVxuXHRcdHRoaXMuX2N1c3RvbWVyU3ViamVjdC5uZXh0KHRoaXMuX2N1c3RvbWVyID8/IG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbXBydWViYSBzaSBsb3MgdmFsb3JlcyBkZWwgY2FuYWwgYWN0dWFsIHNvbiBpZ3VhbGVzIGEgbG9zIGluZ3Jlc2FkbyBwb3IgcGFyYW1ldHJvcy5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgTm9tYnJlIGRlbCBjYW5hbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlICBMb2NhbGUgZGVsIGNhbmFsXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHNpIGVzIGVsIG1pc21vIGNhbmFsLCBGYWxzZSBjYXNvIGNvbnRyYXJpby5cblx0ICovXG5cdHByaXZhdGUgc2FtZUNoYW5uZWwgPSAoY2hhbm5lbDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZyk6IGJvb2xlYW4gPT4gKGNoYW5uZWwgPT0gdGhpcy5fYXBpQ29uc3RzLkNIQU5ORUwpICYmIChsb2NhbGUgPT0gdGhpcy5fYXBpQ29uc3RzLkxPQ0FMRSlcblxuXHQvKipcblx0ICogQ2FtYmlhIGRlIGNhbmFsXG5cdCAqIEBwYXJhbSBjaGFubmVsQ29uZmlnIGRlYmUgc2VyIHVuIG9iamV0byBxdWUgY29udGVuZ2EgYWwgbWVub3MgbGFzIGtleXMgY2hhbm5lbCB5IGxvY2FsZS5cblx0ICovXG5cdHByaXZhdGUgY2hhbmdlQ2hhbm5lbCA9IChjaGFubmVsQ29uZmlnOiBhbnkpID0+IHtcblx0XHR0aGlzLl9jb25zdGFudHMubW9kaWZ5Q2hhbm5lbENvbmZpZyh7XG5cdFx0XHRjaGFubmVsOiBjaGFubmVsQ29uZmlnLmNoYW5uZWwsXG5cdFx0XHRsb2NhbGU6IGNoYW5uZWxDb25maWcubG9jYWxlLFxuXHRcdFx0Y2hlY2tvdXRWaWV3OiBjaGFubmVsQ29uZmlnLmNoZWNrb3V0Vmlld1xuXHRcdH0pXG5cdH1cblx0Z2V0VXNlclByb2ZpbGUoKTogT2JzZXJ2YWJsZTxVc2VyIHwgbnVsbD4ge1xuXHRcdHJldHVybiAodGhpcy5fdXNlciAmJiBvZih0aGlzLl91c2VyKSkgfHwgdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuXHR9XG5cdHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogT2JzZXJ2YWJsZTxVc2VyIHwgbnVsbD4ge1xuXHRcdHRoaXMuX3VzZXIgPSBuZXcgVXNlcigpO1xuXHRcdGlmICghdGhpcy5sb2FkVXNlckZyb21TdG9yYWdlKCkpIHtcblx0XHRcdHRoaXMuX3VzZXIgPSBudWxsXG5cdFx0fVxuXHRcdHJldHVybiBvZih0aGlzLl91c2VyKTtcblx0fVxufVxuIl19
|