@smarterplan/ngx-smarterplan-core 1.2.36 → 1.2.38

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.
@@ -864,7 +864,16 @@ export class MatterportService {
864
864
  this.dictionnaryObjects3D.get(uuid).obj3D.visible = false;
865
865
  }
866
866
  getObject3DModelNodeFromDictionnary(uuid) {
867
- return this.dictionnaryObjects3D.get(uuid);
867
+ let obj = this.dictionnaryObjects3D.get(uuid);
868
+ if (!obj) {
869
+ console.log("weird thing again");
870
+ return null;
871
+ }
872
+ //might break things or fix everything ..?
873
+ if (obj.obj3D.uuid != uuid) {
874
+ console.log("we have THE problem");
875
+ obj.obj3D.uuid = uuid;
876
+ }
868
877
  }
869
878
  /**
870
879
  * Creates MattertagData and start repositioning (creates temporary mattertag that follows the cursor)
@@ -1482,7 +1491,10 @@ export class MatterportService {
1482
1491
  toggleObjectVisibility(objectId) {
1483
1492
  let obj = this.dictionnaryObjects3D.get(objectId);
1484
1493
  obj.obj3D.visible = !obj.obj3D.visible;
1485
- //return obj.obj3D.visible;
1494
+ }
1495
+ isObjectVisible(objectId) {
1496
+ let obj = this.dictionnaryObjects3D.get(objectId);
1497
+ return obj.obj3D.visible;
1486
1498
  }
1487
1499
  async pointCameraTo3DObject(objectId) {
1488
1500
  let obj = this.dictionnaryObjects3D.get(objectId);
@@ -1563,4 +1575,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1563
1575
  type: Inject,
1564
1576
  args: ['config']
1565
1577
  }] }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.BaseVisibilityService }, { type: i0.NgZone }]; } });
1566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsSUFBSSxHQUNMLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBRVgsbUJBQW1CLEVBRW5CLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULGtCQUFrQixHQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFJL0IsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRzVDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN2RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFDckYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBR3ZGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7QUF3QnJFLE1BQU0sT0FBTyxpQkFBaUI7SUFvSjVCLFlBQ29CLE1BQWMsRUFDeEIsTUFBYyxFQUNkLFdBQTJCLEVBQzNCLGlCQUF3QyxFQUN4QyxNQUFjO1FBSGQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXVCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVE7UUF2SmhCLFVBQUssR0FBVSxFQUFFLENBQUMsQ0FBQSxrQkFBa0I7UUFFcEMsVUFBSyxHQUFpQixFQUFFLENBQUM7UUFVMUIsdUJBQWtCLEdBQVEsRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDO1FBUTdDLGtDQUE2QixHQUFHLEtBQUssQ0FBQztRQUs5QyxlQUFlO1FBQ1Asb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsb0JBQWUsR0FBVyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFFN0QsOERBQThEO1FBQ3RELGlCQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUV6QywwREFBMEQ7UUFDbEQsb0JBQWUsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV4RCx5QkFBb0IsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVuRCw4QkFBeUIsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUl4RCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQix5QkFBb0IsR0FBYSxFQUFFLENBQUM7UUFFcEMsZUFBVSxHQUFHO1lBQ25CLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLEdBQUc7U0FDWixDQUFDO1FBRU0sZUFBVSxHQUFHO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQztRQUVLLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBTTdCLGlCQUFZLEdBQW9CLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsK0JBQStCO1FBQ3hCLHNCQUFpQixHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBb0J2RCxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUV4QixjQUFTLEdBQThDLElBQUksT0FBTyxFQUFFLENBQUM7UUFRckUscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUV6QixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFMUIsc0JBQWlCLEdBQWUsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUVuRCx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRWhELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXpDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBUXZCOztXQUVHO1FBQ0gsNEJBQXVCLEdBQUcsR0FBRyxFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdkUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO2dCQUN6RixhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7Z0JBQ3JGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzdEO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBRUYsNkJBQXdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMvQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsOEJBQXlCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsOEJBQThCLENBQUMsU0FBUyxHQUFHO1NBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7O1NBRWhELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7O1NBRTlDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsaUVBQWlFO1lBQ2pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0RCxDQUFDLENBQUE7UUFTQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QjtZQUNoQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0RyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3hCLE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNqRCxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFO29CQUNuQyxJQUFJLElBQUksQ0FBQyw2QkFBNkIsRUFBRTt3QkFDdEMsT0FBTztxQkFDUjtvQkFFRCxNQUFNLElBQUksR0FBRzt3QkFDWCxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXO3dCQUM3QixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO3FCQUMvQixDQUFDO29CQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNyRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7b0JBQzlELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztvQkFDN0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO29CQUNyRCw4REFBOEQ7b0JBQzlELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBM0dELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsY0FBYyxDQUFDLEtBQWE7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQXVHRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsVUFBMEIsRUFDMUIsU0FBbUIsUUFBUSxDQUFDLElBQUk7UUFFaEMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osa0NBQWtDO1lBQ2xDLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ3pDLHVCQUF1QixDQUNULENBQUM7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFnQixDQUFDO1lBQ3pFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ25DLGdCQUFnQixDQUNJLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxPQUFPO2FBQ1I7WUFFRCxnQkFBZ0I7WUFDaEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUNqQyxPQUFPLEVBQ1AsSUFBSSxDQUFDLHVCQUF1QixDQUM3QixDQUFDO2dCQUNGLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FDakMsYUFBYSxFQUNiLElBQUksQ0FBQyx3QkFBd0IsQ0FDOUIsQ0FBQzthQUNIO1lBQ0Qsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUNuRCxTQUFTLENBQ0ssQ0FBQztZQUNqQixJQUFJLENBQUMsOEJBQThCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDMUQsT0FBTyxDQUNPLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ2hDLHFEQUFxRDtnQkFDckQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUMzQyxPQUFPLEVBQ1AsSUFBSSxDQUFDLHlCQUF5QixDQUMvQixDQUFDO2FBQ0g7WUFFRCxXQUFXO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDNUMsTUFBTSxDQUFDLGdCQUFnQixDQUNyQixNQUFNLEVBQ04sS0FBSztnQkFDSCxJQUFJO29CQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDNUMsY0FBYyxFQUNkLDJCQUEyQixFQUMzQixLQUFLLENBQ04sQ0FBQztpQkFDSDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQixPQUFPO2lCQUNSO2dCQUVELGdEQUFnRDtnQkFDaEQsUUFBUSxNQUFNLEVBQUU7b0JBQ2QsS0FBSyxRQUFRLENBQUMsSUFBSTt3QkFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUM1QixhQUFhLEVBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUNsQyxDQUFDO3dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FDckMsQ0FBQzt3QkFDRixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQzVCLGNBQWMsRUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQ25DLENBQUM7d0JBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUM1QixXQUFXLEVBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUNoQyxDQUFDO3dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsZUFBZSxFQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FDcEMsQ0FBQzt3QkFFRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDOzRCQUNuQyxPQUFPLEVBQUUsVUFDUCxLQUFVLEVBQ1YsSUFBcUIsRUFDckIsVUFBZTtnQ0FFZixlQUFlO2dDQUNmLHNDQUFzQztnQ0FDdEMsYUFBYTtnQ0FDYixZQUFZO2dDQUNaLEtBQUs7Z0NBQ0wsbUNBQW1DO2dDQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7NEJBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzRCQUNaLG1CQUFtQixFQUFFLFVBQVUsVUFBZTtnQ0FDNUMsK0RBQStEO2dDQUMvRCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQzs0QkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7eUJBQ2IsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ2xDLFVBQVUsb0JBQXFDOzRCQUM3QyxxQ0FBcUM7NEJBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDOzRCQUNuRCxzRkFBc0Y7d0JBQ3hGLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQzt3QkFDRixNQUFNO29CQUNSLEtBQUssUUFBUSxDQUFDLE1BQU07d0JBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsV0FBVyxFQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDaEMsQ0FBQzt3QkFDRixNQUFNO29CQUNSLEtBQUssUUFBUSxDQUFDLEtBQUs7d0JBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDNUIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUMxQyxDQUFDO3dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUM1QyxDQUFDO3dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUN2QyxDQUFDO3dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUN2QyxDQUFDO3dCQUNGLE1BQU07b0JBQ1I7d0JBQ0UsTUFBTTtpQkFDVDtnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQzVCLGVBQWUsRUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQ3BDLENBQUM7Z0JBRUYsa0hBQWtIO2dCQUNsSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDLENBQUMsQ0FBQztnQkFFSCx3QkFBd0I7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQ3JDLFVBQVUsWUFBaUI7b0JBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDO29CQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO3dCQUNuQyxJQUFJLENBQUMseUJBQXlCLEdBQUc7NEJBQy9CLENBQUMsRUFBRSxDQUFDOzRCQUNKLENBQUMsRUFBRSxDQUFDOzRCQUNKLENBQUMsRUFBRSxDQUFDO3lCQUNMLENBQUM7cUJBQ0g7b0JBRUQsSUFDRSxJQUFJLENBQUMsZUFBZSxLQUFLLGtCQUFrQixDQUFDLE9BQU87d0JBQ25ELElBQUksQ0FBQyxpQkFBaUIsRUFDdEI7d0JBQ0EsOERBQThEO3dCQUM5RCwyREFBMkQ7d0JBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztxQkFDbkQ7b0JBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSzt3QkFDMUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNqSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7d0JBQ3BELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUM7cUJBQzVDO2dCQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztnQkFFRixhQUFhO2dCQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztvQkFDL0IsUUFBUSxJQUFJLEVBQUU7d0JBQ1osS0FBSyxnQkFBZ0I7NEJBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDOzRCQUM5QyxNQUFNO3dCQUNSLEtBQUssZ0JBQWdCOzRCQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQzs0QkFDOUMsTUFBTTt3QkFDUixLQUFLLGFBQWE7NEJBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDOzRCQUMzQyxNQUFNO3dCQUNSLEtBQUssb0JBQW9COzRCQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQzs0QkFDbEQsTUFBTTt3QkFDUjs0QkFDRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztxQkFDL0M7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDeEQsQ0FBQyxDQUFDLENBQUM7Z0JBRUgscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUM1QixTQUFTLE1BQU0sQ0FBQyxJQUFTO29CQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFFdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEMsc0RBQXNEO29CQUN0RCxvREFBb0Q7b0JBQ3BELDRDQUE0QztnQkFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO2dCQUVGLHNCQUFzQjtnQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDNUIsbUJBQW1CLEVBQUUsU0FBUyxNQUFNLENBQUMsVUFBYzt3QkFDakQsMkNBQTJDO3dCQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUNiLENBQUMsQ0FBQztnQkFFSCw2QkFBNkI7Z0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQzlCLFNBQVMsTUFBTSxDQUFDLFlBQTZCO29CQUMzQyw0Q0FBNEM7b0JBQzVDLElBQUksWUFBWSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUU7d0JBQzNCLDhEQUE4RDtxQkFDL0Q7eUJBQU07d0JBQ0wsbURBQW1EO3dCQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzFDO2dCQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztnQkFFRiwwQkFBMEI7Z0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzVCLG1CQUFtQixFQUFFLFNBQVMsR0FBRyxDQUFZLFVBQWU7d0JBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ2IsQ0FBQyxDQUFDO2dCQUVILGlDQUFpQztnQkFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7b0JBQ3ZDLHlCQUF5QjtvQkFDekIsSUFBSTt3QkFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLGFBQWEsRUFBQzs0QkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDOzRCQUMzQyxPQUFPO3lCQUNSO3dCQUNELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FDeEMsYUFBYSxDQUFDLFNBQVMsRUFBRSxFQUN6QixhQUFhLENBQUMsT0FBTyxFQUFFLENBQ3hCLENBQUM7d0JBQ0YsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFOzRCQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0NBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDOUIsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7cUJBQ0Y7b0JBQUMsTUFBTTt3QkFDTixPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7cUJBQzVDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILGdCQUFnQjtnQkFDaEIseURBQXlEO2dCQUN6RCxpR0FBaUc7Z0JBQ2pHLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNsQyxFQUFFLENBQ0gsQ0FBQztnQkFFRjs7bUJBRUc7Z0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ1Qsc0JBQXNCLEVBQ3RCLFVBQVUsRUFBRSxFQUFFLElBQUk7b0JBQ2hCLDhEQUE4RDtvQkFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO2dCQUVGLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNULG9CQUFvQixFQUNwQixVQUFVLE9BQU8sRUFBRSxPQUFPO29CQUN4QixtRUFBbUU7b0JBQ25FLElBQUksT0FBTyxLQUFLLG9CQUFvQixFQUFFO3dCQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO3FCQUMvQjtnQkFDSCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7Z0JBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDMUIsVUFBVSxRQUFRLEVBQUUsUUFBUTtvQkFDMUIsNENBQTRDO29CQUM1Qyw2Q0FBNkM7b0JBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7b0JBQy9CLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFDekIsVUFBVSxTQUFTLEVBQUUsT0FBTztvQkFDMUIsK0NBQStDO29CQUMvQyxzREFBc0Q7b0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztnQkFFRix1Q0FBdUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFFdEMsa0VBQWtFO2dCQUNsRSw2Q0FBNkM7Z0JBQzdDLGtEQUFrRDtnQkFDbEQsdUNBQXVDO2dCQUN2QyxzQ0FBc0M7Z0JBQ3RDLHNEQUFzRDtnQkFDdEQsTUFBTTtnQkFHTiw4REFBOEQ7Z0JBQzlELDhDQUE4QztnQkFDOUMsZ0NBQWdDO2dCQUNoQyx3REFBd0Q7Z0JBQ3hELEVBQUU7Z0JBQ0YsNkJBQTZCO2dCQUM3QixvREFBb0Q7Z0JBQ3BELEVBQUU7Z0JBQ0YseUJBQXlCO2dCQUN6QixZQUFZO2dCQUNaLHFDQUFxQztnQkFDckMsNEVBQTRFO2dCQUM1RSx5Q0FBeUM7Z0JBQ3pDLCtCQUErQjtnQkFDL0Isd0JBQXdCO2dCQUN4Qiw0Q0FBNEM7Z0JBQzVDLGVBQWU7Z0JBQ2YsYUFBYTtnQkFDYixZQUFZO2dCQUNaLG9CQUFvQjtnQkFDcEIsc0RBQXNEO2dCQUN0RCwwQkFBMEI7Z0JBQzFCLFFBQVE7Z0JBQ1IscUJBQXFCO2dCQUNyQixnQkFBZ0I7Z0JBQ2hCLFFBQVE7Z0JBQ1IsRUFBRTtnQkFDRix5QkFBeUI7Z0JBQ3pCLFlBQVk7Z0JBQ1osd0ZBQXdGO2dCQUN4RixvQkFBb0I7Z0JBQ3BCLHNEQUFzRDtnQkFDdEQsMEJBQTBCO2dCQUMxQixRQUFRO2dCQUNSLHFCQUFxQjtnQkFDckIsZ0JBQWdCO2dCQUNoQixRQUFRO2dCQUNSLEVBQUU7Z0JBQ0YsbUNBQW1DO2dCQUNuQyxrQ0FBa0M7Z0JBQ2xDLHFDQUFxQztnQkFDckMsb0NBQW9DO2dCQUNwQyx3Q0FBd0M7Z0JBQ3hDLGlDQUFpQztnQkFDakMsNkJBQTZCO2dCQUM3QixnREFBZ0Q7Z0JBQ2hELHVDQUF1QztnQkFDdkMsK0RBQStEO2dCQUMvRCwrQkFBK0I7Z0JBQy9CLG1CQUFtQjtnQkFDbkIsK0JBQStCO2dCQUMvQiw4REFBOEQ7Z0JBQzlELFlBQVk7Z0JBQ1osRUFBRTtnQkFDRix3REFBd0Q7Z0JBQ3hELGFBQWE7Z0JBQ2Isb0NBQW9DO2dCQUNwQyxvREFBb0Q7Z0JBQ3BELG1DQUFtQztnQkFDbkMsc0JBQXNCO2dCQUN0QixFQUFFO2dCQUNGLHlFQUF5RTtnQkFDekUsZ0RBQWdEO2dCQUNoRCw0REFBNEQ7Z0JBQzVELGlEQUFpRDtnQkFDakQsK0JBQStCO2dCQUMvQixzQkFBc0I7Z0JBQ3RCLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixVQUFVO2dCQUNWLGdDQUFnQztnQkFDaEMsa0JBQWtCO2dCQUNsQixpREFBaUQ7Z0JBQ2pELDZIQUE2SDtnQkFDN0gsTUFBTTtnQkFDTixNQUFNO2dCQUVOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQTBDO1FBQ3RELElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNCLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxFQUFFO0lBQ0YsNkNBQTZDO0lBQzdDLEVBQUU7SUFDRjs7T0FFRztJQUNILDZCQUE2QjtRQUMzQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUM3QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1lBQy9CLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxZQUFZLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDcEQsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO2dCQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUM7WUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsY0FBYyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUNyQyxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUMsSUFBSSxDQUNKLFVBQVUsYUFBa0I7WUFDMUIsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7WUFDdkMsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxJQUFJLEdBQUc7WUFDWCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztTQUM3QixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsRUFBRTtJQUNGLDhCQUE4QjtJQUM5QixFQUFFO0lBQ0Y7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsSUFDRSxJQUFJLENBQUMsZUFBZSxLQUFLLGtCQUFrQixDQUFDLE9BQU87WUFDbkQsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFDNUIsSUFBSSxDQUFDLHlCQUF5QixDQUMvQixHQUFHLEVBQUUsRUFDTjtZQUNBLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFFMUMsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVztnQkFDN0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTthQUMvQixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQ0wsQ0FBQztZQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUM5QixNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQ25DLElBQUksQ0FBQztZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDMUUsSUFBSSxDQUFDLHlCQUF5QixHQUFHO2dCQUMvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUTthQUNoQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CLENBQUMsU0FBaUI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRTtZQUNuQyxjQUFjLEVBQUU7Z0JBQ2QsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNyQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3JDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQzthQUN0QztZQUNELFVBQVUsRUFBRTtnQkFDVixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUc7Z0JBQ3JDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRztnQkFDckMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHO2FBQ3RDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFDLElBQVMsRUFBRSxJQUFTO1FBQ2xDLE1BQU0sSUFBSSxHQUFHO1lBQ1gsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVztZQUM3QixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO1NBQy9CLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQy9DLElBQUksRUFDSixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FDTCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUMvQyxJQUFJLEVBQ0osSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQ0wsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZCxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxFQUFFO0lBQ0YsMENBQTBDO0lBQzFDLEVBQUU7SUFDRjs7O09BR0c7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsYUFBNEI7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUN4QixhQUE0QjtRQUU1QixJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUk7WUFDRixPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDM0Q7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsa0NBQWtDLEVBQ2xDLEtBQUssRUFDTCxhQUFhLENBQUMsT0FBTyxFQUFFLENBQ3hCLENBQUM7U0FDSDtRQUNELElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLGtFQUFrRTtZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDckQsT0FBTyxXQUFXLENBQUM7U0FDcEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjtRQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWU7aUJBQ3RDLEdBQUcsQ0FBQyxPQUFPLENBQUM7aUJBQ1oscUJBQXFCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0NBQWdDLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxXQUFtQixFQUFFLFFBQWdCO1FBQ2hFLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsc0JBQXNCLENBQUMsV0FBbUIsRUFBRSxRQUFnQjtRQUNoRSxJQUFJO1lBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM5QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnQ0FBZ0MsRUFDaEMsUUFBUSxFQUNSLHFCQUFxQixDQUN0QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQ3hCLFdBQW1CLEVBQ25CLGFBQTRCO1FBRTVCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixRQUFRLEdBQUcsR0FBRyxRQUFRLFlBQVksQ0FBQzthQUNwQztpQkFBTTtnQkFDTCxRQUFRLEdBQUcsR0FBRyxRQUFRLGNBQWMsQ0FBQzthQUN0QztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0MsT0FBTztTQUNSO1FBQ0QsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1FBQ3hELElBQUksUUFBUSxHQUFHLFFBQVEsYUFBYSxFQUFFLENBQUM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDNUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLGNBQWMsRUFBRTtvQkFDL0MsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDdkU7YUFDRjtZQUNELElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQzdELE9BQU8sQ0FBQyxHQUFHLENBQ1osQ0FBQztnQkFDRixJQUFJLFVBQVUsRUFBRTtvQkFDZCxJQUFJO3dCQUNGLFFBQVEsR0FBRyxRQUFRLGFBQWEsSUFBSSxXQUFXLElBQUksYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUNuRixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQzNELGFBQWEsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDO3FCQUNwQztvQkFBQyxNQUFNO3dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbkM7aUJBQ0Y7YUFDRjtZQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7YUFDM0I7U0FDRjtRQUNELElBQUk7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFtQjtRQUMvQixJQUFJLFdBQVcsS0FBSyxFQUFFO1lBQUUsT0FBTztRQUMvQixJQUFJO1lBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNwQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxLQUFLLEVBQUUsQ0FDdEMsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUNwQyxXQUFXLEVBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDbEMsQ0FBQztTQUNIO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLDhCQUE4QixDQUNsQyxXQUFtQixFQUNuQixTQUF1QixJQUFJLEVBQzNCLFVBQW1CLElBQUk7UUFFdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUN4QixXQUFXLEVBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQ2hELENBQUM7UUFDRixJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDckIsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FDN0IsV0FBVyxFQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUM5QixXQUFtQixFQUNuQixNQUFXLEVBQ1gsT0FBZ0I7UUFFaEIsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFdBQW1CO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QyxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUMxQixPQUFnQixFQUNoQixNQUFvQixFQUNwQixHQUFRO1FBRVIsOEJBQThCO1FBQzlCLE1BQU0sRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLEdBQUcsRUFBRTtZQUNQLG9DQUFvQztZQUNwQyxPQUFPO1NBQ1I7UUFDRCxNQUFNLGFBQWEsR0FBa0IsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ2xCLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO2lCQUFNO2dCQUNMLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQzthQUNqRDtTQUNGO1FBQ0QsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEVBQUU7WUFDekIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNqRDtRQUNELGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEUsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDN0QsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQWdCLEVBQUUsTUFBb0IsRUFBRSxLQUFhO1FBQ3pFLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRSxJQUFJLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUN2QixrQ0FBa0M7WUFDbEMsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV4RSxxQ0FBcUM7WUFDckMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBRXhDLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLGdDQUFnQztZQUNoQyw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtvQkFDdkMsaURBQWlEO29CQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxjQUFzQixFQUFFLEVBQUU7b0JBQzVDLHNEQUFzRDtvQkFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQztnQkFDRixTQUFTLENBQUMsRUFBRSxDQUNWLFNBQVMsQ0FBQyxZQUFZLEVBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDMUQsQ0FBQztnQkFDRixTQUFTLENBQUMsRUFBRSxDQUNWLFNBQVMsQ0FBQyxZQUFZLEVBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDMUQsQ0FBQztnQkFDRixTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDaEQsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxTQUFTLENBQUMsRUFBRSxDQUNWLFNBQVMsQ0FBQyxTQUFTLEVBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdkQsQ0FBQztnQkFDRixTQUFTLENBQUMsRUFBRSxDQUNWLFNBQVMsQ0FBQyxhQUFhLEVBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0QsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLGlHQUFpRztZQUNqRyxNQUFNLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxHQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELElBQUksT0FBTyxFQUFFO2dCQUNYLHFCQUFxQjtnQkFDckIsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQzFELE9BQU8sQ0FBQyxZQUFZLENBQ3JCLENBQUM7Z0JBQ0YsU0FBUztnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO29CQUNoQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7b0JBQ25CLFdBQVcsRUFBRSxjQUFjO2lCQUM1QixDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyw0QkFBNEI7UUFDaEMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFNBQWlCO1FBQzlDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDNUQsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJO2dCQUNGLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNwQztZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3REO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFZO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDNUQsQ0FBQztJQUVELG1DQUFtQyxDQUFDLElBQVk7UUFDOUMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLDZCQUE2QixDQUFDLE9BQWdCLEVBQUUsT0FBcUI7UUFDekUsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsMENBQTBDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ3pCLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN0RCxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMscUNBQXFDO1NBQ2pFO1FBQ0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsc0JBQXNCLENBQUMsT0FBZ0I7UUFDM0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZSxDQUFDLFlBQTZCO1FBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQ0FBZ0MsQ0FBQyxJQUF5QjtRQUN4RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEMsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLG1CQUFtQixDQUFDLGFBQWE7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxjQUFjLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFVBQVU7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxjQUFjLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFlBQVk7Z0JBQ25DLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxjQUFjLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFFBQVE7Z0JBQy9CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxHQUFXLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDbEU7cUJBQU07b0JBQ0wsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUN2QjtnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxNQUFNO1lBQ1IsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRO2dCQUMvQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsY0FBYyxjQUFjLENBQUMsRUFBRTtvQkFDakUsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztpQkFDNUIsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFFBQVE7Z0JBQy9CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxjQUFjLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLGlCQUFpQjtnQkFDeEMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsNkJBQTZCO29CQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDbEIsQ0FBQyxTQUFTLElBQUksQ0FBQyxjQUFjLGFBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUNqRSxFQUFDLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUNuQyxDQUFDO2lCQUNIO2dCQUNELE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLGVBQWU7Z0JBQ3RDLElBQUksT0FBTyxFQUFFO29CQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNsQjt3QkFDRSxTQUFTLElBQUksQ0FBQyxjQUFjLFdBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQ3BDLEVBQUU7cUJBQ0gsRUFDRCxFQUFDLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUNuQyxDQUFDO2lCQUNIO2dCQUNELE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLGtCQUFrQjtnQkFDekMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ2xCO3dCQUNFLFNBQVMsSUFBSSxDQUFDLGNBQWMsVUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsU0FDcEMsRUFBRTtxQkFDSCxFQUNELEVBQUMsV0FBVyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxFQUFDLENBQ25DLENBQUM7aUJBQ0g7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtnQkFDcEMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO3dCQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7d0JBQzVCLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsRUFBRSxtQkFBbUIsRUFBRyxPQUFPO3FCQUNoRSxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsYUFBYTtnQkFDcEMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO3dCQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7d0JBQzVCLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsRUFBRSxtQkFBbUIsRUFBRyxPQUFPO3FCQUNoRSxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FDeEIsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsT0FBZ0IsRUFDaEIsTUFBa0IsSUFBSTtRQUV0QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUQsSUFBSTtZQUNGLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEUsaUJBQWlCO1lBQ2pCLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixDQUN0QyxXQUFXLEVBQ1gsTUFBTSxFQUNOLE9BQU8sRUFDUCxHQUFHLENBQ0osQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FDakMsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsT0FBZ0IsRUFDaEIsTUFBa0IsSUFBSTtRQUV0QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxNQUFNLFdBQVcsR0FBRztZQUNsQixjQUFjLEVBQUU7Z0JBQ2QsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLENBQUM7YUFDTDtZQUNELFVBQVUsRUFBRTtnQkFDVix3RUFBd0U7Z0JBQ3hFLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxHQUFHO2dCQUNOLENBQUMsRUFBRSxDQUFDO2FBQ0w7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlO2FBQ2pCLEdBQUcsQ0FBQyxXQUFXLENBQUM7YUFDaEIsV0FBVyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUzQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixTQUFTO2FBQ1Y7WUFDRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsSUFBSSxLQUFLLEtBQUssV0FBVyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU07YUFDUDtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxtQkFBbUIsQ0FBQyxTQUFpQjtRQUkxQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzdELElBQUksYUFBYSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pDLEtBQUssR0FBRyxXQUFXLENBQUM7Z0JBQ3BCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdkQsT0FBTyxHQUFHLEtBQUssQ0FBQztpQkFDakI7YUFDRjtTQUNGO1FBQ0QsT0FBTyxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDL0I7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLElBQUk7Z0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDRCQUE0QixDQUFDLFdBQW1CO1FBQzlDLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlDO1FBQUMsTUFBTTtZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDbkU7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxFQUFFO0lBQ0YsNkRBQTZEO0lBQzdELEVBQUU7SUFDRixLQUFLLENBQUMsd0JBQXdCO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFDNUQsT0FBTztTQUNSO1FBQ0QsSUFBSTtZQUNGLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDOUM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUk7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCO1FBQzVCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQixvRkFBb0Y7WUFDcEYsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBQzVELE9BQU87YUFDUjtZQUNELElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUM5QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDMUM7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNuRCxPQUFPLENBQUMsR0FBRyxDQUNULDJCQUEyQixRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQy9ELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FDdEIsU0FBaUIsRUFDakIsMEJBQWtDLElBQUk7UUFFdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87U0FDUjtRQUNELDRCQUE0QjtRQUM1QixrREFBa0Q7UUFDbEQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3BDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLHVCQUF1QixDQUN0RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQixlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2hDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FDOUQsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQixlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDN0IsQ0FBQztTQUNIO1FBQ0QsK0JBQStCO1FBQy9CLElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztZQUNqQixPQUFPLEtBQUssRUFBRTtnQkFDWixJQUFJO29CQUNGLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUM1QyxlQUFlLENBQUMsUUFBUSxDQUN6QixDQUFDO29CQUNGLGtEQUFrRDtvQkFDbEQsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDZjtnQkFBQyxPQUFPLEtBQUssRUFBRTtvQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMzQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDakI7YUFDRjtTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUN0QixLQUFhLEVBQ2IsV0FBcUMsSUFBSTtRQUV6QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUN2RCxPQUFPO1NBQ1I7UUFDRCxvRUFBb0U7UUFDcEUsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3BCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUNqRCxPQUFPO2FBQ1I7WUFDRCxJQUFJO2dCQUNGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDakMsVUFBVSxFQUFFLG9CQUFvQjtvQkFDaEMsY0FBYyxFQUFFLElBQUk7aUJBQ3JCLENBQUMsQ0FBQzthQUNKO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztnQkFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM1QztZQUNELElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCO2FBQzFGO1FBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHdCQUF3QjtRQUt0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBdUI7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDekMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVE7UUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFDaEIsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1Qix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FDcEMsT0FBTyxFQUNQLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQ3BDLGFBQWEsRUFDYixJQUFJLENBQUMsd0JBQXdCLENBQzlCLENBQUM7UUFFRix3QkFBd0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUM5QyxVQUFVLEVBQ1YsSUFBSSxDQUFDLHlCQUF5QixDQUMvQixDQUFDO1NBQ0g7UUFDRCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QjtZQUNoQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0RyxhQUFhLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGVBQXlCO1FBQ25ELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEMsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxJQUFJLENBQUMsQ0FBQzthQUNkO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxFQUFFO0lBQ0YscURBQXFEO0lBQ3JELEVBQUU7SUFDRixLQUFLLENBQUMsa0JBQWtCO1FBQ3RCLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxRCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFakMsc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0IsaUNBQWlDO1lBQ2pDOzZDQUNpQztZQUNqQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFYixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDdEUsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXBCLDRCQUE0QjtZQUU1QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQ2YsR0FBYyxFQUNkLElBQTZCO1FBRTdCLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ25DLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1RCxrRUFBa0U7WUFDbEUsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixRQUFRO1lBQ1IsSUFBSSx3QkFBd0IsR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSw2QkFBNkIsR0FBRyxLQUFLLENBQUM7WUFDMUMsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFFN0I7O2VBRUc7WUFDSCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssaUJBQWlCLEVBQUU7Z0JBQ3BDLHdCQUF3QixHQUFHLElBQUksQ0FBQzthQUNqQztZQUNELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxpQkFBaUIsRUFBRTtnQkFDcEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtnQkFDMUIsNkJBQTZCLEdBQUcsSUFBSSxDQUFDO2FBQ3RDO1lBQ0QsSUFBRyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1lBRUQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRztnQkFDZCxHQUFHLEVBQUUsNkJBQTZCLEdBQUcsQ0FBQyxNQUFNLEdBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQzFELEVBQUU7Z0JBQ0Ysc0dBQXNHO2dCQUN0RyxhQUFhLEVBQUUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztnQkFDdkMsc0dBQXNHO2dCQUN0RyxhQUFhLEVBQUUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztnQkFDdkMsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsZUFBZSxFQUFFLElBQUk7YUFDdEIsQ0FBQztZQUdGLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsS0FBSyxNQUFNLENBQUM7Z0JBQ1osS0FBSyxLQUFLO29CQUNSLFNBQVMsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUixLQUFLLE1BQU0sQ0FBQztnQkFDWixLQUFLLEtBQUs7b0JBQ1IsU0FBUyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM1RCxNQUFNO2dCQUNSLEtBQUssT0FBTyxDQUFDO2dCQUNiLEtBQUssTUFBTTtvQkFDVCxTQUFTLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzdELE1BQU07Z0JBQ1IsS0FBSyxNQUFNLENBQUM7Z0JBQ1osS0FBSyxLQUFLO29CQUNSLFNBQVMsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDN0QsTUFBTTtnQkFDUixLQUFLLE1BQU0sQ0FBQztnQkFDWixLQUFLLEtBQUs7b0JBQ1IsU0FBUyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM1RCxNQUFNO2dCQUVSO29CQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFDcEMsTUFBTTthQUNUO1lBRUQsbURBQW1EO1lBQ25EOzs7Ozs7NENBTWdDO1lBQ2hDLDhDQUE4QztZQUM5QyxxQkFBcUI7WUFFckIsNkJBQTZCO1lBQzdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pDLFVBQVUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUU7b0JBQ3pDLFNBQVMsRUFBRSxDQUFDO29CQUNaLEtBQUssRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDO2lCQUNoQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQzthQUNoQztZQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDMUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ2YsQ0FBQztZQUVGLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDMUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ2YsQ0FBQztZQUNGLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUcsZ0JBQWdCLEVBQ25CO2dCQUNFOzttQkFFRztnQkFDSCxJQUFJLENBQUMsY0FBYyxHQUFDLFNBQVMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDN0I7WUFFRCwyREFBMkQ7WUFDM0Qsc0ZBQXNGO1lBQ3RGLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyw0QkFBNEIsQ0FDL0IsU0FBUyxFQUNULFdBQVcsRUFDWCxJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUU7Z0JBQ2pFLDhFQUE4RTtnQkFDOUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7YUFDN0M7aUJBQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO2dCQUNqQixTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBRXBDLHVDQUF1QztZQUN2QyxpQ0FBaUM7WUFDakMseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUV0RTs7Ozs7Ozs7Ozs7Ozs7OEJBY2tCO1lBRWxCLElBQUksd0JBQXdCLEVBQUU7Z0JBRTVCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQ3pEO29CQUNFLFdBQVcsRUFBRSxHQUFHO29CQUNoQixVQUFVLEVBQUUsRUFBRTtvQkFDZCxlQUFlLEVBQUUsRUFBRTtvQkFDbkIsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsZUFBZSxFQUFFO3dCQUNmLEdBQUcsRUFBRSxHQUFHO3dCQUNSLEdBQUcsRUFBRSxJQUFJO3dCQUNULEdBQUcsRUFBRSxDQUFDO3FCQUNQO29CQUNELGVBQWUsRUFBRTt3QkFDZixHQUFHLEVBQUUsQ0FBQyxFQUFFO3dCQUNSLEdBQUcsRUFBRSxDQUFDLEVBQUU7d0JBQ1IsR0FBRyxFQUFFLENBQUM7cUJBQ1A7b0JBQ0QsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsV0FBVyxFQUFFLENBQUM7b0JBQ2QsVUFBVSxFQUFFLENBQUMsRUFBRTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUNMLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7b0JBQ3RDLEVBQUUsRUFBRSxnQkFBZ0I7b0JBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDcEMsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsU0FBUyxFQUFFLFFBQVE7b0JBQ25CLFFBQVEsRUFBRSxZQUFZO2lCQUN2QixDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7b0JBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDVjthQUNGO1lBRUQsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsZ0ZBQWdGO2dCQUNoRixpQ0FBaUM7Z0JBQ2pDLGdDQUFnQztnQkFDaEMsZUFBZTtnQkFDZixNQUFNLEVBQUUsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNoQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEMsS0FBSyxDQUFDLE9BQU8sR0FBRztvQkFDZCxVQUFVLEVBQUUsSUFBSSxRQUFRLEVBQUU7b0JBQzFCLFFBQVEsRUFBRSxJQUFJLFFBQVEsRUFBRTtpQkFDekIsQ0FBQztnQkFDRixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNoQyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNuQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQzFDLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7b0JBQ2xDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ1Y7WUFFRCxJQUFJLDZCQUE2QixFQUFFO2dCQUNqQyxnRkFBZ0Y7Z0JBQ2hGLE1BQU0sRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzFCLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO29CQUNsQyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNWO1lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBYTtRQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDdkMsMkJBQTJCO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBYTtRQUN2QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxELDJCQUEyQjtRQUMzQixNQUFNLFNBQVMsR0FBRztZQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM5QyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDdEIsU0FBUyxFQUFFLFFBQVEsRUFBRSw0QkFBNEI7U0FDM0MsQ0FBQztRQUNULE1BQU0sUUFBUSxHQUFHLEVBQUMsRUFBRSxFQUFFLFFBQVEsRUFBaUIsQ0FBQztRQUVoRCxJQUFHO1lBQ0QsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDMUU7UUFBQSxPQUFNLEdBQVEsRUFBQyxHQUFFO1FBRWxCLGlFQUFpRTtRQUNqRSx3REFBd0Q7UUFDeEQsb0VBQW9FO1FBRXBFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFZO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQjtRQUN4QixJQUFHLElBQUksQ0FBQyxjQUFjLEVBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3pIO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyw0QkFBNEIsQ0FDaEMsU0FBYyxFQUNkLFdBQWdCLEVBQ2hCLElBQXNDLEVBQ3RDLE9BQWdCO1FBRWhCLDBEQUEwRDtRQUMxRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDOUI7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsRUFBRTtRQUNGLCtGQUErRjtRQUMvRixTQUFTLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUM5QyxFQUFFO1FBQ0YsK0NBQStDO1FBQy9DLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN2QyxFQUFFO1FBQ0YscURBQXFEO1FBQ3JELFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUM3QixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxnQ0FBZ0M7UUFFdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtZQUNyRCxJQUFJO2dCQUNGLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2FBQ3ZFO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO2FBQ3JFO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQ3JDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEQsQ0FBQzs7OEdBMzdEVSxpQkFBaUIsa0JBcUpsQixRQUFRO2tIQXJKUCxpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFzSkksTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuLy9pbXBvcnQgKiBhcyBzZXJpYWxpanNlIGZyb20gXCJzZXJpYWxpanNlXCI7XHJcbmltcG9ydCB7XHJcbiAgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzLFxyXG4gIHBvaVR5cGVUb1N0cmluZyxcclxuICB3YWl0LFxyXG59IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7TWF0dGVydGFnRGF0YX0gZnJvbSAnLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgRGJPYmplY3RUeXBlLFxyXG4gIEZlYXR1cmVUeXBlLFxyXG4gIElPYmplY3QzRCxcclxuICBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLFxyXG4gIFBPSSxcclxuICBQb2lUeXBlLFxyXG4gIFNwTW9kdWxlLFxyXG4gIFRhZ0FjdGlvbixcclxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXHJcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7T2JqZWN0M0R9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtCYXNlVGFnU2VydmljZX0gZnJvbSAnLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZVZpc2liaWxpdHlTZXJ2aWNlfSBmcm9tICcuL2Jhc2VWaXNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcclxuaW1wb3J0IHtDYW1lcmFNb2RlfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtJU2NlbmVOb2RlLCBDb21wb25lbnRPdXRwdXR9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50XCI7XHJcbmltcG9ydCB7U2VjdXJpdHlDYW1lcmF9IGZyb20gJy4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zZWN1cml0eS1jYW1lcmEvU2VjdXJpdHlDYW1lcmEnO1xyXG5pbXBvcnQge05lc3RUaGVybW9zdGF0fSBmcm9tICcuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvbmVzdC10aGVybW9zdGF0L05lc3RUaGVybW9zdGF0JztcclxuaW1wb3J0IHtQbGFuZVJlbmRlcmVyfSBmcm9tICcuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvbmVzdC10aGVybW9zdGF0L1BsYW5lUmVuZGVyZXInO1xyXG5pbXBvcnQge0NhbnZhc1JlbmRlcmVyfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL25lc3QtdGhlcm1vc3RhdC9DYW52YXNSZW5kZXJlclwiO1xyXG5pbXBvcnQge1ZpZGVvUmVuZGVyZXJ9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvdmlkZW8tcmVuZGVyZXIvVmlkZW9SZW5kZXJlclwiO1xyXG5pbXBvcnQge0hsc0xvYWRlcn0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9oc2wtbG9hZGVyL0hsc0xvYWRlclwiO1xyXG5pbXBvcnQge1R2UGxheWVyfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3R2LXBsYXllci9UdlBsYXllclwiO1xyXG5cclxuLy8gaW1wb3J0IHtDYW52YXNJbWFnZX0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvQ2FudmFzSW1hZ2VcIjtcclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gVGhyZWVqcyBPYmplY3QgM0QgaW50ZXJmYWNlXHJcbiAqL1xyXG5pbnRlcmZhY2UgVGhyZWVKU09iamVjdDNEIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHV1aWQ/OiBzdHJpbmc7XHJcbiAgcG9zaXRpb24/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG4gIHJvdGF0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxuICBzY2FsZT86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbn1cclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIE1QX1NESzogeyBjb25uZWN0OiBGdW5jdGlvbiB9O1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBzbG90czogYW55W10gPSBbXTsvL1Nsb3ROb2RlW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBub2RlczogSVNjZW5lTm9kZVtdID0gW107XHJcblxyXG4gIHB1YmxpYyBzZGs6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBjb250YWluZXI6IGFueTtcclxuXHJcbiAgLy8gUG9zaXRpb24gY2FtZXJhXHJcbiAgcHJpdmF0ZSBwb3NlTWF0dGVycG9ydDogYW55O1xyXG5cclxuICBwdWJsaWMgcG9zZUNhbWVyYTogeyByb3RhdGlvbjogYW55OyBwb3NpdGlvbjogYW55OyBzd2VlcDogYW55IH07XHJcbiAgcHVibGljIGxhc3RDYW1lcmFQb3NpdGlvbjogYW55ID0ge3g6MC4wLHk6MC4wLHo6MC4wfTtcclxuXHJcbiAgcHJpdmF0ZSBhemltdXRoYWxDcm93bjphbnk7XHJcbiAgLy8gUG9pbnRlciB0cmlja1xyXG4gIHByaXZhdGUgcG9pbnRlckJ1dHRvbjogYW55O1xyXG5cclxuICAvLyBEaXNwbGF5IGFuZCBnZXQgY3VycmVudCBwb3NpdGlvbiBvZiBjdXJzb3IgKGZvciBBZG1pbnMgb25seSlcclxuICBwcml2YXRlIGdldEN1cnNvclBvc2l0aW9uQnV0dG9uOiBhbnk7XHJcbiAgcHJpdmF0ZSBjdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb246IGFueTtcclxuICBwcml2YXRlIHRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbDogYW55O1xyXG5cclxuICBwcml2YXRlIG9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb246IGFueTtcclxuICAvLyBNZWFzdXJlIG1vZGVcclxuICBwcml2YXRlIGlzTWVhc3VyZU1vZGVPbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gIC8vIExpc3Qgb2YgY3JlYXRlZCBNYXR0ZXJ0YWcgSURzIGluIHRoZSBjdXJyZW50IHZpZXdlciBzZXNzaW9uXHJcbiAgcHJpdmF0ZSBtYXR0ZXJ0YWdJRHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgLy8gRGljdGlvbm5hcnkgb2YgTWF0dGVydGFnSUQgYW5kIGl0cyBkYXRhIChtYXR0ZXJ0YWdEYXRhKVxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlUYWdzOiBNYXA8c3RyaW5nLCBNYXR0ZXJ0YWdEYXRhPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeU9iamVjdHMzRDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNEOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBwdWJsaWMgdGhyZWVKU1NjZW5lOiBhbnk7IC8vIGdsb2JhbCByb290IHNjZW5lIChub3QgdXNlZCBub3chKVxyXG5cclxuICBwcml2YXRlIGxhc3RNZWFzdXJlID0gW107XHJcblxyXG4gIHByaXZhdGUgZGlzdGFuY2VzTGFzdE1lYXN1cmU6IG51bWJlcltdID0gW107XHJcblxyXG4gIHByaXZhdGUgcmVzb2x1dGlvbiA9IHtcclxuICAgIHdpZHRoOiA1MDAsXHJcbiAgICBoZWlnaHQ6IDYwMCxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHZpc2liaWxpdHkgPSB7XHJcbiAgICBtYXR0ZXJ0YWdzOiBmYWxzZSxcclxuICAgIHN3ZWVwczogdHJ1ZSxcclxuICB9O1xyXG5cclxuICBwdWJsaWMgdGFnc0F0dGFjaG1lbnRzOiBPYmplY3QgPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBsYXN0U2NyZWVuc2hvdFVyaTogYW55O1xyXG5cclxuICBwdWJsaWMgc3dlZXBzOiBBcnJheTxzdHJpbmc+IHwgbnVsbDtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRTd2VlcDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLy9jYW1lcmEgcG9zaXRpb24gd2l0aCByb3RhdGlvblxyXG4gIHB1YmxpYyBjdXJyZW50Q2FtZXJhUG9zZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBmbG9vcnM/OiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgc2VxdWVuY2U6IG51bWJlciB9PiB8IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX2N1cnJlbnRTcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgbGFzdE9iamVjdDNEOiBhbnk7IC8vIFRocmVlIEpTIG9iamVjdFxyXG5cclxuICBwcml2YXRlIGN1cnJlbnRGbG9vcjtcclxuXHJcbiAgcHVibGljIGdldCBjdXJyZW50U3BhY2VJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGFjZUlEO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjdXJyZW50U3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9jdXJyZW50U3BhY2VJRCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdGltZXJQb2ludGVyOiBhbnk7XHJcblxyXG4gIGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHRhZ0FjdGlvbjogU3ViamVjdDx7IGFjdGlvbjogc3RyaW5nOyBkYXRhOiBzdHJpbmcgfT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwdWJsaWMgbWF0dGVydGFnVG9Gb2xsb3c6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlO1xyXG5cclxuICBjb25maWc6IENvbmZpZztcclxuXHJcbiAgcHVibGljIGluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgbm9MaWdodEZvck9iamVjdHMgPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgY3VycmVudENhbWVyYU1vZGU6IENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLk9VVFNJREU7XHJcblxyXG4gIHB1YmxpYyBvbkNhbWVyYU1vZGVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8Q2FtZXJhTW9kZT4oKTtcclxuXHJcbiAgcHVibGljIG9uR29Ub1RhZyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgdGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuXHJcbiAgU1BNb2R1bGU6IFNwTW9kdWxlO1xyXG5cclxuICBwdWJsaWMgb2JqZWN0Q29udHJvbDogYW55O1xyXG5cclxuICBwcml2YXRlIHNlY3VyaXR5Q2FtZXJhQW5pbWF0b3I6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aW9ucyBvbiBsZWZ0IGNsaWNrIHdoZW4gcG9zaXRpb25pbmcgbWF0dGVydGFnIGluIHZpc2l0XHJcbiAgICovXHJcbiAgcG9pbnRlckxlZnRDbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKHsuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9ufSk7IC8vIGNvcHkhISBub3QgdGhlIHJlZmVyZW5jZVxyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7Li4udGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWx9KTsgLy8gY29weSEhIG5vdCB0aGUgcmVmZXJlbmNlXHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgdGhpcy51cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVmFsaWRhdGVkTWF0dGVydGFnKCk7XHJcbiAgfTtcclxuXHJcbiAgcG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuY2FuY2VsRm9sbG93aW5nQ3Vyc29yKCk7XHJcbiAgICBhbGVydCgnYWN0aW9uIGNhbmNlbGxlZCcpO1xyXG4gIH07XHJcblxyXG4gIHBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXIgPSAoZSkgPT4ge1xyXG4gICAgdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuaW5uZXJIVE1MID0gYHBvc2l0aW9uOlxyXG4gICAgICAgJHt0aGlzLnBvaW50VG9TdHJpbmcodGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbil9XFxuXHJcbiAgICAgICBub3JtYWw6XHJcbiAgICAgICAke3RoaXMucG9pbnRUb1N0cmluZyh0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbCl9XFxuXHJcbiAgICAgICBmbG9vcklkOlxyXG4gICAgICAgJHt0aGlzLnBvc2VNYXR0ZXJwb3J0LmZsb29ySWR9YDtcclxuICAgIC8vIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsLnN0eWxlLmRpc3BsYXkgPSAndmlzaWJsZSc7XHJcbiAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2NvbmZpZycpIGNvbmZpZzogQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWN0aXZlUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB2aXNpYmlsaXR5U2VydmljZTogQmFzZVZpc2liaWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxyXG4gICkge1xyXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcblxyXG4gICAgLy8gVE9ETzogb25seSBmb3IgZGV2IVxyXG4gICAgaWYgKCEhdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiAmJlxyXG4gICAgICAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCdkZXYnKSAhPT0gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCdsb2NhbGhvc3QnKSAhPT0gLTEpKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb24gPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXh0U2hvdyA9IHRoaXMucG9zZU1hdHRlcnBvcnQudGltZSArIDEwMDA7XHJcbiAgICAgICAgaWYgKG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gbmV4dFNob3cpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICAgICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGNvb3JkID0gdGhpcy5zZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sIHRoaXMucG9zZUNhbWVyYSwgc2l6ZSk7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmxlZnQgPSBgJHtjb29yZC54IC0gMjV9cHhgO1xyXG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZC55IC0gMjJ9cHhgO1xyXG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgIC8vIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyBNYXR0ZXJwb3J0IGFuZCBhbGwgbGlzdGVuZXJzL2RhdGFcclxuICAgKiBAcGFyYW0gdGFnU2VydmljZSBCYXNlVGFnU2VydmljZSAodG8gaW5qZWN0IGh0bWwpXHJcbiAgICogQHBhcmFtIG1vZHVsZSBTcE1vZHVsZSAoTXVzZXVtLCBJbW1vKSB0byBzdWJzY3JpYmUgb25seSB0byBuZWVkZWQgZnVuY3Rpb25ubmFsaXRpZXNcclxuICAgKiBAcmV0dXJucyBib29sZWFuXHJcbiAgICovXHJcbiAgYXN5bmMgaW5pdFNkayhcclxuICAgIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlLFxyXG4gICAgbW9kdWxlOiBTcE1vZHVsZSA9IFNwTW9kdWxlLklNTU9cclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnNkaykge1xyXG4gICAgICAvLyBjbGVhbiBpZiBzZGsgaXMgcnVubmluZyBhbHJlYWR5XHJcbiAgICAgIGF3YWl0IHRoaXMuYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWdTZXJ2aWNlID0gdGFnU2VydmljZTtcclxuICAgIHRoaXMuU1BNb2R1bGUgPSBtb2R1bGU7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBSZXRyaWV2ZSBET00gZWxlbWVudHNcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3ZpZXdlci1wb2ludGVyLXRyaWNrJ1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWV3ZXItbW9kdWxlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN2aWV3ZXItbW9kdWxlJ1xyXG4gICAgICApIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xyXG4gICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQWRkIGxpc3RlbmVyc1xyXG4gICAgICBpZiAodGhpcy5wb2ludGVyQnV0dG9uKSB7XHJcbiAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgdGhpcy5wb2ludGVyTGVmdENsaWNrSGFuZGxlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY2FuY2VsIG9uIHJpZ2h0IGNsaWNrXHJcbiAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAnY29udGV4dG1lbnUnLFxyXG4gICAgICAgICAgdGhpcy5wb2ludGVyUmlnaHRDbGlja0hhbmRsZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFJldHJpZXZlIERPTSBlbGVtZW50c1xyXG4gICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI2J1dHRvbidcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdGV4dCdcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24pIHtcclxuICAgICAgICAvLyBnZXQgcG9zaXRpb24gb24gTWF0dGVycG9ydCBcIm1vZGVsXCIgb24gbWlkZGxlIGNsaWNrXHJcbiAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgIHRoaXMucG9pbnRlck1pZGRsZUNsaWNrSGFuZGxlclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIExvYWQgU0RLXHJcbiAgICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIE1hdHRlcnBvcnQgU0RLJyk7XHJcbiAgICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdsb2FkJyxcclxuICAgICAgICBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IHNob3djYXNlV2luZG93Lk1QX1NESy5jb25uZWN0KFxyXG4gICAgICAgICAgICAgIHNob3djYXNlV2luZG93LFxyXG4gICAgICAgICAgICAgICdxbjl3c2FzdXk1aDJmenJicm4xbnpyMGlkJyxcclxuICAgICAgICAgICAgICAnMy41J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTG9hZCBNYXR0ZXJ0YWcgaWNvbnMgYW5kIGN1c3RvbSBzdWJzY3JpcHRpb25zXHJcbiAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgICBjYXNlIFNwTW9kdWxlLklNTU86XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tdGlja2V0JyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3RpY2tldFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tZXF1aXBtZW50JyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2VxdWlwbWVudFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tbWVhc3VyZScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9tZWFzdXJlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1kYXRhJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGFcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLW9iamVjdDNkJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX29iamVjdDNkXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG9uQWRkZWQ6IGZ1bmN0aW9uIChcclxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGFueSxcclxuICAgICAgICAgICAgICAgICAgaXRlbTogeyBwb2ludHM6IGFueSB9LFxyXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBhbnlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIFwiaXRlbSBhZGRlZCB0byB0aGUgY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgIC8vICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLm1lYXN1cmVtZW50c1tpbmRleF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlID0gaXRlbS5wb2ludHM7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiAoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGUgZW50aXJlIHVwLXRvLWRhdGUgY29sbGVjdGlvbicsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLm1vZGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1lYXN1cmVtZW50TW9kZVN0YXRlOiB7IGFjdGl2ZTogYW55IH0pIHtcclxuICAgICAgICAgICAgICAgICAgLy8gbWVhc3VyZW1lbnQgbW9kZSBzdGF0ZSBoYXMgY2hhbmdlZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTWVhc3VyZU1vZGVPbiA9IG1lYXN1cmVtZW50TW9kZVN0YXRlLmFjdGl2ZTtcclxuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0lzIG1lYXN1cmVtZW50IG1vZGUgY3VycmVudGx5IGFjdGl2ZT8gJywgbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlKTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuTVVTRVVNOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLWRhdGEnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZGF0YVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSE9URUw6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV9hdmFpbGFibGUnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV9hdmFpbGFibGVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uX3Jvb21fdW5hdmFpbGFibGUnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV91bmF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV9jaG9zZW4nLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV9jaG9zZW5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uX3Jvb21fdmlld2VkJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fdmlld2VkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICdpY29uLXBvc2l0aW9uJyxcclxuICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcG9zaXRpb25cclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gQ3VycmVudCBSb29tICh1c2VkIGZvciBnZXR0aW5nIGJvdW5kaW5nIGJveCBhbmQgZXZlbnR1YWxseSBsYXp5IGxvYWQgbWF0dGVydGFnIG9yIG9iamVjdDNEIGluc2lkZSBjdXJyZW50IFJvb20pXHJcbiAgICAgICAgICB0aGlzLnNkay5Sb29tLmN1cnJlbnQuc3Vic2NyaWJlKChjdXJyZW50Um9vbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgaGVsbG8gY3VycmVudCBSb29tICR7SlNPTi5zdHJpbmdpZnkoY3VycmVudFJvb20pfWApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gM0QgcG9zaXRpb24ncyBwb2ludGVyXHJcbiAgICAgICAgICB0aGlzLnNkay5Qb2ludGVyLmludGVyc2VjdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpbnRlcnNlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQgPSBpbnRlcnNlY3Rpb247XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC50aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgejogMCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmludGVyYWN0aW9uTW9kZSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vIGZvbGxvdyB0aGUgcG9pbnRlciBhbmQgY2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgdGFnXHJcbiAgICAgICAgICAgICAgICAvLyAod2UgYXJlIGFib3V0IHRvIHZhbGlkYXRlLCBidXQgaXQgZXhpc3RzIGluIHNkayBhbHJlYWR5KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVfZm9sbG93aW5nX3RhZyh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiAmJiAhIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUgJiZcclxuICAgICAgICAgICAgICAoZG9jdW1lbnQuVVJMLmluZGV4T2YoJ2h0dHBzOi8vZGV2LnNtYXJ0ZXJwbGFuLmlvJykgIT09IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignbG9jYWxob3N0JykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vQ2FtZXJhIG1vZGVcclxuICAgICAgICAgIHRoaXMuc2RrLk1vZGUuY3VycmVudC5zdWJzY3JpYmUoKG1vZGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLmRvbGxob3VzZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5ET0xMSE9VU0U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLmZsb29ycGxhbic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5GTE9PUlBMQU47XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLmluc2lkZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5JTlNJREU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLnRyYW5zaXRpb25pbmcnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuVFJBTlNJVElPTklORztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25DYW1lcmFNb2RlQ2hhbmdlZC5uZXh0KHRoaXMuY3VycmVudENhbWVyYU1vZGUpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gQ2FtZXJhJ3Mgdmlld3BvaW50XHJcbiAgICAgICAgICB0aGlzLnNkay5DYW1lcmEucG9zZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN1YnNjcihwb3NlOiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2VDYW1lcmEgPSBwb3NlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFQb3NlLm5leHQocG9zZSk7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgcG9zaXRpb24gaXMgJywgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1JvdGF0aW9uIGFuZ2xlIGlzICcsIHBvc2Uucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU3dlZXAgVVVJRCBpc1wiLCBwb3NlLnN3ZWVwKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBzd2VlcHNcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gc3Vic2NyKGNvbGxlY3Rpb246IHt9KSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTd2VlcCBjb2xsZWN0aW9uIHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGN1cnJlbnQgc3dlZXBcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IoY3VycmVudFN3ZWVwOiB7IHNpZDogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgc3dlZXAgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50U3dlZXAuc2lkID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ05vdCBjdXJyZW50bHkgc3RhdGlvbmVkIGF0IGEgc3dlZXAgcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJlbW1pdGluZyBzd2VlcFwiLCBjdXJyZW50U3dlZXAuc2lkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN3ZWVwLm5leHQoY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKHRoaXM6IGFueSwgY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBvbiB0YWcgY2xpY2sgb3BlbiBkZXRhaWxzIHBhZ2VcclxuICAgICAgICAgIHRoaXMuc2RrLm9uKCd0YWcuY2xpY2snLCAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgLy8gZ2V0IG9iamVjdCBvZiB0aGlzIHRhZ1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQoc2lkKTtcclxuICAgICAgICAgICAgICBpZiAoIW1hdHRlcnRhZ0RhdGEpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ25vIG1hdHRlcnRhZ0RhdGEgdG8gZGlzcGxheScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRUeXBlKClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmICh1cmwgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBzaG93IGRldGFpbHMgZm9yIHRhZycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICAgICAgICAvLyBDcmVhdGUgYSBkaXYgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRoZSBjdXJzb3IgaXMgc3RpbGxcclxuICAgICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICAgIHRoaXMudGltZXJQb2ludGVyID0gc2V0SW50ZXJ2YWwoXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9pbnRlclRyaWNrLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIDUwXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogVHJhbnNpdGlvbnNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VzdGFydCcsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdTdGFydGluZyB0byBtb3ZlIHRvICcgKyB0byArICcgZnJvbSAnICsgZnJvbSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICAndmlld21vZGUuY2hhbmdlZW5kJyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKG9sZE1vZGUsIG5ld01vZGUpIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRW5kZWQgdG8gbW92ZSB0byAnICsgbmV3TW9kZSArICcgZnJvbSAnICsgb2xkTW9kZSk7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld01vZGUgIT09ICdtb2RlLnRyYW5zaXRpb25pbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRU5URVIsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvbGRTd2VlcCwgbmV3U3dlZXApIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgb2xkU3dlZXApO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBzd2VlcCAnICsgbmV3U3dlZXApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBemltdXRhbENyb3duKCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5FdmVudC5FWElULFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZnJvbVN3ZWVwLCB0b1N3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgZnJvbVN3ZWVwKTtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdUcmFuc2l0aW9uaW5nIHRvIHN3ZWVwICcgKyB0b1N3ZWVwKTtcclxuICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIFRPRE86IGdldCBzY2VuZSB3aXRoIGdldHRlciBpbnN0ZWFkIVxyXG4gICAgICAgICAgY29uc3QgW3NjZW5lT2JqZWN0XSA9IGF3YWl0IHRoaXMuc2RrLlNjZW5lLmNyZWF0ZU9iamVjdHMoMSk7XHJcbiAgICAgICAgICBjb25zdCBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICAgICAgbm9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgdGhpcy50aHJlZUpTU2NlbmUgPSBub2RlLm9iajNELnBhcmVudDtcclxuXHJcbiAgICAgICAgICAvLyBhd2FpdCB0aGlzLnNkay5TY2VuZS5jb25maWd1cmUoKHJlbmRlcmVyOiBhbnksIHRocmVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICByZW5kZXJlci5vdXRwdXRFbmNvZGluZyA9IHRocmVlLnNSR0JFbmNvZGluZztcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICByZW5kZXJlci5zaGFkb3dNYXAuYmlhcyA9IDAuMDAwMTtcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIuc2hhZG93TWFwLnR5cGUgPSB0aHJlZS5QQ0ZTb2Z0U2hhZG93TWFwO1xyXG4gICAgICAgICAgLy8gfSk7XHJcblxyXG5cclxuICAgICAgICAgIC8vIFRPRE86IHdhaXQgZm9yIE1QIHRpY2tldCByZXNvbHV0aW9uIGJlZm9yZSBkZWNvbW1lbnQgdGhlc2UhXHJcbiAgICAgICAgICAvLyBXYWl0IHVudGlsIFNob3djYXNlIGlzIGFjdHVhbGx5IHBsYXlpbmcuLi4uXHJcbiAgICAgICAgICAvLyB0aGlzLnNkay5UYWcuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgLy8gICBvbkFkZGVkOiBhc3luYyBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0sIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgbGV0IHRoaXNPcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eShpbmRleCwgdGhpc09wYWNpdHkpO1xyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICBsZXQgc291cmNlID0gbnVsbDtcclxuICAgICAgICAgIC8vICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gICAgICAgc291cmNlID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNkay5TZW5zb3IuY3JlYXRlU291cmNlKHRoaXMuc2RrLlNlbnNvci5Tb3VyY2VUeXBlLlNQSEVSRSwge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIG9yaWdpbjogaXRlbS5hbmNob3JQb3NpdGlvbixcclxuICAgICAgICAgIC8vICAgICAgICAgICByYWRpdXM6IE51bWJlcigzKSxcclxuICAgICAgICAgIC8vICAgICAgICAgICB1c2VyRGF0YToge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWQ6IGluZGV4ICsgJy1zcGhlcmUtc291cmNlJyxcclxuICAgICAgICAgIC8vICAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gICAgICAgXSk7XHJcbiAgICAgICAgICAvLyAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBjcmVhdGUgU3BoZXJlIHNlbnNvcicpXHJcbiAgICAgICAgICAvLyAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgbGV0IHNlbnNvciA9IG51bGw7XHJcbiAgICAgICAgICAvLyAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vICAgICAgIHNlbnNvciA9IGF3YWl0IHRoaXMuc2RrLlNlbnNvci5jcmVhdGVTZW5zb3IodGhpcy5zZGsuU2Vuc29yLlNlbnNvclR5cGUuQ0FNRVJBKTtcclxuICAgICAgICAgIC8vICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGNyZWF0ZSBDYW1lcmEgc2Vuc29yJylcclxuICAgICAgICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIGlmICghc2Vuc29yKSB7XHJcbiAgICAgICAgICAvLyAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICBzZW5zb3IuYWRkU291cmNlKC4uLnNvdXJjZSk7XHJcbiAgICAgICAgICAvLyAgICAgc2Vuc29yLnJlYWRpbmdzLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAvLyAgICAgICBvblVwZGF0ZWQoc291cmNlLCByZWFkaW5nKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKHRoaXNPcGFjaXR5KTtcclxuICAgICAgICAgIC8vICAgICAgICAgbGV0IG9sZE9wYWNpdHkgPSB0aGlzT3BhY2l0eTtcclxuICAgICAgICAgIC8vICAgICAgICAgaWYgKHJlYWRpbmcuaW5SYW5nZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXNPcGFjaXR5ID0gMTtcclxuICAgICAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhpbmRleCArICcgaXMgaW5SYW5nZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJlYWRpbmcuaW5WaWV3KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgY29uc29sZS5sb2coaW5kZXggKyAnIGlzIGluVmlldyBidXQgbm90IGluUmFuZ2UnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzT3BhY2l0eSA9IDAuNTtcclxuICAgICAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzT3BhY2l0eSA9IDAuMjtcclxuICAgICAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhpbmRleCArICcgaXMgbm90IGluVmlldyBvciBpblJhbmdlJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eShpbmRleCwgdGhpc09wYWNpdHkpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAvKlxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IGluYyA9IDAuMDE7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAob2xkT3BhY2l0eSA+IHRoaXNPcGFjaXR5KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGluYyA9IC0wLjAxO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IG9sZE9wYWNpdHk7IGkgIT0gdGhpc09wYWNpdHk7IGk9aStpbmMpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG1wU2RrLlRhZy5lZGl0T3BhY2l0eShpbmRleCwgaSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGF5JywgaSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwxMCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICovXHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgLy9zZW5zb3Iuc2hvd0RlYnVnKHRydWUpO1xyXG4gICAgICAgICAgLy8gICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAvLyAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIChjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coJ0NvbGxlY3Rpb24gcmVjZWl2ZWQuIFRoZXJlIGFyZSAnLCBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKS5sZW5ndGgsICcgVGFncyBpbiB0aGUgY29sbGVjdGlvbicsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0TGlnaHRpbmdPZmYoKSB7XHJcbiAgICB0aGlzLm5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBvaW50VG9TdHJpbmcocG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9KTogc3RyaW5nIHtcclxuICAgIHZhciB4ID0gcG9pbnQueC50b0ZpeGVkKDMpO1xyXG4gICAgdmFyIHkgPSBwb2ludC55LnRvRml4ZWQoMyk7XHJcbiAgICB2YXIgeiA9IHBvaW50LnoudG9GaXhlZCgzKTtcclxuXHJcbiAgICByZXR1cm4gYHsgeDogJHt4fSwgeTogJHt5fSwgejogJHt6fSB9YDtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBNZWFzdXJlbWVudHMgcmVsYXRlZCAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvKipcclxuICAgKiBDYWxsYmFjayBhZnRlciBtZWFzdXJlbWVudCBpcyBwZXJmb3JtZWRcclxuICAgKi9cclxuICBnZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLmxhc3RNZWFzdXJlLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgbnVtYmVyUG9pbnRzID0gdGhpcy5sYXN0TWVhc3VyZS5sZW5ndGg7XHJcbiAgICAgIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmUgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IG51bWJlclBvaW50czsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzKFxyXG4gICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZVtpbmRleCAtIDFdLFxyXG4gICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZVtpbmRleF1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmUucHVzaChkaXN0YW5jZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50YWtlU2NyZWVuU2hvdCgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfbWVhc3VyZW1lbnRgXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdERpc3RhbmNlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGFrZXMgc2NyZWVuc2hvdCBhbmQgc2F2ZXMgYmFzZTY0IGluIGxhc3RTY3JlZW5zaG90VXJpXHJcbiAgICogQHJldHVybnMgUHJvbWlzZVxyXG4gICAqL1xyXG4gIHRha2VTY3JlZW5TaG90KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgIHRoaXMucmVzb2x1dGlvbixcclxuICAgICAgdGhpcy52aXNpYmlsaXR5XHJcbiAgICApLnRoZW4oXHJcbiAgICAgIGZ1bmN0aW9uIChzY3JlZW5TaG90VXJpOiBhbnkpIHtcclxuICAgICAgICAvLyBiYXNlNjQgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5sYXN0U2NyZWVuc2hvdFVyaSA9IHNjcmVlblNob3RVcmk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB9LmJpbmQodGhpcylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTY3JlZW5TaG90VXJpKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGFzdFNjcmVlbnNob3RVcmk7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0TWVhc3VyZW1lbnQoKTogT2JqZWN0IHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIG1lYXN1cmU6IHRoaXMubGFzdE1lYXN1cmUsXHJcbiAgICAgIHN3ZWVwOiB0aGlzLnBvc2VDYW1lcmEuc3dlZXAsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gVXRpbHMgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogU3R5bGluZyBvZiBwb2ludGVyXHJcbiAgICovXHJcbiAgdXBkYXRlUG9pbnRlclRyaWNrKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmludGVyYWN0aW9uTW9kZSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQgJiZcclxuICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyAmJlxyXG4gICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuZ2V0RGlzdFBvc2l0aW9uKFxyXG4gICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uXHJcbiAgICAgICkgPiAyNVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICBzaXplXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7XHJcbiAgICAgICAgY29vcmRzLnggKiBNYXRoLnNpZ24oY29vcmRzLngpIC0gMjVcclxuICAgICAgfXB4YDtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLnRvcCA9IGAke2Nvb3Jkcy55ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1fXB4YDtcclxuICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uID0ge1xyXG4gICAgICAgIC4uLnRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWFsdGltZSBtYXR0ZXJ0YWcgZm9sbG93aW5nIHRoZSBjdXJzb3JcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnIHN0cmluZ1xyXG4gICAqL1xyXG4gIGVuYWJsZV9mb2xsb3dpbmdfdGFnKG1hdHRlcnRhZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZywge1xyXG4gICAgICBhbmNob3JQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueCAqIDEsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi55ICogMSxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnogKiAxLFxyXG4gICAgICB9LFxyXG4gICAgICBzdGVtVmVjdG9yOiB7XHJcbiAgICAgICAgeDogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueCAqIDAuMyxcclxuICAgICAgICB5OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC55ICogMC4zLFxyXG4gICAgICAgIHo6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnogKiAwLjMsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZGlzdGFuY2UgYmV0d3dlZW4gdHdvIDNEIHBvc2l0aW9uc1xyXG4gICAqIFVzZWQgaW4gb3JkZXIgdG8gc2VlIGhvdyBtdWNoIHRoZSBjdXJzb3IgaGFzIG1vdmVkIGZyb20gdGhlIHByZXZpb3VzIHBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHBvczFcclxuICAgKiBAcGFyYW0gcG9zMlxyXG4gICAqL1xyXG4gIGdldERpc3RQb3NpdGlvbihwb3MxOiBhbnksIHBvczI6IGFueSkge1xyXG4gICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb29yZHMxID0gdGhpcy5zZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKFxyXG4gICAgICBwb3MxLFxyXG4gICAgICB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgIHNpemVcclxuICAgICk7XHJcbiAgICBjb25zdCBjb29yZHMyID0gdGhpcy5zZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKFxyXG4gICAgICBwb3MyLFxyXG4gICAgICB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgIHNpemVcclxuICAgICk7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KFxyXG4gICAgICAoY29vcmRzMS54IC0gY29vcmRzMi54KSAqKiAyICsgKGNvb3JkczEueSAtIGNvb3JkczIueSkgKiogMlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBNYXR0ZXJ0YWcgcmVsYXRlZCAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvKipcclxuICAgKiBDcmVhdGVzIHRoZSBNYXR0ZXJ0YWcgdGhhdCB3aWxsIGZvbGxvdyB0aGUgY3Vyc29yXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0RhdGEgTWF0dGVydGFnRGF0YVxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZEN1cnNvck1hdHRlcnRhZyhtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhKSB7XHJcbiAgICBpZiAoIXRoaXMucG9zZU1hdHRlcnBvcnQpIHJldHVybjtcclxuICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgPSBhd2FpdCB0aGlzLmFkZE1hdHRlcnRhZ1RvVmlld2VyKG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgY29uc29sZS5sb2coJ2ZvbGxvd2luZyB0aGUgdGFnJywgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdEljb24odGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgJ2ljb24tcG9zaXRpb24nKTtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eSh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCAxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgTWF0dGVydGFnIHRvIHZpZXdlciBmb3IgYW4gZXhpc3Rpbmcgb2JqZWN0IHdpdGggY29vcmRpbmF0ZXMgKGluIG1hdHRlcnRhZ0RhdGEucG9pKVxyXG4gICAqIChwb3NpdGlvbiwgaW5qZWN0ZWQgaHRtbCwgc2V0IGljb24pXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0RhdGFcclxuICAgKiByZXR1cm5zIG1hdHRlcnRhZ0lEXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTWF0dGVydGFnVG9WaWV3ZXIoXHJcbiAgICBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhXHJcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICBsZXQgc2lkTGlzdDtcclxuICAgIGlmICghdGhpcy5zZGspIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBzaWRMaXN0ID0gYXdhaXQgdGhpcy5zZGsuVGFnLmFkZChtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAnVGFnIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgdmlzaXQnLFxyXG4gICAgICAgIGVycm9yLFxyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0RGF0YSgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2lkTGlzdCkge1xyXG4gICAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHNpZExpc3RbMF07XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkZWQgdGFnXCIsIG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIHRoaXMubWF0dGVydGFnSURzLnB1c2gobWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQobWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICByZXR1cm4gbWF0dGVydGFnSUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGlvbnMgd2hlbiBwb3NpdGlvbiBvZiBtYXR0ZXJ0YWcgaXMgdmFsaWRhdGVkIGJ5IGxlZnQgY2xpY2tcclxuICAgKi9cclxuICBvblZhbGlkYXRlZE1hdHRlcnRhZygpIHtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKTtcclxuICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxiYWNrTW9kZSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzXHJcbiAgICAgICAgLmdldChsYXN0VGFnKVxyXG4gICAgICAgIC5nZXRDYWxsYmFja0FjdGlvbk1vZGUoKTtcclxuICAgICAgdGhpcy5jYWxsYmFja0FmdGVyTWF0dGVydGFnVmFsaWRhdGlvbihjYWxsYmFja01vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXJzIG5ldyBpY29uIChwYXRoIHRvIGltYWdlKSBhbmQgc2V0IGl0cyBmb3IgTWF0dGVydGFnXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBpY29uUGF0aCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBhZGROZXdJY29uQW5kU2V0Rm9yVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIGljb25QYXRoOiBzdHJpbmcpIHtcclxuICAgIGF3YWl0IHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShgaWNvbl8ke21hdHRlcnRhZ0lEfWAsIGljb25QYXRoKTtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgYGljb25fJHttYXR0ZXJ0YWdJRH1gKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYW5nZXMgaWNvbiBvZiBNYXR0ZXJ0YWcgKHRoZSBpY29uTmFtZSBzaG91bGQgYmUgcmVnaXN0ZXJlZCA9IG9uZSBvZiBkZWZhdWx0IG9uZXMpXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBpY29uTmFtZSBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBzZXRSZWdpc3RyZWRJY29uRm9yVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIGljb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAnY291bGQgbm90IGVkaXQgSWNvbiB3aXRoIG5hbWUgJyxcclxuICAgICAgICBpY29uTmFtZSxcclxuICAgICAgICAnLiBJcyBpdCByZWdpc3RlcmVkPydcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZGVmYXVsdCBpY29uIGZvciBhIHRhZyAocmVnaXN0ZXJlZCBpbiBpbml0U2RrKSBPUiB1c2VzIHRhZ0ljb24gZnJvbSBQT0kgKGF2YWlsYWJsZSBmcm9tIE1hdHRlcnRhZ0RhdGEpXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhIE1hdHRlcnRhZ0RhdGFcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFzeW5jIHNldFRhZ0ljb25BbmRPcGFjaXR5KFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcclxuICApIHtcclxuICAgIGlmICh0aGlzLlNQTW9kdWxlID09PSBTcE1vZHVsZS5IT1RFTCkge1xyXG4gICAgICBjb25zdCByb29tID0gbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKTtcclxuICAgICAgbGV0IGljb25OYW1lID0gYGljb25fcm9vbWA7XHJcbiAgICAgIGlmIChyb29tLmF2YWlsYWJsZSkge1xyXG4gICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X2F2YWlsYWJsZWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWNvbk5hbWUgPSBgJHtpY29uTmFtZX1fdW5hdmFpbGFibGVgO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdHJpbmdUYWdUeXBlID0gcG9pVHlwZVRvU3RyaW5nKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpKTtcclxuICAgIGxldCBvcGFjaXR5ID0gdGhpcy5jb25maWcubXlfY29uZmlnLkRFRkFVTFRfT1BBQ0lUWV9UQUc7XHJcbiAgICBsZXQgaWNvbk5hbWUgPSBgaWNvbi0ke3N0cmluZ1RhZ1R5cGV9YDtcclxuICAgIGNvbnN0IHBvaSA9IG1hdHRlcnRhZ0RhdGEuZ2V0UG9pKCk7XHJcbiAgICBpZiAocG9pICYmIHBvaS50YWdJY29uKSB7XHJcbiAgICAgIGNvbnN0IHRhZ0ljb24gPSBKU09OLnBhcnNlKHBvaS50YWdJY29uKTtcclxuICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpID09PSBQb2lUeXBlLkRBVEEpIHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlID0gbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKTtcclxuICAgICAgICBpZiAoZmVhdHVyZS50eXBlID09PSBGZWF0dXJlVHlwZS5JTkRJQ0FUT1JfVEVNUCkge1xyXG4gICAgICAgICAgdGFnSWNvbi5zcmMgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZShmZWF0dXJlLCBwb2kpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGFnSWNvbi5zcmMpIHtcclxuICAgICAgICBjb25zdCBwYXRoU2lnbmVkID0gYXdhaXQgdGhpcy50YWdTZXJ2aWNlLmdldFNpZ25lZFRhZ0ljb25Tb3VyY2UoXHJcbiAgICAgICAgICB0YWdJY29uLnNyY1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBhdGhTaWduZWQpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfS0ke21hdHRlcnRhZ0lEfS0ke21hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4fWA7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShpY29uTmFtZSwgcGF0aFNpZ25lZCk7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4ICs9IDE7XHJcbiAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIHJlZ2lzdGVySWNvbicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGFnSWNvbi5vcGFjaXR5KSB7XHJcbiAgICAgICAgb3BhY2l0eSA9IHRhZ0ljb24ub3BhY2l0eTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eShtYXR0ZXJ0YWdJRCwgb3BhY2l0eSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgZWRpdEljb24gb3Igb3BhY2l0eScsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmVzIHZpZXdlciB0byBsYXN0IHRhZyBjcmVhdGVkXHJcbiAgICovXHJcbiAgZ29Ub0xhc3RUYWcoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgICB0aGlzLmdvVG9UYWcobGFzdFRhZyk7XHJcbiAgICB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmVzIHZpZXdlciB0byBNYXR0ZXJ0YWcgd2l0aCBJRCBwcm92aWRlZFxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFzeW5jIGdvVG9UYWcobWF0dGVydGFnSUQ6IHN0cmluZykge1xyXG4gICAgaWYgKG1hdHRlcnRhZ0lEID09PSAnJykgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5vbkdvVG9UYWcubmV4dChtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQud2FpdFVudGlsKFxyXG4gICAgICAgIChjdXJyZW50U3dlZXApID0+IGN1cnJlbnRTd2VlcCAhPT0gJydcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZGsuTWF0dGVydGFnLm5hdmlnYXRlVG9UYWcoXHJcbiAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLlRyYW5zaXRpb24uRkxZXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IG5hdmlnYXRlIHRvIHRhZycsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgY29udGVudCBvZiBNYXR0ZXJ0YWcgd2l0aCBtYXR0ZXJ0YWdJRCAoYmlsbGJvYXJkLCBpbmplY3RlZCBodG1sLCB0YWcgaWNvbilcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqL1xyXG4gIGFzeW5jIHVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRChcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSA9IG51bGwsXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlID0gbnVsbFxyXG4gICkge1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRCaWxsYm9hcmQoXHJcbiAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLmdldERhdGEoKVxyXG4gICAgKTtcclxuICAgIGlmIChvYmplY3QgJiYgdGFnVHlwZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuc2V0VGFnSWNvbkFuZE9wYWNpdHkoXHJcbiAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBpbmplY3RlZCBodG1sIGZvciBNYXR0ZXJ0YWdcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqL1xyXG4gIGFzeW5jIHVwZGF0ZUluamVjdGVkSHRtbEZvclRhZ0lEKFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG9iamVjdDogYW55LFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZVxyXG4gICkge1xyXG4gICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBtYXR0ZXJ0YWdJRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIE1hdHRlcnRhZyBmcm9tIFZpZXdlciBieSBpdHMgSURcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICovXHJcbiAgZGVsZXRlTWF0dGVydGFnRnJvbUlkKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2RrLlRhZy5yZW1vdmUobWF0dGVydGFnSUQpO1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKG1hdHRlcnRhZ0lEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgbGF0ZXN0IGNyZWF0ZWQgbWF0dGVydGFnXHJcbiAgICovXHJcbiAgZGVsZXRlTGFzdE1hdHRlcnRhZygpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0lEID0gdGhpcy5tYXR0ZXJ0YWdJRHMucG9wKCk7XHJcbiAgICBpZiAobWF0dGVydGFnSUQpIHtcclxuICAgICAgdGhpcy5kZWxldGVNYXR0ZXJ0YWdGcm9tSWQobWF0dGVydGFnSUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGVnYWN5OiB1c2VkIHRvIGJlIGNhbGxlZCBhY3Rpb25fYWRkX21hdHRlcnRhZ19mcm9tX1BPSVxyXG4gICAqIEFkZHMgYW5kIGNvbmZpZ3VyZXMgTWF0dGVydGFnIGZvciBhbiBvYmplY3QgKFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBldGMpIHRoYXQgY29ycmVzcG9uZHMgdG8gUE9JIChjb29yZGluYXRlcywgdGFnSWNvbilcclxuICAgKiBAcGFyYW0gdGFnVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZS4uLlxyXG4gICAqIEBwYXJhbSBwb2kgUE9JXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVNYXR0ZXJ0YWdGcm9tUE9JKFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgcG9pOiBQT0lcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgLy8gY2hlY2sgaWYgdGFnIGV4aXN0cyBhbHJlYWR5XHJcbiAgICBjb25zdCB7dGFnLCBzd2VlcH0gPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQob2JqZWN0LmlkKTtcclxuICAgIGlmICh0YWcpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJ0YWcgZXhpc3RzXCIsIG9iamVjdClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHRhZ1R5cGUpO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCB0YWdUeXBlKTtcclxuICAgIGlmIChwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpKTtcclxuICAgIH1cclxuICAgIGlmIChwb2kubWV0YWRhdGEpIHtcclxuICAgICAgY29uc3QgdGFnTWV0YWRhdGEgPSBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSk7XHJcbiAgICAgIGlmICh0YWdNZXRhZGF0YS5ub3JtYWwpIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh0YWdNZXRhZGF0YS5ub3JtYWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0Tm9ybWFsKHt4OiAwLCB5OiAtMC4xNSwgejogMH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocG9pLm1hdHRlcnBvcnRTd2VlcElEKSB7XHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRChwb2kubWF0dGVycG9ydFN3ZWVwSUQpO1xyXG4gICAgfVxyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVkVGFnSUQgPSBhd2FpdCB0aGlzLmFkZE1hdHRlcnRhZ1RvVmlld2VyKG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgaWYgKGNyZWF0ZWRUYWdJRCAmJiB0aGlzLnNkaykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNldFRhZ0ljb25BbmRPcGFjaXR5KGNyZWF0ZWRUYWdJRCwgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgY3JlYXRlZFRhZ0lEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluamVjdCBjdXN0b20gSFRNTCBhcyBNYXR0ZXJ0YWcgY29udGVudFxyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBpbmplY3RIdG1sSW5UYWcodGFnVHlwZTogUG9pVHlwZSwgb2JqZWN0OiBEYk9iamVjdFR5cGUsIHRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sID0gYXdhaXQgdGhpcy50YWdTZXJ2aWNlLmdldEh0bWxUb0luamVjdCh0YWdUeXBlLCBvYmplY3QpO1xyXG4gICAgaWYgKGh0bWwgIT09ICcnICYmIHRoaXMuc2RrKSB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdFRhZyA9IHRoaXMudGFnU2VydmljZS5nZXRTY3JpcHRGb3JUYWcob2JqZWN0LCB0YWdUeXBlKTtcclxuICAgICAgaHRtbCArPSBgJHtzY3JpcHRUYWd9YDtcclxuICAgICAgLy8gY3JlYXRlIGFuZCByZWdpc3RlciB0aGUgc2FuZGJveFxyXG4gICAgICBjb25zdCBbc2FuZGJveElkLCBtZXNzZW5nZXJdID0gYXdhaXQgdGhpcy5zZGsuVGFnLnJlZ2lzdGVyU2FuZGJveChodG1sKTtcclxuXHJcbiAgICAgIC8vIGRldGFjaCBwcmV2aW91cyBzYW5kYm94IGZyb20gYSB0YWdcclxuICAgICAgbGV0IGF0dGFjaG1lbnRJRCA9IHRoaXMudGFnc0F0dGFjaG1lbnRzW3RhZ0lEXTtcclxuICAgICAgaWYgKGF0dGFjaG1lbnRJRCkge1xyXG4gICAgICAgIHRoaXMuc2RrLlRhZy5kZXRhY2godGFnSUQsIGF0dGFjaG1lbnRJRCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50YWdzQXR0YWNobWVudHNbdGFnSURdID0gc2FuZGJveElkO1xyXG5cclxuICAgICAgLy8gYXR0YWNoIHRoZSBzYW5kYm94IHRvIGEgdGFnXHJcbiAgICAgIHRoaXMuc2RrLlRhZy5hdHRhY2godGFnSUQsIHNhbmRib3hJZCk7XHJcbiAgICAgIC8vIHJlY2VpdmUgZGF0YSBmcm9tIHRoZSBzYW5kYm94XHJcbiAgICAgIC8vIHRhZ01lc3Nlbmdlck9uIGFsbG93cyB0byBnbyBoZXJlIG9ubHkgb25jZVxyXG4gICAgICBpZiAoIXRoaXMudGFnTWVzc2VuZ2VyT24pIHtcclxuICAgICAgICB0aGlzLnRhZ01lc3Nlbmdlck9uID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBpbWFnZUNsaWNrID0gKGZlYXR1cmVJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImltYWdlIGNsaWNrIGhhbmRsZXJcIiwgZmVhdHVyZUlEKTtcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkltYWdlQ2xpY2soZmVhdHVyZUlEKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBhdWRpb0NsaWNrID0gKGF1ZGlvQ29tbWVudElEOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXVkaW8gY2xpY2sgaGFuZGxlclwiLCBhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25BdWRpb0NsaWNrKGF1ZGlvQ29tbWVudElEKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHZpZGVvQ2xpY2sgPSAodXJsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvblZpZGVvQ2xpY2sodXJsKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5ERVRBSUxfQ0xJQ0ssXHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5USUNLRVRfQ0xJQ0ssXHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uQVVESU9fQ0xJQ0ssIGF1ZGlvQ2xpY2spO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uSU1BR0VfQ0xJQ0ssIGltYWdlQ2xpY2spO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uVklERU9fQ0xJQ0ssIHZpZGVvQ2xpY2spO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5ET0NfQ0xJQ0ssXHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25Eb2NDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5ZT1VUVUJFX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uWW91dHViZUNsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIGh0bWwgaXMgZW1wdHkgKGNhc2Ugb2YgRU1CRUQgY29udGVudCksIHdlIGVkaXQgYmlsbGJvYXJkIGZvciBGZWF0dXJlIGFuZCBhdHRhY2ggbmV3IGNvbnRlbnRcclxuICAgICAgY29uc3Qge2NvbW1lbnQsIHRhZ0Rlc2NyaXB0aW9ufSA9XHJcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlLmdldEJpbGxib2FyZE1lZGlhVG9FbWJlZChvYmplY3QpO1xyXG4gICAgICBpZiAoY29tbWVudCkge1xyXG4gICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBtZWRpYVxyXG4gICAgICAgIGNvbnN0IFthdHRhY2htZW50SURdID0gYXdhaXQgdGhpcy5zZGsuVGFnLnJlZ2lzdGVyQXR0YWNobWVudChcclxuICAgICAgICAgIGNvbW1lbnQuZXh0ZXJuYWxMaW5rXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBhdHRhY2hcclxuICAgICAgICB0aGlzLnNkay5UYWcuYXR0YWNoKHRhZ0lELCBhdHRhY2htZW50SUQpO1xyXG4gICAgICAgIHRoaXMuc2RrLlRhZy5lZGl0QmlsbGJvYXJkKHRhZ0lELCB7XHJcbiAgICAgICAgICBsYWJlbDogb2JqZWN0LnRpdGxlLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRhZ0Rlc2NyaXB0aW9uLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5zZGsuVGFnLnJlbW92ZSguLi50aGlzLm1hdHRlcnRhZ0lEcyk7XHJcbiAgICB0aGlzLm1hdHRlcnRhZ0lEcyA9IFtdO1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgTWF0dGVydGFnIGZyb20gdmlzaXQgYXNzb2NpYXRlZCB3aXRoIG9iamVjdCBJRCAodGlja2V0SUQsIGV0YylcclxuICAgKiBAcGFyYW0gZWxlbWVudElEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGFzeW5jIGRlbGV0ZU1hdHRlcnRhZ0Zvck9iamVjdChlbGVtZW50SUQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgbWF0dGVyVGFnSUQgPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElEKS50YWc7XHJcbiAgICBpZiAobWF0dGVyVGFnSUQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5UYWcucmVtb3ZlKG1hdHRlclRhZ0lEKTtcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUobWF0dGVyVGFnSUQpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tYXR0ZXJ0YWdJRHMuaW5kZXhPZihtYXR0ZXJUYWdJRCk7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJ0YWdJRHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IGRlbGV0ZSB0YWcnLCBtYXR0ZXJUYWdJRCwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB1dWlkIGZyb20gdGhyZWVqc1xyXG4gICAqIEBwYXJhbSB1dWlkXHJcbiAgICovXHJcbiAgYXN5bmMgZGVsZXRlT2JqZWN0M0QodXVpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldCh1dWlkKS5vYmozRC52aXNpYmxlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRPYmplY3QzRE1vZGVsTm9kZUZyb21EaWN0aW9ubmFyeSh1dWlkOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0QuZ2V0KHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyAgTWF0dGVydGFnRGF0YSBhbmQgc3RhcnQgcmVwb3NpdGlvbmluZyAoY3JlYXRlcyB0ZW1wb3JhcnkgbWF0dGVydGFnIHRoYXQgZm9sbG93cyB0aGUgY3Vyc29yKVxyXG4gICAqIEBwYXJhbSBwb2lUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gZWxlbWVudCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTWF0dGVydGFnV2hlblJlcG9zaXRpb25pbmcocG9pVHlwZTogUG9pVHlwZSwgZWxlbWVudDogRGJPYmplY3RUeXBlKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEocG9pVHlwZSk7XHJcbiAgICAvLyBzZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBleGlzdGluZyB0YWdcclxuICAgIGNvbnN0IFtwb2ldID0gZWxlbWVudC5wb2lzLml0ZW1zO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpKTtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTsgLy8gdG8ga2VlcCBjdXN0b20gdGFnSWNvbiBhbmQgb3BhY2l0eVxyXG4gICAgfVxyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHRoaXMucG9zZUNhbWVyYS5zd2VlcCk7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFJvdGF0aW9uKHRoaXMucG9zZUNhbWVyYS5yb3RhdGlvbik7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChlbGVtZW50LCBwb2lUeXBlKTtcclxuICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgPSBhd2FpdCB0aGlzLmFkZE1hdHRlcnRhZ1RvVmlld2VyKG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLlBPU0lUSU9OSU5HKTtcclxuICAgIGF3YWl0IHRoaXMuYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBNYXR0ZXJ0YWdEYXRhIGFuZCBtYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3Igd2hlbiBjaG9vc2luZyBwb3NpdGlvbiBmb3IgYSBuZXcgb2JqZWN0XHJcbiAgICogQHBhcmFtIHBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdXaGVuQWRkaW5nKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YShwb2lUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRCh0aGlzLnBvc2VDYW1lcmEuc3dlZXApO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRSb3RhdGlvbih0aGlzLnBvc2VDYW1lcmEucm90YXRpb24pO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElORyk7XHJcbiAgICBhd2FpdCB0aGlzLmFkZEN1cnNvck1hdHRlcnRhZyhtYXR0ZXJ0YWdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgZm9sbG93aW5nIG9mIGN1cnNvciAobWVhbmluZyBkZWxldGluZyBsYXN0IE1hdHRlcnRhZylcclxuICAgKi9cclxuICBjYW5jZWxGb2xsb3dpbmdDdXJzb3IoKSB7XHJcbiAgICB0aGlzLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKTtcclxuICB9XHJcblxyXG4gIHNldExhc3RPYmplY3QzRChsYXN0T2JqZWN0M0Q6IFRocmVlSlNPYmplY3QzRCkge1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QgPSBsYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0T2JqZWN0M0QoKTogVGhyZWVKU09iamVjdDNEIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RPYmplY3QzRDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm1zIGNhbGxiYWNrIGFmdGVyIG1hdHRlcnRhZyBwb3NpdGlvbiB3YXMgdmFsaWRhdGVkIChjcmVhdGlvbiBvZiBvYmplY3Qgb3IgcmVwb3NpdGlvbmluZylcclxuICAgKiBAcGFyYW0gbW9kZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlXHJcbiAgICovXHJcbiAgY2FsbGJhY2tBZnRlck1hdHRlcnRhZ1ZhbGlkYXRpb24obW9kZTogTWF0dGVydGFnQWN0aW9uTW9kZSkge1xyXG4gICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9FUVVJUE1FTlQ6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfZXF1aXBgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfVElDS0VUOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX3RpY2tldGBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9PQkpFQ1QzRDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9vYmplY3QzZGBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9EQVRBOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnPycpKSB7XHJcbiAgICAgICAgICB1cmwgPSB0aGlzLnJvdXRlci51cmwuc3Vic3RyaW5nKDAsIHRoaXMucm91dGVyLnVybC5pbmRleE9mKCc/JykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1cmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt1cmx9L2FkZF9mZWF0dXJlYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0RFU0s6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfZmVhdHVyZWBdLCB7XHJcbiAgICAgICAgICBxdWVyeVBhcmFtczoge2lzRGVzazogdHJ1ZX0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfUk9PTTpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9yb29tYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fT0JKRUNUM0Q6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIC8vIERPIE5vdGhpbmcgKHJvdXRpbmcpLCBqdXN0XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L29iamVjdDNkLyR7dGhpcy5sYXN0T2JqZWN0M0QuaWR9YF0sXHJcbiAgICAgICAgICAgIHtxdWVyeVBhcmFtczoge3Bvc2l0aW9uaW5nOiB0cnVlfX1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fVElDS0VUOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2RldGFpbC8ke1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRFxyXG4gICAgICAgICAgICAgIH1gLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB7cXVlcnlQYXJhbXM6IHtwb3NpdGlvbmluZzogdHJ1ZX19XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0VRVUlQTUVOVDpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICBgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9lcXVpcC8ke1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRFxyXG4gICAgICAgICAgICAgIH1gLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB7cXVlcnlQYXJhbXM6IHtwb3NpdGlvbmluZzogdHJ1ZX19XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0RBVEE6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9LCBxdWVyeVBhcmFtc0hhbmRsaW5nIDogXCJtZXJnZVwiXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9ST09NOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2ZVJvdXRlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge3Bvc2l0aW9uaW5nOiB0cnVlfSwgcXVlcnlQYXJhbXNIYW5kbGluZyA6IFwibWVyZ2VcIlxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVsbHkgdXBkYXRlcyBleGlzdGluZyBNYXR0ZXJ0YWcgY29udGVudCB3aXRoIGRhdGEgb2Ygb2JqZWN0IChUaWNrZXQsIEVxdWlwbWVudCwgRGVzaylcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgRGVza1xyXG4gICAqIEBwYXJhbSBwb2lUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gcG9pIFBPSVxyXG4gICAqL1xyXG4gIGFzeW5jIHNldE9iamVjdEFuZFBvaUluVGFnKFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgcG9pVHlwZTogUG9pVHlwZSxcclxuICAgIHBvaTogUE9JIHwgbnVsbCA9IG51bGxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuc2V0T2JqZWN0KG9iamVjdCwgcG9pVHlwZSk7XHJcbiAgICBpZiAocG9pKSB7XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuc2V0UG9pKHBvaSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLmVsZW1lbnRJRCA9IG9iamVjdC5pZDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTWF0dGVyVGFnQ29udGVudEZvclRhZ0lEKG1hdHRlcnRhZ0lELCBvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgICAvLyBUT0RPOiBmaXggdGhpc1xyXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU1hdHRlclRhZ1Bvc0luU2RrVmlld2VyKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgIG9iamVjdCxcclxuICAgICAgICBwb2lUeXBlLFxyXG4gICAgICAgIHBvaVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgZXJyb3IgaW4gc2V0T2JqZWN0QW5kUG9pSW5UYWc6ICR7ZX1gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZU1hdHRlclRhZ1Bvc0luU2RrVmlld2VyKFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgcG9pVHlwZTogUG9pVHlwZSxcclxuICAgIHBvaTogUE9JIHwgbnVsbCA9IG51bGxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IEluZGV4VG9VcGRhdGUgPSBvYmplY3QucG9pcy5pdGVtcy5maW5kSW5kZXgoKHUpID0+IHUuaWQgPT09IHBvaS5pZCk7XHJcbiAgICBvYmplY3QucG9pcy5pdGVtc1tJbmRleFRvVXBkYXRlXSA9IHBvaTtcclxuICAgIGNvbnN0IHt4LCB5LCB6fSA9IEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpO1xyXG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSB7XHJcbiAgICAgIGFuY2hvclBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogeCxcclxuICAgICAgICB5OiB5LFxyXG4gICAgICAgIHo6IHosXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0ZW1WZWN0b3I6IHtcclxuICAgICAgICAvLyBtYWtlIHRoZSBUYWcgc3RpY2sgc3RyYWlnaHQgdXAgYW5kIG1ha2UgaXQgMC4zMCBtZXRlcnMgKH4xIGZvb3QpIHRhbGxcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAuMyxcclxuICAgICAgICB6OiAwLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnSUQsIG5ld1Bvc2l0aW9uKTtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnSUQsIG5ld1Bvc2l0aW9uKTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzXHJcbiAgICAgIC5nZXQobWF0dGVydGFnSUQpXHJcbiAgICAgIC5zZXRQb3NpdGlvbihuZXdQb3NpdGlvbi5hbmNob3JQb3NpdGlvbik7XHJcblxyXG4gICAgZm9yIChsZXQgdGFnSWQgb2YgdGhpcy5tYXR0ZXJ0YWdJRHMpIHtcclxuICAgICAgY29uc3QgY3VycmVudFRhZyA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0YWdJZCk7XHJcbiAgICAgIGlmICghY3VycmVudFRhZykge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjdXJyZW50VGFnLmVsZW1lbnRJRCA9PT0gb2JqZWN0LmlkICYmIHRhZ0lkICE9PSBtYXR0ZXJ0YWdJRCkge1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZSh0YWdJZCk7XHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLnJlbW92ZSh0YWdJZCk7XHJcbiAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlbW92ZSh0YWdJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgbWF0dGVyVGFnSUQgYW5kIGl0cyBzd2VlcCBmb3IgYW4gb2JqZWN0IElEICh0aWNrZXQgSUQsIGV0YylcclxuICAgKiBAcGFyYW0gZWxlbWVudElEIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIHt0YWc6IHN0cmluZyB8IG51bGwsIHN3ZWVwOiBzdHJpbmcgfCBudWxsfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRDogc3RyaW5nKToge1xyXG4gICAgdGFnOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgc3dlZXA6IHN0cmluZyB8IG51bGw7XHJcbiAgfSB7XHJcbiAgICBsZXQgdGFnSUQgPSBudWxsO1xyXG4gICAgbGV0IHN3ZWVwSUQgPSBudWxsO1xyXG4gICAgZm9yIChsZXQgW21hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhXSBvZiB0aGlzLmRpY3Rpb25uYXJ5VGFncykge1xyXG4gICAgICBpZiAobWF0dGVydGFnRGF0YS5lbGVtZW50SUQgPT09IGVsZW1lbnRJRCkge1xyXG4gICAgICAgIHRhZ0lEID0gbWF0dGVydGFnSUQ7XHJcbiAgICAgICAgY29uc3Qgc3dlZXAgPSBtYXR0ZXJ0YWdEYXRhLmdldFN3ZWVwSUQoKTtcclxuICAgICAgICBpZiAoc3dlZXAgJiYgdGhpcy5zd2VlcHMgJiYgdGhpcy5zd2VlcHMuaW5jbHVkZXMoc3dlZXApKSB7XHJcbiAgICAgICAgICBzd2VlcElEID0gc3dlZXA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3RhZzogdGFnSUQsIHN3ZWVwOiBzd2VlcElEfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGF0ZXN0IHRhZyBjcmVhdGVkIGluIHRoZSB2aXNpdCAod2hlbiBmb2xsb3dpbmcgdGhlIGN1cnNvciB0byBwb3NpdGlvbilcclxuICAgKiBAcmV0dXJucyBzdHJpbmcgbWF0dGVydGFnSURcclxuICAgKi9cclxuICBnZXRMYXN0VGFnKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnVG9Gb2xsb3c7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgPyBudWxsXHJcbiAgICAgICAgOiB0aGlzLm1hdHRlcnRhZ0lEc1t0aGlzLm1hdHRlcnRhZ0lEcy5sZW5ndGggLSAxXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgTWF0dGVydGFnRGF0YSBmb3IgTWF0dGVydGFnIChyZXBsYWNlcyBnZXRUYWdEYXRhRnJvbUlkKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRFxyXG4gICAqIEByZXR1cm5zIE1hdHRlcnRhZ0RhdGFcclxuICAgKi9cclxuICBnZXRNYXR0ZXJUYWdEYXRhRm9yTWF0dGVydGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpOiBNYXR0ZXJ0YWdEYXRhIHwgbnVsbCB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IHJldHJpZXZlIG1hdHRlcnRhZ0RhdGEgZm9yIHRhZycsIG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIFZpZXdlciByZWxhdGVkIChzd2l0Y2ggdmlld3MsIGdvIHRvKSAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oKSB7XHJcbiAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgY29uc29sZS5sb2coJ3ZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZmxvb3JwbGFuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKCdtb2RlLmZsb29ycGxhbicpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IGdvIHRvIGZsb29ycGxhbicsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKSB7XHJcbiAgICB0aGlzLnNkay5Nb2RlLm1vdmVUbygnbW9kZS5pbnNpZGUnKTtcclxuICB9XHJcblxyXG4gIGFjdGlvblNob3dBbGxGbG9vcnMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5GbG9vci5zaG93QWxsKCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3Qgc2hvdyBhbGwgZmxvb3JzJywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKSB7XHJcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJtb2RlOiBcIiwgdGhpcy5pblRyYW5zaXRpb25Nb2RlLCBcIiBzd2VlcDogXCIsIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApO1xyXG4gICAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmlld2VyIGlzIGluIHRyYW5zaXRpb24sIGNhbm5vdCBnbyBkb2xsaG91c2UnKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbygnbW9kZS5kb2xsaG91c2UnKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZG9sbGhvdXNlJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEyMDApO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCkge1xyXG4gICAgY29uc3QgbmV3U3RhdGUgPSAhdGhpcy5pc01lYXN1cmVNb2RlT247XHJcbiAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMudG9nZ2xlTW9kZShuZXdTdGF0ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIGBNZWFzdXJlbWVudCBtb2RlIGlzIG5vdyAke25ld1N0YXRlID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2NhbmNlbF9tZXN1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5pc01lYXN1cmVNb2RlT24pIHtcclxuICAgICAgdGhpcy5hY3Rpb25fdG9vbGJveF9tZXN1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9nb190b19mbG9vcihcclxuICAgIGZsb29yTmFtZTogc3RyaW5nLFxyXG4gICAgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGxcclxuICApIHtcclxuICAgIGlmICghdGhpcy5mbG9vcnMpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Zsb29yIGFyZSBub3QgbG9hZGVkIHlldCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmZsb29ycyk7XHJcbiAgICAvLyBsb29rIHVwIGZvciBzZXF1ZW5jZSBudW1iZXIgKHRoZSBzYWZlc3QgbWV0aG9kKVxyXG4gICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgIChmbG9vcikgPT4gZmxvb3Iuc2VxdWVuY2UgPT09IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXHJcbiAgICApO1xyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZChcclxuICAgICAgICAoZmxvb3IpID0+IGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSAmJiBmbG9vci5uYW1lICE9ICcnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKChmbG9vcikgPT5cclxuICAgICAgICBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IuaWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhmbG9vck1hdHRlcnBvcnQpXHJcbiAgICBpZiAoZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGxldCByZXRyeSA9IHRydWU7XHJcbiAgICAgIHdoaWxlIChyZXRyeSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBmbG9vckluZGV4ID0gYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKFxyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm1vdmVkIHRvIGZsb29ySW5kZXhcIiwgZmxvb3JJbmRleCk7XHJcbiAgICAgICAgICByZXRyeSA9IGZhbHNlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgdG8gRmxvb3InLCBlcnJvcik7XHJcbiAgICAgICAgICBhd2FpdCB3YWl0KDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIG1hdHRlcnBvcnQgZmxvb3IgZm91bmQgdG8gbW92ZSB0bycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2dvX3RvX3N3ZWVwKFxyXG4gICAgc3dlZXA6IHN0cmluZyxcclxuICAgIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPSBudWxsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5mb3JiaWRkZW5Td2VlcHMuaW5jbHVkZXMoc3dlZXApKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHRoaXMgc3dlZXAnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJnb2luZyB0byBzd2VlcFwiLCBzd2VlcCwgXCJ3aXRoIHJvdGF0aW9uOlwiLCByb3RhdGlvbik7XHJcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBnbyB0byBzd2VlcCwgaW4gdHJhbnNpdGlvbicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzd2VlcCwge1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogJ3RyYW5zaXRpb24uaW5zdGFudCcsXHJcbiAgICAgICAgICB0cmFuc2l0aW9uVGltZTogMTUwMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIHN3ZWVwJywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyb3RhdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLkNhbWVyYS5zZXRSb3RhdGlvbihyb3RhdGlvbiwge3NwZWVkOiAxMDB9KTsgLy8gc3BlZWQgaXMgZGVncmVlcyBwZXIgc2Vjb25kXHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudFN3ZWVwKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhLnN3ZWVwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Q2FtZXJhUG9zaXRpb24oKToge1xyXG4gICAgcm90YXRpb246IGFueTtcclxuICAgIHBvc2l0aW9uOiBhbnk7XHJcbiAgICBzd2VlcDogYW55O1xyXG4gIH0gfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2V0SW50ZXJhY3Rpb25Nb2RlKGludGVyYWN0aW9uTW9kZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmludGVyYWN0aW9uTW9kZSA9IGludGVyYWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIGdldEludGVyYWN0aW9uTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCB2YXJpYWJsZXMsIGRlbGV0ZXMgYWxsIHRhZ3MgKHdoZW4gdmlld2VyIGlzIHJlbW92ZXIgb3IgbW9kZWwgY2hhbmdlZD1yZWxvYWQgbmVlZGVkKVxyXG4gICAqL1xyXG4gIGFzeW5jIGNsZWFyQWxsKCkge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92aW5nIHZpZXdlcicpO1xyXG4gICAgdGhpcy5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCk7XHJcbiAgICB0aGlzLmZsb29ycyA9IG51bGw7XHJcbiAgICB0aGlzLnN3ZWVwcyA9IG51bGw7XHJcbiAgICB0aGlzLnNkayA9IG51bGw7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJQb2ludGVyKTtcclxuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gW107XHJcbiAgICB0aGlzLnRhZ01lc3Nlbmdlck9uID0gZmFsc2U7XHJcbiAgICAvLyBjYW5jZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICdjbGljaycsXHJcbiAgICAgIHRoaXMucG9pbnRlckxlZnRDbGlja0hhbmRsZXJcclxuICAgICk7XHJcbiAgICB0aGlzLnBvaW50ZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ2NvbnRleHRtZW51JyxcclxuICAgICAgdGhpcy5wb2ludGVyUmlnaHRDbGlja0hhbmRsZXJcclxuICAgICk7XHJcblxyXG4gICAgLy8gVE9ETzogb25seSBGb3IgQWRtaW5zXHJcbiAgICBpZiAodGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbikge1xyXG4gICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2F1eGNsaWNrJyxcclxuICAgICAgICB0aGlzLnBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IG9ubHkgZm9yIGRldiFcclxuICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiZcclxuICAgICAgKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignZGV2JykgIT09IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignbG9jYWxob3N0JykgIT09IC0xKSkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gWy4uLmZvcmJpZGRlblN3ZWVwc107XHJcbiAgICBsZXQgcmVtb3ZlZCA9IDA7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgZm9yYmlkZGVuU3dlZXBzLm1hcChhc3luYyAoc3dlZXApID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAuZGlzYWJsZShzd2VlcCk7XHJcbiAgICAgICAgICByZW1vdmVkICs9IDE7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92ZWQgc3dlZXBzOicsIHJlbW92ZWQpO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIDNEIG9iamVjdHMgKFNESyBCdW5kbGUgb25seSkgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgYXN5bmMgaW5pdDNET2JqZWN0Vmlld2VyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHZhciBbc2NlbmVPYmplY3RdID0gYXdhaXQgdGhpcy5zZGsuU2NlbmUuY3JlYXRlT2JqZWN0cygxKTtcclxuXHJcbiAgICAgIHZhciBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG5cclxuICAgICAgLy8gVE9ETyBjaGFuZ2UgdGhpcyDwn6SuXHJcbiAgICAgIG5vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTtcclxuICAgICAgLy9ub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7XHJcbiAgICAgIC8qbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICBub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7Ki9cclxuICAgICAgbm9kZS5zdGFydCgpO1xyXG5cclxuICAgICAgY29uc3Qgbm9kZUNvbnRyb2wgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICAgIHRoaXMub2JqZWN0Q29udHJvbCA9IG5vZGVDb250cm9sLmFkZENvbXBvbmVudCgnbXAudHJhbnNmb3JtQ29udHJvbHMnKTtcclxuICAgICAgbm9kZUNvbnRyb2wuc3RhcnQoKTtcclxuXHJcbiAgICAgIC8vdGhpcy5hZGQzRE9iamVjdCh7fSxudWxsKTtcclxuXHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkM0RPYmplY3QoXHJcbiAgICBvYmo6IElPYmplY3QzRCxcclxuICAgIG1vZGU/OiAndHJhbnNsYXRlJyB8ICdyb3RhdGUnXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBbc2NlbmVPYmplY3RdID0gYXdhaXQgdGhpcy5zZGsuU2NlbmUuY3JlYXRlT2JqZWN0cygxKTtcclxuXHJcbiAgICAgIC8vIFRPRE86IGltcHJvdm1lbnQsIHJlZ3JvdXAgYWxsIG9mIHRoZXNlIGluIER5bmFtaWNhbCBPYmplY3RzIExpYlxyXG4gICAgICAvLyBTZWN1cml0eUNhbWVyYVxyXG4gICAgICAvLyBOZXN0VGhlcm1vc3RhdFxyXG4gICAgICAvLyBWaWRlb1xyXG4gICAgICBsZXQgaXNBbmltYXRlZFNlY3VyaXR5Q2FtZXJhID0gZmFsc2U7XHJcbiAgICAgIGxldCBpc05lc3RUaGVybW9zdGF0ID0gZmFsc2U7XHJcbiAgICAgIGxldCBpc1NtYXJ0ZXJwbGFuUHJvbW90aW9uYWxWaWRlbyA9IGZhbHNlO1xyXG4gICAgICBsZXQgaXNBemltdXRoYWxDcm93biA9IGZhbHNlO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRPRE86IHJlZmFjdG8gd2l0aCBhbiBlbnVtIG9yIHN3aXRjaC9jYXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAob2JqLm9iamVjdCA9PT0gXCJzZWN1cml0eV9jYW1lcmFcIikge1xyXG4gICAgICAgIGlzQW5pbWF0ZWRTZWN1cml0eUNhbWVyYSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9iai5vYmplY3QgPT09IFwibmVzdF90aGVybW9zdGF0XCIpIHtcclxuICAgICAgICBpc05lc3RUaGVybW9zdGF0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqLm9iamVjdCA9PT0gJ3ZpZGVvJykge1xyXG4gICAgICAgIGlzU21hcnRlcnBsYW5Qcm9tb3Rpb25hbFZpZGVvID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZihvYmoub2JqZWN0ID09PSAnYXppbXV0aCcpIHtcclxuICAgICAgICBpc0F6aW11dGhhbENyb3duID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9kZWxOb2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICBsZXQgY29tcG9uZW50ID0gbnVsbDtcclxuICAgICAgY29uc3QgaW5pdGlhbCA9IHtcclxuICAgICAgICB1cmw6IGAvYXNzZXRzLzNEb2JqZWN0cy9vYmplY3RzLyR7b2JqLm9iamVjdH0ke1xyXG4gICAgICAgICAgb2JqLmZvcm1hdC5pbmRleE9mKCcuJykgPT09IC0xID8gJy4nICsgb2JqLmZvcm1hdCA6IG9iai5mb3JtYXRcclxuICAgICAgICB9YCxcclxuICAgICAgICAvLyBUT0RPLyBzdG9yZSBsb2NhbFBvc2l0aW9uICYmIGxvY2FsUm90YXRpb24gaW4gQkREIHRvbyAoaW4gb3JkZXIgdG8gaGF2ZSBwZXJ0ZmVjdCBpbml0aWFsIHBsYWNlbWVudClcclxuICAgICAgICBsb2NhbFJvdGF0aW9uOiB7XCJ4XCI6IDAsIFwieVwiOiAwLCBcInpcIjogMH0sXHJcbiAgICAgICAgLy8gVE9ETy8gc3RvcmUgbG9jYWxQb3NpdGlvbiAmJiBsb2NhbFJvdGF0aW9uIGluIEJERCB0b28gKGluIG9yZGVyIHRvIGhhdmUgcGVydGZlY3QgaW5pdGlhbCBwbGFjZW1lbnQpXHJcbiAgICAgICAgbG9jYWxQb3NpdGlvbjoge1wieFwiOiAwLCBcInlcIjogMCwgXCJ6XCI6IDB9LFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgY29sbGlkZXJFbmFibGVkOiB0cnVlXHJcbiAgICAgIH07XHJcblxyXG5cclxuICAgICAgc3dpdGNoIChvYmouZm9ybWF0KSB7XHJcbiAgICAgICAgY2FzZSAnLm9iaic6XHJcbiAgICAgICAgY2FzZSAnb2JqJzpcclxuICAgICAgICAgIGNvbXBvbmVudCA9IG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLm9iakxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnLmZieCc6XHJcbiAgICAgICAgY2FzZSAnZmJ4JzpcclxuICAgICAgICAgIGNvbXBvbmVudCA9IG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLmZieExvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnLmdsdGYnOlxyXG4gICAgICAgIGNhc2UgJ2dsdGYnOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZ2x0ZkxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnLmdsYic6XHJcbiAgICAgICAgY2FzZSAnZ2xiJzpcclxuICAgICAgICAgIGNvbXBvbmVudCA9IG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLmdsdGZMb2FkZXInLCBpbml0aWFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJy5kYWUnOlxyXG4gICAgICAgIGNhc2UgJ2RhZSc6XHJcbiAgICAgICAgICBjb21wb25lbnQgPSBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5kYWVMb2FkZXInLCBpbml0aWFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Zvcm1hdCBub3Qgc3VwcG9ydGVkJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9jYWNoZSBzeXN0ZW0gKGknbGwgdHJ5IHRvIG1ha2UgaXQgd29yayBsYXRlciAuLi4pXHJcbiAgICAgIC8qbGV0IG9iakNvbnRlbnRzSlNPTiA9IEpTT04uc3RyaW5naWZ5KG1vZGVsTm9kZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKG1vZGVsTm9kZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKG9iakNvbnRlbnRzSlNPTik7XHJcbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG1vZGVsTm9kZSkpO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgdGVzdE9ial8ke29iai5vYmplY3R9YCwgb2JqQ29udGVudHNKU09OKTtcclxuICAgICAgY29uc29sZS5sb2coXCJzdG9yZWQgPyFcIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKHR5cGVvZiBtb2RlbE5vZGUpOyovXHJcbiAgICAgIC8vbGV0IGRhdGFTID0gc2VyaWFsaWpzZS5zZXJpYWxpemUobW9kZWxOb2RlKTtcclxuICAgICAgLy9jb25zb2xlLmxvZyhkYXRhUyk7XHJcblxyXG4gICAgICAvLyBVc2UgMyA/ISBBbWJpZW50IGxpZ2h0aW5nc1xyXG4gICAgICBpZiAodGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cykge1xyXG4gICAgICAgIGNvbnN0IGxpZ2h0c05vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICAgICAgbGlnaHRzTm9kZS5hZGRDb21wb25lbnQoJ21wLmFtYmllbnRMaWdodCcsIHtcclxuICAgICAgICAgIGludGVuc2l0eTogMSxcclxuICAgICAgICAgIGNvbG9yOiB7cjogMS4wLCBnOiAxLjAsIGI6IDEuMH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtb2RlbE5vZGUub2JqM0QucG9zaXRpb24uc2V0KFxyXG4gICAgICAgIG9iai5wb3NpdGlvbi54LFxyXG4gICAgICAgIG9iai5wb3NpdGlvbi55LFxyXG4gICAgICAgIG9iai5wb3NpdGlvbi56XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBtb2RlbE5vZGUub2JqM0Qucm90YXRpb24uc2V0KFxyXG4gICAgICAgIG9iai5yb3RhdGlvbi54LFxyXG4gICAgICAgIG9iai5yb3RhdGlvbi55LFxyXG4gICAgICAgIG9iai5yb3RhdGlvbi56XHJcbiAgICAgICk7XHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5zY2FsZS5zZXQob2JqLnNjYWxlLngsIG9iai5zY2FsZS55LCBvYmouc2NhbGUueik7XHJcbiAgICAgIGlmKGlzQXppbXV0aGFsQ3Jvd24pXHJcbiAgICAgIHtcclxuICAgICAgICAvKmlmKG1vZGVsTm9kZS5vYmozRC5zY2FsZS54ID49IDEuMCl7XHJcbiAgICAgICAgICBtb2RlbE5vZGUub2JqM0Quc2NhbGUuc2V0KG9iai5zY2FsZS54LzUwMDAsIG9iai5zY2FsZS55LzUwMDAsIG9iai5zY2FsZS56LzUwMDApO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIHRoaXMuYXppbXV0aGFsQ3Jvd249bW9kZWxOb2RlO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUF6aW11dGFsQ3Jvd24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQnkgZGVmYXV0LCBkdXJpbmcgY3JlYXRpb24sIG9iamVjdCBoYXMgdHJhbnNsYXRpb24gZ2l6bW9cclxuICAgICAgLy8gPT4gVXNlciBoYXMgdG8gY2xpY2sgb24gbGF0ZXJhbCBwYW5lbCwgYW5kIHNhdmUgaXRzIHBvc2l0aW9uIGFmdGVyIHBsYXlpbmcgd2l0aCBpdCFcclxuICAgICAgaWYgKG1vZGUgJiYgIWlzTmVzdFRoZXJtb3N0YXQpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaEdpem1vQ29udHJvbFRvM0RPYmplY3QoXHJcbiAgICAgICAgICBtb2RlbE5vZGUsXHJcbiAgICAgICAgICBzY2VuZU9iamVjdCxcclxuICAgICAgICAgIG1vZGUsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKS5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coZSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5sYXN0T2JqZWN0M0QgJiYgdHlwZW9mIHRoaXMubGFzdE9iamVjdDNELmlkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIC8vIHByb21wdCBUaHJlZUpTIFVVSUQgdG8gbWF0Y2ggb3VyIGxhc3QgZ2VuZXJhdGVkIG9iamVjdCBpZiBuZXcgKG5vdCBmcm9tIERiKVxyXG4gICAgICAgIG1vZGVsTm9kZS5vYmozRC51dWlkID0gdGhpcy5sYXN0T2JqZWN0M0QuaWQ7XHJcbiAgICAgIH0gZWxzZSBpZiAob2JqLmlkKSB7XHJcbiAgICAgICAgbW9kZWxOb2RlLm9iajNELnV1aWQgPSBvYmouaWQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sYXN0T2JqZWN0M0QgPSBtb2RlbE5vZGUub2JqM0Q7XHJcblxyXG4gICAgICAvLyBTdG9yZSB0aGlzIGluIG1lbW9yeSBNYXAgZGljdGlvbm5hcnlcclxuICAgICAgLy9jb25zb2xlLmxvZyhcIkFkZGluZyBvYmplY3Q6IFwiKTtcclxuICAgICAgLy9jb25zb2xlLmxvZyhtb2RlbE5vZGUpO1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELnNldChtb2RlbE5vZGUub2JqM0QudXVpZCwgbW9kZWxOb2RlKTtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNELnNldChtb2RlbE5vZGUub2JqM0QudXVpZCwgc2NlbmVPYmplY3QpO1xyXG5cclxuICAgICAgLyp0aGlzLnNkay5DYW1lcmEucG9zZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgZnVuY3Rpb24gKHBvc2U6IGFueSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImluIGNhbGxiYWNrXCIpXHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubGFzdENhbWVyYVBvc2l0aW9uKVxyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhwb3NlLnBvc2l0aW9uKVxyXG4gICAgICAgICAgaWYoKHBvc2UucG9zaXRpb24ueCA9PSB0aGlzLmxhc3RDYW1lcmFQb3NpdGlvbi54ICYmIHBvc2UucG9zaXRpb24ueSA9PSB0aGlzLmxhc3RDYW1lcmFQb3NpdGlvbi55ICYmIHBvc2UucG9zaXRpb24ueiA9PSB0aGlzLmxhc3RDYW1lcmFQb3NpdGlvbi56KSB8fCB0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCl7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJyZXR1cm5pbmdcIilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJjYW1lcmEgcG9zOlwiLHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgdGhpcy5sYXN0Q2FtZXJhUG9zaXRpb24gPSB7Li4ucG9zZS5wb3NpdGlvbn07XHJcbiAgICAgICAgICBpZih0aGlzLmxhc3RPYmplY3QzRCl7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE9iamVjdDNELnBvc2l0aW9uLnNldChwb3NlLnBvc2l0aW9uLngrLjUscG9zZS5wb3NpdGlvbi55Ky41LHBvc2UucG9zaXRpb24ueisuNSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKTsqL1xyXG5cclxuICAgICAgaWYgKGlzQW5pbWF0ZWRTZWN1cml0eUNhbWVyYSkge1xyXG5cclxuICAgICAgICBjb25zdCBhbmltYXRvciA9IG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLnNlY3VyaXR5Q2FtZXJhJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJuZWFyUGxhbmVcIjogMC4xLFxyXG4gICAgICAgICAgICBcImZhclBsYW5lXCI6IDEwLFxyXG4gICAgICAgICAgICBcImhvcml6b250YWxGT1ZcIjogNTIsXHJcbiAgICAgICAgICAgIFwiYXNwZWN0XCI6IDEuNzc3Nzc3Nzc3Nzc3Nzc3NyxcclxuICAgICAgICAgICAgXCJsb2NhbFBvc2l0aW9uXCI6IHtcclxuICAgICAgICAgICAgICBcInhcIjogMC4zLFxyXG4gICAgICAgICAgICAgIFwieVwiOiAwLjE4LFxyXG4gICAgICAgICAgICAgIFwielwiOiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwibG9jYWxSb3RhdGlvblwiOiB7XHJcbiAgICAgICAgICAgICAgXCJ4XCI6IC0xNSxcclxuICAgICAgICAgICAgICBcInlcIjogLTkwLFxyXG4gICAgICAgICAgICAgIFwielwiOiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sb3JcIjogNjUyODAsXHJcbiAgICAgICAgICAgIFwicGFuUGVyaW9kXCI6IDUsXHJcbiAgICAgICAgICAgIFwicGFuQW5nbGVcIjogLTQ1XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBtb2RlbE91dHB1dCA9IHNjZW5lT2JqZWN0LmFkZFBhdGgoe1xyXG4gICAgICAgICAgaWQ6ICdhbmltYXRlZC1tb2RlbCcsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnNkay5TY2VuZS5QYXRoVHlwZS5PVVRQVVQsXHJcbiAgICAgICAgICBub2RlOiBtb2RlbE5vZGUsXHJcbiAgICAgICAgICBjb21wb25lbnQ6IGFuaW1hdG9yLFxyXG4gICAgICAgICAgcHJvcGVydHk6ICdvYmplY3RSb290J1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3VyaXR5Q2FtZXJhQW5pbWF0b3IgPSBhbmltYXRvcjtcclxuICAgICAgICBpZiAoIW9iai52aWV3RnJ1c3R1bSkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGFuaW1hdG9yLnRvZ2dsZVZpZXdGcnVzdHVtKCk7XHJcbiAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc05lc3RUaGVybW9zdGF0KSB7XHJcbiAgICAgICAgLy8gVE9ETzogdXNlIGJpbmRQYXRoIGluc3RlYWQgdXNpbmcgTVAgc2RrIGNsYXNzZXMgKHNlZSBTZWN1cml0eSBDYW1lcmEgZXhhbXBsZSlcclxuICAgICAgICAvLyBmb3IgVFYgdXNlcyBDYW52YXNJbWFnZSBiZWxvdyFcclxuICAgICAgICAvLyBjb25zdCBjaSA9IG5ldyBDYW52YXNJbWFnZSgpO1xyXG4gICAgICAgIC8vIGNpLm9uSW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IGN2ID0gbmV3IENhbnZhc1JlbmRlcmVyKCk7XHJcbiAgICAgICAgY3Yub25Jbml0KCk7XHJcbiAgICAgICAgY29uc3QgcGxhbmUgPSBuZXcgUGxhbmVSZW5kZXJlcigpO1xyXG4gICAgICAgIHBsYW5lLm91dHB1dHMgPSB7XHJcbiAgICAgICAgICBvYmplY3RSb290OiBuZXcgT2JqZWN0M0QoKSxcclxuICAgICAgICAgIGNvbGxpZGVyOiBuZXcgT2JqZWN0M0QoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgaW5wdXRUZXh0dXJlID0gY3Yub3V0cHV0cy50ZXh0dXJlO1xyXG4gICAgICAgIHBsYW5lLnNldFJvb3RTY2VuZSh0aGlzLnRocmVlSlNTY2VuZSk7XHJcbiAgICAgICAgcGxhbmUub25Jbml0KG1vZGVsTm9kZSwgaW5wdXRUZXh0dXJlKTtcclxuICAgICAgICBjb25zdCBzYyA9IG5ldyBOZXN0VGhlcm1vc3RhdCgpO1xyXG4gICAgICAgIHNjLnNldENvbXBvbmVudChjb21wb25lbnQsIHBsYW5lLCBjdik7XHJcbiAgICAgICAgc2Muc2V0Um9vdFNjZW5lKHRoaXMudGhyZWVKU1NjZW5lKTtcclxuICAgICAgICBzYy5vbkluaXQobW9kZWxOb2RlLCBwbGFuZSwgaW5wdXRUZXh0dXJlKTtcclxuICAgICAgICBjdi5zZXRDYW52YXNOZXN0VGhlcm1vc3RhdFBhaW50ZXIoc2MpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgc2MuaW5wdXRzLmxvYWRpbmdTdGF0ZSA9IFwiTG9hZGVkXCI7XHJcbiAgICAgICAgICBzYy5vbklucHV0c1VwZGF0ZWQoKTtcclxuICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU21hcnRlcnBsYW5Qcm9tb3Rpb25hbFZpZGVvKSB7XHJcbiAgICAgICAgLy8gVE9ETzogdXNlIGJpbmRQYXRoIGluc3RlYWQgdXNpbmcgTVAgc2RrIGNsYXNzZXMgKHNlZSBTZWN1cml0eSBDYW1lcmEgZXhhbXBsZSlcclxuICAgICAgICBjb25zdCBzYyA9IG5ldyBUdlBsYXllcigpO1xyXG4gICAgICAgIHNjLnNldENvbXBvbmVudChjb21wb25lbnQpO1xyXG4gICAgICAgIHNjLm9uSW5pdChtb2RlbE5vZGUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgc2MuaW5wdXRzLmxvYWRpbmdTdGF0ZSA9IFwiTG9hZGVkXCI7XHJcbiAgICAgICAgICBzYy5vbklucHV0c1VwZGF0ZWQoKTtcclxuICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2NlbmVPYmplY3Quc3RhcnQoKTtcclxuICAgICAgcmVzb2x2ZSh0aGlzLmxhc3RPYmplY3QzRCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU9iamVjdFZpc2liaWxpdHkob2JqZWN0SWQ6IGFueSl7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQob2JqZWN0SWQpO1xyXG4gICAgb2JqLm9iajNELnZpc2libGUgPSAhb2JqLm9iajNELnZpc2libGU7XHJcbiAgICAvL3JldHVybiBvYmoub2JqM0QudmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBvaW50Q2FtZXJhVG8zRE9iamVjdChvYmplY3RJZDogYW55KXtcclxuICAgIGxldCBvYmogPSB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldChvYmplY3RJZCk7XHJcblxyXG4gICAgLy9XZSBjcmVhdGUgYSB0ZW1wb3JhcnkgVGFnXHJcbiAgICBjb25zdCBwb2lPYmplY3QgPSB7XHJcbiAgICAgIGNvb3JkaW5hdGU6IEpTT04uc3RyaW5naWZ5KG9iai5vYmozRC5wb3NpdGlvbiksXHJcbiAgICAgIHR5cGU6IFBvaVR5cGUuT0JKRUNUM0QsXHJcbiAgICAgIGVsZW1lbnRJRDogb2JqZWN0SWQsIC8vdG9kbzogYmUgY2FyZWZ1bCB3aXRoIHRoaXNcclxuICAgIH0gYXMgUE9JO1xyXG4gICAgY29uc3Qgb2JqZWN0RGIgPSB7aWQ6IG9iamVjdElkfSBhcyBEYk9iamVjdFR5cGU7XHJcblxyXG4gICAgdHJ5e1xyXG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZU1hdHRlcnRhZ0Zyb21QT0koUG9pVHlwZS5PQkpFQ1QzRCwgb2JqZWN0RGIsIHBvaU9iamVjdCk7XHJcbiAgICB9Y2F0Y2goZXJyOiBhbnkpe31cclxuXHJcbiAgICAvL05vdCByZWFsbHkgbmVjZXNzYXJ5IGFueW1vcmUgc2luY2UgdGhlIHRhZyB3aWxsIGRpc2FwcGVhciBxdWlja1xyXG4gICAgLy90aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIDAuMCk7Ly9vcGFjaXR5KTtcclxuICAgIC8vdGhpcy5zZGsuVGFnLmFsbG93QWN0aW9uKG1hdHRlcnRhZ0lELCB7fSk7IC8vZGlzYWJsZXMgZXZlcnkgYWN0aW9uXHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuZ2V0VGFnRnJvbUVsZW1lbnRJZChvYmplY3RJZCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5nb1RvVGFnKHJlc3VsdC50YWcpO1xyXG4gICAgdGhpcy5kZWxldGVMYXN0TWF0dGVydGFnKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTY2VuZU5vZGVGcm9tT2JqZWN0M0RJZCh1dWlkOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlTY2VuZU9iamVjdHMzRC5nZXQodXVpZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkaXNwbGF5QXppbXV0YWxDcm93bigpe1xyXG4gICAgaWYodGhpcy5hemltdXRoYWxDcm93bil7XHJcbiAgICAgIHRoaXMuYXppbXV0aGFsQ3Jvd24ub2JqM0QucG9zaXRpb24uc2V0KHRoaXMucG9zZUNhbWVyYS5wb3NpdGlvbi54LHRoaXMucG9zZUNhbWVyYS5wb3NpdGlvbi55LHRoaXMucG9zZUNhbWVyYS5wb3NpdGlvbi56KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXR0YWNoR2l6bW9Db250cm9sVG8zRE9iamVjdChcclxuICAgIG1vZGVsTm9kZTogYW55LFxyXG4gICAgc2NlbmVPYmplY3Q6IGFueSxcclxuICAgIG1vZGU6ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZScgfCAnc2NhbGUnLFxyXG4gICAgdmlzaWJsZTogYm9vbGVhblxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyBDcmVhdGUgYSBzY2VuZSBub2RlIHdpdGggYSB0cmFuc2Zvcm0gY29udHJvbCBjb21wb25lbnQuXHJcbiAgICBsZXQgbm9kZSA9IG51bGw7XHJcbiAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG4gICAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG15Q29udHJvbCA9IG5vZGUuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgbm9kZS5zdGFydCgpO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIE1ha2UgdGhlIHRyYW5zZm9ybSBjb250cm9sIHZpc2libGUgc28gdGhhdCB0aGUgdXNlciBjYW4gbWFuaXB1bGF0ZSB0aGUgY29udHJvbCBzZWxlY3Rpb24uXHJcbiAgICBteUNvbnRyb2wudHJhbnNmb3JtQ29udHJvbHMudmlzaWJsZSA9IHZpc2libGU7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gQXR0YWNoIHRoZSBtb2RlbCB0byB0aGUgdHJhbnNmb3JtIGNvbnRyb2xcclxuICAgIG15Q29udHJvbC5pbnB1dHMuc2VsZWN0aW9uID0gbW9kZWxOb2RlO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIHNldCAndHJhbnNsYXRlJyBtb2RlIHRvIHBvc2l0aW9uIHRoZSBzZWxlY3Rpb24uXHJcbiAgICBteUNvbnRyb2wuaW5wdXRzLm1vZGUgPSBtb2RlO1xyXG4gICAgbW9kZWxOb2RlLm9iajNELmNvbnRyb2xzID0gbXlDb250cm9sOyAvLyBzdG9yZSBnaXptb0N0cmwgaW5zaWRlIG9iamVjdFxyXG5cclxuICAgIGlmICghdGhpcy5sYXN0T2JqZWN0M0QgfHwgIXRoaXMubGFzdE9iamVjdDNELmNvbnRyb2xzKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbW9kZWxOb2RlLm9iajNELnV1aWQgPSB0aGlzLmxhc3RPYmplY3QzRC51dWlkIHx8IHRoaXMubGFzdE9iamVjdDNELmlkO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYGlkIG9iaiBpbiBTY2VuZSB3YXMgbm90IGFzc2lnbmVkIHRvIGlkIGZyb20gREIgc2luY2VgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RPYmplY3QzRCA9IG1vZGVsTm9kZS5vYmozRDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbW9kZWxOb2RlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlR2l6bW9Gcm9tTGFzdE9iamVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGFzdE9iamVjdDNELmNvbnRyb2xzLnRyYW5zZm9ybUNvbnRyb2xzLnZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMubGFzdE9iamVjdDNELmNvbnRyb2xzLnRyYW5zZm9ybUNvbnRyb2xzLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMubGFzdE9iamVjdDNELmNvbnRyb2xzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVZpZXdGcnVzdHVtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWN1cml0eUNhbWVyYUFuaW1hdG9yLnRvZ2dsZVZpZXdGcnVzdHVtKCk7XHJcbiAgfVxyXG5cclxuIC8qcHVibGljIHNldDNET2JqZWN0TW9kZShtb2RlbE5vZGU6IGFueSwgbW9kZT86IHN0cmluZykge1xyXG4gICBpZiAobW9kZSkge1xyXG4gICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMuc2VsZWN0aW9uID0gbW9kZWxOb2RlO1xyXG4gICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy5tb2RlID0gbW9kZTtcclxuXHJcbiAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgY29uc29sZS5sb2cobW9kZWxOb2RlKTtcclxuICAgICB9LCA1MDAwKTtcclxuXHJcbiAgIH0gZWxzZSB7XHJcbiAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy52aXNpYmxlID0gdHJ1ZTtcclxuICAgfVxyXG4gfSovXHJcbn1cclxuIl19
1578
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsSUFBSSxHQUNMLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBRVgsbUJBQW1CLEVBRW5CLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULGtCQUFrQixHQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFJL0IsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRzVDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN2RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFDckYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBR3ZGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7QUF3QnJFLE1BQU0sT0FBTyxpQkFBaUI7SUFvSjVCLFlBQ29CLE1BQWMsRUFDeEIsTUFBYyxFQUNkLFdBQTJCLEVBQzNCLGlCQUF3QyxFQUN4QyxNQUFjO1FBSGQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixz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RVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBc0pJLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbi8vaW1wb3J0ICogYXMgc2VyaWFsaWpzZSBmcm9tIFwic2VyaWFsaWpzZVwiO1xyXG5pbXBvcnQge1xyXG4gIGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyxcclxuICBwb2lUeXBlVG9TdHJpbmcsXHJcbiAgd2FpdCxcclxufSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01hdHRlcnRhZ0RhdGF9IGZyb20gJy4uL21hdHRlcnRhZ0RhdGEnO1xyXG5pbXBvcnQge1xyXG4gIERiT2JqZWN0VHlwZSxcclxuICBGZWF0dXJlVHlwZSxcclxuICBJT2JqZWN0M0QsXHJcbiAgTWF0dGVydGFnQWN0aW9uTW9kZSxcclxuICBQT0ksXHJcbiAgUG9pVHlwZSxcclxuICBTcE1vZHVsZSxcclxuICBUYWdBY3Rpb24sXHJcbiAgVmlld2VySW50ZXJhY3Rpb25zLFxyXG59IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge09iamVjdDNEfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7QmFzZVRhZ1NlcnZpY2V9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Jhc2VWaXNpYmlsaXR5U2VydmljZX0gZnJvbSAnLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7Q2FtZXJhTW9kZX0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7SVNjZW5lTm9kZSwgQ29tcG9uZW50T3V0cHV0fSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3NjZW5lLWNvbXBvbmVudC9TY2VuZUNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1NlY3VyaXR5Q2FtZXJhfSBmcm9tICcuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvc2VjdXJpdHktY2FtZXJhL1NlY3VyaXR5Q2FtZXJhJztcclxuaW1wb3J0IHtOZXN0VGhlcm1vc3RhdH0gZnJvbSAnLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL25lc3QtdGhlcm1vc3RhdC9OZXN0VGhlcm1vc3RhdCc7XHJcbmltcG9ydCB7UGxhbmVSZW5kZXJlcn0gZnJvbSAnLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL25lc3QtdGhlcm1vc3RhdC9QbGFuZVJlbmRlcmVyJztcclxuaW1wb3J0IHtDYW52YXNSZW5kZXJlcn0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvQ2FudmFzUmVuZGVyZXJcIjtcclxuaW1wb3J0IHtWaWRlb1JlbmRlcmVyfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3ZpZGVvLXJlbmRlcmVyL1ZpZGVvUmVuZGVyZXJcIjtcclxuaW1wb3J0IHtIbHNMb2FkZXJ9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvaHNsLWxvYWRlci9IbHNMb2FkZXJcIjtcclxuaW1wb3J0IHtUdlBsYXllcn0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy90di1wbGF5ZXIvVHZQbGF5ZXJcIjtcclxuXHJcbi8vIGltcG9ydCB7Q2FudmFzSW1hZ2V9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvbmVzdC10aGVybW9zdGF0L0NhbnZhc0ltYWdlXCI7XHJcblxyXG4vKipcclxuICogQ3VzdG9tIFRocmVlanMgT2JqZWN0IDNEIGludGVyZmFjZVxyXG4gKi9cclxuaW50ZXJmYWNlIFRocmVlSlNPYmplY3QzRCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB1dWlkPzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxuICByb3RhdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbiAgc2NhbGU/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG59XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgc2xvdHM6IGFueVtdID0gW107Ly9TbG90Tm9kZVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgbm9kZXM6IElTY2VuZU5vZGVbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgc2RrOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY29udGFpbmVyOiBhbnk7XHJcblxyXG4gIC8vIFBvc2l0aW9uIGNhbWVyYVxyXG4gIHByaXZhdGUgcG9zZU1hdHRlcnBvcnQ6IGFueTtcclxuXHJcbiAgcHVibGljIHBvc2VDYW1lcmE6IHsgcm90YXRpb246IGFueTsgcG9zaXRpb246IGFueTsgc3dlZXA6IGFueSB9O1xyXG4gIHB1YmxpYyBsYXN0Q2FtZXJhUG9zaXRpb246IGFueSA9IHt4OjAuMCx5OjAuMCx6OjAuMH07XHJcblxyXG4gIHByaXZhdGUgYXppbXV0aGFsQ3Jvd246YW55O1xyXG4gIC8vIFBvaW50ZXIgdHJpY2tcclxuICBwcml2YXRlIHBvaW50ZXJCdXR0b246IGFueTtcclxuXHJcbiAgLy8gRGlzcGxheSBhbmQgZ2V0IGN1cnJlbnQgcG9zaXRpb24gb2YgY3Vyc29yIChmb3IgQWRtaW5zIG9ubHkpXHJcbiAgcHJpdmF0ZSBnZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbjogYW55O1xyXG4gIHByaXZhdGUgY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uOiBhbnk7XHJcbiAgcHJpdmF0ZSB0ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWw6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBvbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uOiBhbnk7XHJcbiAgLy8gTWVhc3VyZSBtb2RlXHJcbiAgcHJpdmF0ZSBpc01lYXN1cmVNb2RlT24gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBpbnRlcmFjdGlvbk1vZGU6IG51bWJlciA9IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUO1xyXG5cclxuICAvLyBMaXN0IG9mIGNyZWF0ZWQgTWF0dGVydGFnIElEcyBpbiB0aGUgY3VycmVudCB2aWV3ZXIgc2Vzc2lvblxyXG4gIHByaXZhdGUgbWF0dGVydGFnSURzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gIC8vIERpY3Rpb25uYXJ5IG9mIE1hdHRlcnRhZ0lEIGFuZCBpdHMgZGF0YSAobWF0dGVydGFnRGF0YSlcclxuICBwcml2YXRlIGRpY3Rpb25uYXJ5VGFnczogTWFwPHN0cmluZywgTWF0dGVydGFnRGF0YT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlPYmplY3RzM0Q6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlTY2VuZU9iamVjdHMzRDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHVibGljIHRocmVlSlNTY2VuZTogYW55OyAvLyBnbG9iYWwgcm9vdCBzY2VuZSAobm90IHVzZWQgbm93ISlcclxuXHJcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHJlc29sdXRpb24gPSB7XHJcbiAgICB3aWR0aDogNTAwLFxyXG4gICAgaGVpZ2h0OiA2MDAsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xyXG4gICAgbWF0dGVydGFnczogZmFsc2UsXHJcbiAgICBzd2VlcHM6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHRhZ3NBdHRhY2htZW50czogT2JqZWN0ID0ge307XHJcblxyXG4gIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgcHVibGljIHN3ZWVwczogQXJyYXk8c3RyaW5nPiB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50U3dlZXA6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICBwdWJsaWMgY3VycmVudENhbWVyYVBvc2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZmxvb3JzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXIgfT4gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGxhc3RPYmplY3QzRDogYW55OyAvLyBUaHJlZSBKUyBvYmplY3RcclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BhY2VJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHRpbWVyUG9pbnRlcjogYW55O1xyXG5cclxuICBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZTtcclxuXHJcbiAgY29uZmlnOiBDb25maWc7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIG5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRDYW1lcmFNb2RlOiBDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG5cclxuICBwdWJsaWMgb25DYW1lcmFNb2RlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PENhbWVyYU1vZGU+KCk7XHJcblxyXG4gIHB1YmxpYyBvbkdvVG9UYWcgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gIHRhZ01lc3Nlbmdlck9uID0gZmFsc2U7XHJcblxyXG4gIFNQTW9kdWxlOiBTcE1vZHVsZTtcclxuXHJcbiAgcHVibGljIG9iamVjdENvbnRyb2w6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBzZWN1cml0eUNhbWVyYUFuaW1hdG9yOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGlvbnMgb24gbGVmdCBjbGljayB3aGVuIHBvc2l0aW9uaW5nIG1hdHRlcnRhZyBpbiB2aXNpdFxyXG4gICAqL1xyXG4gIHBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbih7Li4udGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbn0pOyAvLyBjb3B5ISEgbm90IHRoZSByZWZlcmVuY2VcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwoey4uLnRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsfSk7IC8vIGNvcHkhISBub3QgdGhlIHJlZmVyZW5jZVxyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWF0dGVyVGFnQ29udGVudEZvclRhZ0lEKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblZhbGlkYXRlZE1hdHRlcnRhZygpO1xyXG4gIH07XHJcblxyXG4gIHBvaW50ZXJSaWdodENsaWNrSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmNhbmNlbEZvbGxvd2luZ0N1cnNvcigpO1xyXG4gICAgYWxlcnQoJ2FjdGlvbiBjYW5jZWxsZWQnKTtcclxuICB9O1xyXG5cclxuICBwb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsLmlubmVySFRNTCA9IGBwb3NpdGlvbjpcclxuICAgICAgICR7dGhpcy5wb2ludFRvU3RyaW5nKHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24pfVxcblxyXG4gICAgICAgbm9ybWFsOlxyXG4gICAgICAgJHt0aGlzLnBvaW50VG9TdHJpbmcodGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwpfVxcblxyXG4gICAgICAgZmxvb3JJZDpcclxuICAgICAgICR7dGhpcy5wb3NlTWF0dGVycG9ydC5mbG9vcklkfWA7XHJcbiAgICAvLyB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ3Zpc2libGUnO1xyXG4gICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdjb25maWcnKSBjb25maWc6IENvbmZpZyxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG5cclxuICAgIC8vIFRPRE86IG9ubHkgZm9yIGRldiFcclxuICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiZcclxuICAgICAgKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignZGV2JykgIT09IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignbG9jYWxob3N0JykgIT09IC0xKSkge1xyXG4gICAgICB0aGlzLmludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wb3NlTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dFNob3cgPSB0aGlzLnBvc2VNYXR0ZXJwb3J0LnRpbWUgKyAxMDAwO1xyXG4gICAgICAgIGlmIChuZXcgRGF0ZSgpLmdldFRpbWUoKSA+IG5leHRTaG93KSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBjb29yZCA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbih0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLCB0aGlzLnBvc2VDYW1lcmEsIHNpemUpO1xyXG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y29vcmQueCAtIDI1fXB4YDtcclxuICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUudG9wID0gYCR7Y29vcmQueSAtIDIyfXB4YDtcclxuICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAvLyB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgTWF0dGVycG9ydCBhbmQgYWxsIGxpc3RlbmVycy9kYXRhXHJcbiAgICogQHBhcmFtIHRhZ1NlcnZpY2UgQmFzZVRhZ1NlcnZpY2UgKHRvIGluamVjdCBodG1sKVxyXG4gICAqIEBwYXJhbSBtb2R1bGUgU3BNb2R1bGUgKE11c2V1bSwgSW1tbykgdG8gc3Vic2NyaWJlIG9ubHkgdG8gbmVlZGVkIGZ1bmN0aW9ubm5hbGl0aWVzXHJcbiAgICogQHJldHVybnMgYm9vbGVhblxyXG4gICAqL1xyXG4gIGFzeW5jIGluaXRTZGsoXHJcbiAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgIG1vZHVsZTogU3BNb2R1bGUgPSBTcE1vZHVsZS5JTU1PXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5zZGspIHtcclxuICAgICAgLy8gY2xlYW4gaWYgc2RrIGlzIHJ1bm5pbmcgYWxyZWFkeVxyXG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMudGFnU2VydmljZSA9IHRhZ1NlcnZpY2U7XHJcbiAgICB0aGlzLlNQTW9kdWxlID0gbW9kdWxlO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN2aWV3ZXItcG9pbnRlci10cmljaydcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdmlld2VyLW1vZHVsZScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdmlld2VyLW1vZHVsZSdcclxuICAgICAgKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcclxuICAgICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFkZCBsaXN0ZW5lcnNcclxuICAgICAgaWYgKHRoaXMucG9pbnRlckJ1dHRvbikge1xyXG4gICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgIHRoaXMucG9pbnRlckxlZnRDbGlja0hhbmRsZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNhbmNlbCBvbiByaWdodCBjbGlja1xyXG4gICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgJ2NvbnRleHRtZW51JyxcclxuICAgICAgICAgIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBSZXRyaWV2ZSBET00gZWxlbWVudHNcclxuICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyNidXR0b24nXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3RleHQnXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICh0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uKSB7XHJcbiAgICAgICAgLy8gZ2V0IHBvc2l0aW9uIG9uIE1hdHRlcnBvcnQgXCJtb2RlbFwiIG9uIG1pZGRsZSBjbGlja1xyXG4gICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMb2FkIFNES1xyXG4gICAgICBjb25zb2xlLmxvZygnTG9hZGluZyBNYXR0ZXJwb3J0IFNESycpO1xyXG4gICAgICBjb25zdCBzaG93Y2FzZVdpbmRvdyA9IGlmcmFtZS5jb250ZW50V2luZG93O1xyXG4gICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAnbG9hZCcsXHJcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zZGsgPSBhd2FpdCBzaG93Y2FzZVdpbmRvdy5NUF9TREsuY29ubmVjdChcclxuICAgICAgICAgICAgICBzaG93Y2FzZVdpbmRvdyxcclxuICAgICAgICAgICAgICAncW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZCcsXHJcbiAgICAgICAgICAgICAgJzMuNSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIExvYWQgTWF0dGVydGFnIGljb25zIGFuZCBjdXN0b20gc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5JTU1POlxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLXRpY2tldCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl90aWNrZXRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLWVxdWlwbWVudCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9lcXVpcG1lbnRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLW1lYXN1cmUnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fbWVhc3VyZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tZGF0YScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1vYmplY3QzZCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9vYmplY3QzZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkFkZGVkOiBmdW5jdGlvbiAoXHJcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBhbnksXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW06IHsgcG9pbnRzOiBhbnkgfSxcclxuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogYW55XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgIC8vICAgICBcIml0ZW0gYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb25cIixcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5tZWFzdXJlbWVudHNbaW5kZXhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZSA9IGl0ZW0ucG9pbnRzO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gKGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5tb2RlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtZWFzdXJlbWVudE1vZGVTdGF0ZTogeyBhY3RpdmU6IGFueSB9KSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIG1lYXN1cmVtZW50IG1vZGUgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc01lYXN1cmVNb2RlT24gPSBtZWFzdXJlbWVudE1vZGVTdGF0ZS5hY3RpdmU7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdJcyBtZWFzdXJlbWVudCBtb2RlIGN1cnJlbnRseSBhY3RpdmU/ICcsIG1lYXN1cmVtZW50TW9kZVN0YXRlLmFjdGl2ZSk7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNwTW9kdWxlLk1VU0VVTTpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1kYXRhJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGFcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNwTW9kdWxlLkhPVEVMOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uX3Jvb21fYXZhaWxhYmxlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX3VuYXZhaWxhYmxlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fdW5hdmFpbGFibGVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uX3Jvb21fY2hvc2VuJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fY2hvc2VuXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX3ZpZXdlZCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3ZpZXdlZFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAnaWNvbi1wb3NpdGlvbicsXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Bvc2l0aW9uXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIEN1cnJlbnQgUm9vbSAodXNlZCBmb3IgZ2V0dGluZyBib3VuZGluZyBib3ggYW5kIGV2ZW50dWFsbHkgbGF6eSBsb2FkIG1hdHRlcnRhZyBvciBvYmplY3QzRCBpbnNpZGUgY3VycmVudCBSb29tKVxyXG4gICAgICAgICAgdGhpcy5zZGsuUm9vbS5jdXJyZW50LnN1YnNjcmliZSgoY3VycmVudFJvb20pID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYGhlbGxvIGN1cnJlbnQgUm9vbSAke0pTT04uc3RyaW5naWZ5KGN1cnJlbnRSb29tKX1gKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIDNEIHBvc2l0aW9uJ3MgcG9pbnRlclxyXG4gICAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJzZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ID0gaW50ZXJzZWN0aW9uO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93XHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHBvaW50ZXIgYW5kIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHRhZ1xyXG4gICAgICAgICAgICAgICAgLy8gKHdlIGFyZSBhYm91dCB0byB2YWxpZGF0ZSwgYnV0IGl0IGV4aXN0cyBpbiBzZGsgYWxyZWFkeSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlX2ZvbGxvd2luZ190YWcodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiYgISF0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlICYmXHJcbiAgICAgICAgICAgICAgKGRvY3VtZW50LlVSTC5pbmRleE9mKCdodHRwczovL2Rldi5zbWFydGVycGxhbi5pbycpICE9PSAtMSB8fCBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2xvY2FsaG9zdCcpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvL0NhbWVyYSBtb2RlXHJcbiAgICAgICAgICB0aGlzLnNkay5Nb2RlLmN1cnJlbnQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5kb2xsaG91c2UnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRE9MTEhPVVNFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5mbG9vcnBsYW4nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRkxPT1JQTEFOO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5pbnNpZGUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuSU5TSURFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS50cmFuc2l0aW9uaW5nJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLlRSQU5TSVRJT05JTkc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uQ2FtZXJhTW9kZUNoYW5nZWQubmV4dCh0aGlzLmN1cnJlbnRDYW1lcmFNb2RlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIENhbWVyYSdzIHZpZXdwb2ludFxyXG4gICAgICAgICAgdGhpcy5zZGsuQ2FtZXJhLnBvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhID0gcG9zZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhUG9zZS5uZXh0KHBvc2UpO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IHBvc2l0aW9uIGlzICcsIHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdSb3RhdGlvbiBhbmdsZSBpcyAnLCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlN3ZWVwIFVVSUQgaXNcIiwgcG9zZS5zd2VlcCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gc3dlZXBzXHJcbiAgICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHN1YnNjcihjb2xsZWN0aW9uOiB7fSkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU3dlZXAgY29sbGVjdGlvbiB1cGRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3dlZXBzID0gT2JqZWN0LmtleXMoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBjdXJyZW50IHN3ZWVwXHJcbiAgICAgICAgICB0aGlzLnNkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgZnVuY3Rpb24gc3Vic2NyKGN1cnJlbnRTd2VlcDogeyBzaWQ6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRvIHRoZSBjdXJyZW50IHN3ZWVwIGhhcyBvY2N1cnJlZC5cclxuICAgICAgICAgICAgICBpZiAoY3VycmVudFN3ZWVwLnNpZCA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdOb3QgY3VycmVudGx5IHN0YXRpb25lZCBhdCBhIHN3ZWVwIHBvc2l0aW9uJyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZW1taXRpbmcgc3dlZXBcIiwgY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcC5uZXh0KGN1cnJlbnRTd2VlcC5zaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBGbG9vciBkYXRhXHJcbiAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZCh0aGlzOiBhbnksIGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmxvb3JzID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gb24gdGFnIGNsaWNrIG9wZW4gZGV0YWlscyBwYWdlXHJcbiAgICAgICAgICB0aGlzLnNkay5vbigndGFnLmNsaWNrJywgKHNpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGdldCBvYmplY3Qgb2YgdGhpcyB0YWdcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHNpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKCFtYXR0ZXJ0YWdEYXRhKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdubyBtYXR0ZXJ0YWdEYXRhIHRvIGRpc3BsYXknKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGFnU2VydmljZS5nZXRVcmxGb3JTZWVEZXRhaWxzKFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSxcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAodXJsICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3Qgc2hvdyBkZXRhaWxzIGZvciB0YWcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gUG9pbnRlciB0cmlja1xyXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBhcHBlYXIgd2hlbiB0aGUgY3Vyc29yIGlzIHN0aWxsXHJcbiAgICAgICAgICAvLyBJdCB3aWxsIGludGVyY2VwdCB0aGUgY2xpY2sgb2YgdGhlIG1vdXNlIGJlZm9yZSBpdCB0cmlnZXJyaW5nIHRoZSBNYXR0ZXJwb3J0J3MgdG91ciBuYXZpZ2F0aW9uXHJcbiAgICAgICAgICB0aGlzLnRpbWVyUG9pbnRlciA9IHNldEludGVydmFsKFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvaW50ZXJUcmljay5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICA1MFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIFRyYW5zaXRpb25zXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICAndmlld21vZGUuY2hhbmdlc3RhcnQnLFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodG8sIGZyb20pIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU3RhcnRpbmcgdG8gbW92ZSB0byAnICsgdG8gKyAnIGZyb20gJyArIGZyb20pO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICAgJ3ZpZXdtb2RlLmNoYW5nZWVuZCcsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvbGRNb2RlLCBuZXdNb2RlKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0VuZGVkIHRvIG1vdmUgdG8gJyArIG5ld01vZGUgKyAnIGZyb20gJyArIG9sZE1vZGUpO1xyXG4gICAgICAgICAgICAgIGlmIChuZXdNb2RlICE9PSAnbW9kZS50cmFuc2l0aW9uaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLkV2ZW50LkVOVEVSLFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAob2xkU3dlZXAsIG5ld1N3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0xlYXZpbmcgc3dlZXAgJyArIG9sZFN3ZWVwKTtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRW50ZXJpbmcgc3dlZXAgJyArIG5ld1N3ZWVwKTtcclxuICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXppbXV0YWxDcm93bigpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRVhJVCxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGZyb21Td2VlcCwgdG9Td2VlcCkge1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ0xlYXZpbmcgc3dlZXAgJyArIGZyb21Td2VlcCk7XHJcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnVHJhbnNpdGlvbmluZyB0byBzd2VlcCAnICsgdG9Td2VlcCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBUT0RPOiBnZXQgc2NlbmUgd2l0aCBnZXR0ZXIgaW5zdGVhZCFcclxuICAgICAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgICAgIG5vZGUuc3RhcnQoKTtcclxuICAgICAgICAgIHRoaXMudGhyZWVKU1NjZW5lID0gbm9kZS5vYmozRC5wYXJlbnQ7XHJcblxyXG4gICAgICAgICAgLy8gYXdhaXQgdGhpcy5zZGsuU2NlbmUuY29uZmlndXJlKChyZW5kZXJlcjogYW55LCB0aHJlZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgIHJlbmRlcmVyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzID0gdHJ1ZTtcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgPSB0aHJlZS5zUkdCRW5jb2Rpbmc7XHJcbiAgICAgICAgICAvLyAgIHJlbmRlcmVyLnNoYWRvd01hcC5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIuc2hhZG93TWFwLmJpYXMgPSAwLjAwMDE7XHJcbiAgICAgICAgICAvLyAgIHJlbmRlcmVyLnNoYWRvd01hcC50eXBlID0gdGhyZWUuUENGU29mdFNoYWRvd01hcDtcclxuICAgICAgICAgIC8vIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAvLyBUT0RPOiB3YWl0IGZvciBNUCB0aWNrZXQgcmVzb2x1dGlvbiBiZWZvcmUgZGVjb21tZW50IHRoZXNlIVxyXG4gICAgICAgICAgLy8gV2FpdCB1bnRpbCBTaG93Y2FzZSBpcyBhY3R1YWxseSBwbGF5aW5nLi4uLlxyXG4gICAgICAgICAgLy8gdGhpcy5zZGsuVGFnLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIC8vICAgb25BZGRlZDogYXN5bmMgZnVuY3Rpb24gKGluZGV4LCBpdGVtLCBjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgICAgLy8gICAgIGxldCB0aGlzT3BhY2l0eSA9IDAuMjtcclxuICAgICAgICAgIC8vICAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkoaW5kZXgsIHRoaXNPcGFjaXR5KTtcclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgbGV0IHNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgICAvLyAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vICAgICAgIHNvdXJjZSA9IGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZGsuU2Vuc29yLmNyZWF0ZVNvdXJjZSh0aGlzLnNkay5TZW5zb3IuU291cmNlVHlwZS5TUEhFUkUsIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICBvcmlnaW46IGl0ZW0uYW5jaG9yUG9zaXRpb24sXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgcmFkaXVzOiBOdW1iZXIoMyksXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdXNlckRhdGE6IHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIGlkOiBpbmRleCArICctc3BoZXJlLXNvdXJjZScsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgfSxcclxuICAgICAgICAgIC8vICAgICAgICAgfSlcclxuICAgICAgICAgIC8vICAgICAgIF0pO1xyXG4gICAgICAgICAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgY3JlYXRlIFNwaGVyZSBzZW5zb3InKVxyXG4gICAgICAgICAgLy8gICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICAgIC8vICAgICAgIHJldHVybjtcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgICAgLy8gICAgIGxldCBzZW5zb3IgPSBudWxsO1xyXG4gICAgICAgICAgLy8gICAgIHRyeSB7XHJcbiAgICAgICAgICAvLyAgICAgICBzZW5zb3IgPSBhd2FpdCB0aGlzLnNkay5TZW5zb3IuY3JlYXRlU2Vuc29yKHRoaXMuc2RrLlNlbnNvci5TZW5zb3JUeXBlLkNBTUVSQSk7XHJcbiAgICAgICAgICAvLyAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBjcmVhdGUgQ2FtZXJhIHNlbnNvcicpXHJcbiAgICAgICAgICAvLyAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgICBpZiAoIXNlbnNvcikge1xyXG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgc2Vuc29yLmFkZFNvdXJjZSguLi5zb3VyY2UpO1xyXG4gICAgICAgICAgLy8gICAgIHNlbnNvci5yZWFkaW5ncy5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgLy8gICAgICAgb25VcGRhdGVkKHNvdXJjZSwgcmVhZGluZykge1xyXG4gICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyh0aGlzT3BhY2l0eSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGxldCBvbGRPcGFjaXR5ID0gdGhpc09wYWNpdHk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGlmIChyZWFkaW5nLmluUmFuZ2UpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzT3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgY29uc29sZS5sb2coaW5kZXggKyAnIGlzIGluUmFuZ2UnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChyZWFkaW5nLmluVmlldykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKGluZGV4ICsgJyBpcyBpblZpZXcgYnV0IG5vdCBpblJhbmdlJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpc09wYWNpdHkgPSAwLjU7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpc09wYWNpdHkgPSAwLjI7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgY29uc29sZS5sb2coaW5kZXggKyAnIGlzIG5vdCBpblZpZXcgb3IgaW5SYW5nZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkoaW5kZXgsIHRoaXNPcGFjaXR5KTtcclxuICAgICAgICAgIC8vICAgICAgICAgLypcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBpbmMgPSAwLjAxO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKG9sZE9wYWNpdHkgPiB0aGlzT3BhY2l0eSkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBpbmMgPSAtMC4wMTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSBvbGRPcGFjaXR5OyBpICE9IHRoaXNPcGFjaXR5OyBpPWkraW5jKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBtcFNkay5UYWcuZWRpdE9wYWNpdHkoaW5kZXgsIGkpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZWxheScsIGkpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sMTApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAqL1xyXG4gICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgIC8vc2Vuc29yLnNob3dEZWJ1Zyh0cnVlKTtcclxuICAgICAgICAgIC8vICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgLy8gICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiAoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCdDb2xsZWN0aW9uIHJlY2VpdmVkLiBUaGVyZSBhcmUgJywgT2JqZWN0LmtleXMoY29sbGVjdGlvbikubGVuZ3RoLCAnIFRhZ3MgaW4gdGhlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHNldExpZ2h0aW5nT2ZmKCkge1xyXG4gICAgdGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwb2ludFRvU3RyaW5nKHBvaW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfSk6IHN0cmluZyB7XHJcbiAgICB2YXIgeCA9IHBvaW50LngudG9GaXhlZCgzKTtcclxuICAgIHZhciB5ID0gcG9pbnQueS50b0ZpeGVkKDMpO1xyXG4gICAgdmFyIHogPSBwb2ludC56LnRvRml4ZWQoMyk7XHJcblxyXG4gICAgcmV0dXJuIGB7IHg6ICR7eH0sIHk6ICR7eX0sIHo6ICR7en0gfWA7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWVhc3VyZW1lbnRzIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgYWZ0ZXIgbWVhc3VyZW1lbnQgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKSB7XHJcbiAgICBpZiAodGhpcy5sYXN0TWVhc3VyZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG51bWJlclBvaW50cyA9IHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1iZXJQb2ludHM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXhdXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFrZVNjcmVlblNob3QoKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX21lYXN1cmVtZW50YF0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldExhc3REaXN0YW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXN0YW5jZXNMYXN0TWVhc3VyZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHNjcmVlbnNob3QgYW5kIHNhdmVzIGJhc2U2NCBpbiBsYXN0U2NyZWVuc2hvdFVyaVxyXG4gICAqIEByZXR1cm5zIFByb21pc2VcclxuICAgKi9cclxuICB0YWtlU2NyZWVuU2hvdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KFxyXG4gICAgICB0aGlzLnJlc29sdXRpb24sXHJcbiAgICAgIHRoaXMudmlzaWJpbGl0eVxyXG4gICAgKS50aGVuKFxyXG4gICAgICBmdW5jdGlvbiAoc2NyZWVuU2hvdFVyaTogYW55KSB7XHJcbiAgICAgICAgLy8gYmFzZTY0IHN0cmluZ1xyXG4gICAgICAgIHRoaXMubGFzdFNjcmVlbnNob3RVcmkgPSBzY3JlZW5TaG90VXJpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuU2hvdFVyaSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTY3JlZW5zaG90VXJpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE1lYXN1cmVtZW50KCk6IE9iamVjdCB7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBtZWFzdXJlOiB0aGlzLmxhc3RNZWFzdXJlLFxyXG4gICAgICBzd2VlcDogdGhpcy5wb3NlQ2FtZXJhLnN3ZWVwLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIFV0aWxzIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8qKlxyXG4gICAqIFN0eWxpbmcgb2YgcG9pbnRlclxyXG4gICAqL1xyXG4gIHVwZGF0ZVBvaW50ZXJUcmljaygpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgJiZcclxuICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydCAmJlxyXG4gICAgICB0aGlzLmdldERpc3RQb3NpdGlvbihcclxuICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvblxyXG4gICAgICApID4gMjVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb29yZHMgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgICAgc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUubGVmdCA9IGAke1xyXG4gICAgICAgIGNvb3Jkcy54ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1XHJcbiAgICAgIH1weGA7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZHMueSAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNX1weGA7XHJcbiAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhbHRpbWUgbWF0dGVydGFnIGZvbGxvd2luZyB0aGUgY3Vyc29yXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZyBzdHJpbmdcclxuICAgKi9cclxuICBlbmFibGVfZm9sbG93aW5nX3RhZyhtYXR0ZXJ0YWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWcsIHtcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnggKiAxLFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueSAqIDEsXHJcbiAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi56ICogMSxcclxuICAgICAgfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC56ICogMC4zLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHd3ZWVuIHR3byAzRCBwb3NpdGlvbnNcclxuICAgKiBVc2VkIGluIG9yZGVyIHRvIHNlZSBob3cgbXVjaCB0aGUgY3Vyc29yIGhhcyBtb3ZlZCBmcm9tIHRoZSBwcmV2aW91cyBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBwb3MxXHJcbiAgICogQHBhcmFtIHBvczJcclxuICAgKi9cclxuICBnZXREaXN0UG9zaXRpb24ocG9zMTogYW55LCBwb3MyOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29vcmRzMSA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMSxcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29vcmRzMiA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMixcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgKGNvb3JkczEueCAtIGNvb3JkczIueCkgKiogMiArIChjb29yZHMxLnkgLSBjb29yZHMyLnkpICoqIDJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWF0dGVydGFnIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgTWF0dGVydGFnIHRoYXQgd2lsbCBmb2xsb3cgdGhlIGN1cnNvclxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhIE1hdHRlcnRhZ0RhdGFcclxuICAgKi9cclxuICBhc3luYyBhZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSkge1xyXG4gICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKCdmb2xsb3dpbmcgdGhlIHRhZycsIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKHRoaXMubWF0dGVydGFnVG9Gb2xsb3csICdpY29uLXBvc2l0aW9uJyk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIE1hdHRlcnRhZyB0byB2aWV3ZXIgZm9yIGFuIGV4aXN0aW5nIG9iamVjdCB3aXRoIGNvb3JkaW5hdGVzIChpbiBtYXR0ZXJ0YWdEYXRhLnBvaSlcclxuICAgKiAocG9zaXRpb24sIGluamVjdGVkIGh0bWwsIHNldCBpY29uKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICogcmV0dXJucyBtYXR0ZXJ0YWdJRFxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1RvVmlld2VyKFxyXG4gICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgbGV0IHNpZExpc3Q7XHJcbiAgICBpZiAoIXRoaXMuc2RrKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgc2lkTGlzdCA9IGF3YWl0IHRoaXMuc2RrLlRhZy5hZGQobWF0dGVydGFnRGF0YS5nZXREYXRhKCkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ1RhZyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHZpc2l0JyxcclxuICAgICAgICBlcnJvcixcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpZExpc3QpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnSUQgPSBzaWRMaXN0WzBdO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImFkZGVkIHRhZ1wiLCBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSwgbWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KG1hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgcmV0dXJuIG1hdHRlcnRhZ0lEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb25zIHdoZW4gcG9zaXRpb24gb2YgbWF0dGVydGFnIGlzIHZhbGlkYXRlZCBieSBsZWZ0IGNsaWNrXHJcbiAgICovXHJcbiAgb25WYWxpZGF0ZWRNYXR0ZXJ0YWcoKSB7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICBjb25zdCBjYWxsYmFja01vZGUgPSB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAgIC5nZXQobGFzdFRhZylcclxuICAgICAgICAuZ2V0Q2FsbGJhY2tBY3Rpb25Nb2RlKCk7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2tBZnRlck1hdHRlcnRhZ1ZhbGlkYXRpb24oY2FsbGJhY2tNb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVycyBuZXcgaWNvbiAocGF0aCB0byBpbWFnZSkgYW5kIHNldCBpdHMgZm9yIE1hdHRlcnRhZ1xyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvblBhdGggc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTmV3SWNvbkFuZFNldEZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uUGF0aDogc3RyaW5nKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoYGljb25fJHttYXR0ZXJ0YWdJRH1gLCBpY29uUGF0aCk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGBpY29uXyR7bWF0dGVydGFnSUR9YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIGljb24gb2YgTWF0dGVydGFnICh0aGUgaWNvbk5hbWUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgPSBvbmUgb2YgZGVmYXVsdCBvbmVzKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvbk5hbWUgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0UmVnaXN0cmVkSWNvbkZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ2NvdWxkIG5vdCBlZGl0IEljb24gd2l0aCBuYW1lICcsXHJcbiAgICAgICAgaWNvbk5hbWUsXHJcbiAgICAgICAgJy4gSXMgaXQgcmVnaXN0ZXJlZD8nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGRlZmF1bHQgaWNvbiBmb3IgYSB0YWcgKHJlZ2lzdGVyZWQgaW4gaW5pdFNkaykgT1IgdXNlcyB0YWdJY29uIGZyb20gUE9JIChhdmFpbGFibGUgZnJvbSBNYXR0ZXJ0YWdEYXRhKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YSBNYXR0ZXJ0YWdEYXRhXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBzZXRUYWdJY29uQW5kT3BhY2l0eShcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5TUE1vZHVsZSA9PT0gU3BNb2R1bGUuSE9URUwpIHtcclxuICAgICAgY29uc3Qgcm9vbSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uX3Jvb21gO1xyXG4gICAgICBpZiAocm9vbS5hdmFpbGFibGUpIHtcclxuICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV9hdmFpbGFibGVgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X3VuYXZhaWxhYmxlYDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RyaW5nVGFnVHlwZSA9IHBvaVR5cGVUb1N0cmluZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSk7XHJcbiAgICBsZXQgb3BhY2l0eSA9IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX09QQUNJVFlfVEFHO1xyXG4gICAgbGV0IGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfWA7XHJcbiAgICBjb25zdCBwb2kgPSBtYXR0ZXJ0YWdEYXRhLmdldFBvaSgpO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kudGFnSWNvbikge1xyXG4gICAgICBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSA9PT0gUG9pVHlwZS5EQVRBKSB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVApIHtcclxuICAgICAgICAgIHRhZ0ljb24uc3JjID0gdGhpcy50YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZmVhdHVyZSwgcG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aFNpZ25lZCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRTaWduZWRUYWdJY29uU291cmNlKFxyXG4gICAgICAgICAgdGFnSWNvbi5zcmNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwYXRoU2lnbmVkKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX0tJHttYXR0ZXJ0YWdJRH0tJHttYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleH1gO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoaWNvbk5hbWUsIHBhdGhTaWduZWQpO1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleCArPSAxO1xyXG4gICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciByZWdpc3Rlckljb24nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24ub3BhY2l0eSkge1xyXG4gICAgICAgIG9wYWNpdHkgPSB0YWdJY29uLm9wYWNpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIG9wYWNpdHkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGVkaXRJY29uIG9yIG9wYWNpdHknLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gbGFzdCB0YWcgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGdvVG9MYXN0VGFnKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgdGhpcy5nb1RvVGFnKGxhc3RUYWcpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gTWF0dGVydGFnIHdpdGggSUQgcHJvdmlkZWRcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBnb1RvVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIGlmIChtYXR0ZXJ0YWdJRCA9PT0gJycpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25Hb1RvVGFnLm5leHQobWF0dGVydGFnSUQpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5jdXJyZW50LndhaXRVbnRpbChcclxuICAgICAgICAoY3VycmVudFN3ZWVwKSA9PiBjdXJyZW50U3dlZXAgIT09ICcnXHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5uYXZpZ2F0ZVRvVGFnKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5UcmFuc2l0aW9uLkZMWVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBuYXZpZ2F0ZSB0byB0YWcnLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGNvbnRlbnQgb2YgTWF0dGVydGFnIHdpdGggbWF0dGVydGFnSUQgKGJpbGxib2FyZCwgaW5qZWN0ZWQgaHRtbCwgdGFnIGljb24pXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUgPSBudWxsLFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZSA9IG51bGxcclxuICApIHtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0QmlsbGJvYXJkKFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5nZXREYXRhKClcclxuICAgICk7XHJcbiAgICBpZiAob2JqZWN0ICYmIHRhZ1R5cGUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNldFRhZ0ljb25BbmRPcGFjaXR5KFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgaW5qZWN0ZWQgaHRtbCBmb3IgTWF0dGVydGFnXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVJbmplY3RlZEh0bWxGb3JUYWdJRChcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IGFueSxcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGVcclxuICApIHtcclxuICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBNYXR0ZXJ0YWcgZnJvbSBWaWV3ZXIgYnkgaXRzIElEXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNkay5UYWcucmVtb3ZlKG1hdHRlcnRhZ0lEKTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGxhdGVzdCBjcmVhdGVkIG1hdHRlcnRhZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHRoaXMubWF0dGVydGFnSURzLnBvcCgpO1xyXG4gICAgaWYgKG1hdHRlcnRhZ0lEKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlTWF0dGVydGFnRnJvbUlkKG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExlZ2FjeTogdXNlZCB0byBiZSBjYWxsZWQgYWN0aW9uX2FkZF9tYXR0ZXJ0YWdfZnJvbV9QT0lcclxuICAgKiBBZGRzIGFuZCBjb25maWd1cmVzIE1hdHRlcnRhZyBmb3IgYW4gb2JqZWN0IChUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjKSB0aGF0IGNvcnJlc3BvbmRzIHRvIFBPSSAoY29vcmRpbmF0ZXMsIHRhZ0ljb24pXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUuLi5cclxuICAgKiBAcGFyYW0gcG9pIFBPSVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaTogUE9JXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIGNoZWNrIGlmIHRhZyBleGlzdHMgYWxyZWFkeVxyXG4gICAgY29uc3Qge3RhZywgc3dlZXB9ID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKG9iamVjdC5pZCk7XHJcbiAgICBpZiAodGFnKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwidGFnIGV4aXN0c1wiLCBvYmplY3QpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YSh0YWdUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAocG9pLm1ldGFkYXRhKSB7XHJcbiAgICAgIGNvbnN0IHRhZ01ldGFkYXRhID0gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpO1xyXG4gICAgICBpZiAodGFnTWV0YWRhdGEubm9ybWFsKSB7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwodGFnTWV0YWRhdGEubm9ybWFsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7eDogMCwgeTogLTAuMTUsIHo6IDB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQocG9pLm1hdHRlcnBvcnRTd2VlcElEKTtcclxuICAgIH1cclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlZFRhZ0lEID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGlmIChjcmVhdGVkVGFnSUQgJiYgdGhpcy5zZGspIHtcclxuICAgICAgYXdhaXQgdGhpcy5zZXRUYWdJY29uQW5kT3BhY2l0eShjcmVhdGVkVGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIGNyZWF0ZWRUYWdJRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmplY3QgY3VzdG9tIEhUTUwgYXMgTWF0dGVydGFnIGNvbnRlbnRcclxuICAgKiBAcGFyYW0gdGFnVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSBldGNcclxuICAgKiBAcGFyYW0gdGFnSUQgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGU6IFBvaVR5cGUsIG9iamVjdDogRGJPYmplY3RUeXBlLCB0YWdJRDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgb2JqZWN0KTtcclxuICAgIGlmIChodG1sICE9PSAnJyAmJiB0aGlzLnNkaykge1xyXG4gICAgICBjb25zdCBzY3JpcHRUYWcgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0U2NyaXB0Rm9yVGFnKG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICAgIGh0bWwgKz0gYCR7c2NyaXB0VGFnfWA7XHJcbiAgICAgIC8vIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlIHNhbmRib3hcclxuICAgICAgY29uc3QgW3NhbmRib3hJZCwgbWVzc2VuZ2VyXSA9IGF3YWl0IHRoaXMuc2RrLlRhZy5yZWdpc3RlclNhbmRib3goaHRtbCk7XHJcblxyXG4gICAgICAvLyBkZXRhY2ggcHJldmlvdXMgc2FuZGJveCBmcm9tIGEgdGFnXHJcbiAgICAgIGxldCBhdHRhY2htZW50SUQgPSB0aGlzLnRhZ3NBdHRhY2htZW50c1t0YWdJRF07XHJcbiAgICAgIGlmIChhdHRhY2htZW50SUQpIHtcclxuICAgICAgICB0aGlzLnNkay5UYWcuZGV0YWNoKHRhZ0lELCBhdHRhY2htZW50SUQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFnc0F0dGFjaG1lbnRzW3RhZ0lEXSA9IHNhbmRib3hJZDtcclxuXHJcbiAgICAgIC8vIGF0dGFjaCB0aGUgc2FuZGJveCB0byBhIHRhZ1xyXG4gICAgICB0aGlzLnNkay5UYWcuYXR0YWNoKHRhZ0lELCBzYW5kYm94SWQpO1xyXG4gICAgICAvLyByZWNlaXZlIGRhdGEgZnJvbSB0aGUgc2FuZGJveFxyXG4gICAgICAvLyB0YWdNZXNzZW5nZXJPbiBhbGxvd3MgdG8gZ28gaGVyZSBvbmx5IG9uY2VcclxuICAgICAgaWYgKCF0aGlzLnRhZ01lc3Nlbmdlck9uKSB7XHJcbiAgICAgICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VDbGljayA9IChmZWF0dXJlSUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJpbWFnZSBjbGljayBoYW5kbGVyXCIsIGZlYXR1cmVJRCk7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25JbWFnZUNsaWNrKGZlYXR1cmVJRCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYXVkaW9DbGljayA9IChhdWRpb0NvbW1lbnRJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImF1ZGlvIGNsaWNrIGhhbmRsZXJcIiwgYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCB2aWRlb0NsaWNrID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25WaWRlb0NsaWNrKHVybCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uREVUQUlMX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uVElDS0VUX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLkFVRElPX0NMSUNLLCBhdWRpb0NsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLklNQUdFX0NMSUNLLCBpbWFnZUNsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLlZJREVPX0NMSUNLLCB2aWRlb0NsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uRE9DX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRG9jQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uWU9VVFVCRV9DTElDSyxcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbllvdXR1YmVDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiBodG1sIGlzIGVtcHR5IChjYXNlIG9mIEVNQkVEIGNvbnRlbnQpLCB3ZSBlZGl0IGJpbGxib2FyZCBmb3IgRmVhdHVyZSBhbmQgYXR0YWNoIG5ldyBjb250ZW50XHJcbiAgICAgIGNvbnN0IHtjb21tZW50LCB0YWdEZXNjcmlwdGlvbn0gPVxyXG4gICAgICAgIHRoaXMudGFnU2VydmljZS5nZXRCaWxsYm9hcmRNZWRpYVRvRW1iZWQob2JqZWN0KTtcclxuICAgICAgaWYgKGNvbW1lbnQpIHtcclxuICAgICAgICAvLyByZWdpc3RlciB0aGUgbWVkaWFcclxuICAgICAgICBjb25zdCBbYXR0YWNobWVudElEXSA9IGF3YWl0IHRoaXMuc2RrLlRhZy5yZWdpc3RlckF0dGFjaG1lbnQoXHJcbiAgICAgICAgICBjb21tZW50LmV4dGVybmFsTGlua1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYXR0YWNoXHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLmF0dGFjaCh0YWdJRCwgYXR0YWNobWVudElEKTtcclxuICAgICAgICB0aGlzLnNkay5UYWcuZWRpdEJpbGxib2FyZCh0YWdJRCwge1xyXG4gICAgICAgICAgbGFiZWw6IG9iamVjdC50aXRsZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YWdEZXNjcmlwdGlvbixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpIHtcclxuICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5yZW1vdmUoLi4udGhpcy5tYXR0ZXJ0YWdJRHMpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdJRHMgPSBbXTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIE1hdHRlcnRhZyBmcm9tIHZpc2l0IGFzc29jaWF0ZWQgd2l0aCBvYmplY3QgSUQgKHRpY2tldElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVNYXR0ZXJ0YWdGb3JPYmplY3QoZWxlbWVudElEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1hdHRlclRhZ0lEID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRCkudGFnO1xyXG4gICAgaWYgKG1hdHRlclRhZ0lEKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuVGFnLnJlbW92ZShtYXR0ZXJUYWdJRCk7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKG1hdHRlclRhZ0lEKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubWF0dGVydGFnSURzLmluZGV4T2YobWF0dGVyVGFnSUQpO1xyXG4gICAgICAgIHRoaXMubWF0dGVydGFnSURzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBkZWxldGUgdGFnJywgbWF0dGVyVGFnSUQsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdXVpZCBmcm9tIHRocmVlanNcclxuICAgKiBAcGFyYW0gdXVpZFxyXG4gICAqL1xyXG4gIGFzeW5jIGRlbGV0ZU9iamVjdDNEKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQodXVpZCkub2JqM0QudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0M0RNb2RlbE5vZGVGcm9tRGljdGlvbm5hcnkodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgICAgbGV0IG9iaiA9IHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0QuZ2V0KHV1aWQpO1xyXG4gICAgICBpZighb2JqKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIndlaXJkIHRoaW5nIGFnYWluXCIpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIC8vbWlnaHQgYnJlYWsgdGhpbmdzIG9yIGZpeCBldmVyeXRoaW5nIC4uP1xyXG4gICAgICBpZihvYmoub2JqM0QudXVpZCAhPSB1dWlkKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIndlIGhhdmUgVEhFIHByb2JsZW1cIik7XHJcbiAgICAgICAgb2JqLm9iajNELnV1aWQgPSB1dWlkO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzICBNYXR0ZXJ0YWdEYXRhIGFuZCBzdGFydCByZXBvc2l0aW9uaW5nIChjcmVhdGVzIHRlbXBvcmFyeSBtYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3IpXHJcbiAgICogQHBhcmFtIHBvaVR5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBlbGVtZW50IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBldGNcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdXaGVuUmVwb3NpdGlvbmluZyhwb2lUeXBlOiBQb2lUeXBlLCBlbGVtZW50OiBEYk9iamVjdFR5cGUpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YShwb2lUeXBlKTtcclxuICAgIC8vIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGV4aXN0aW5nIHRhZ1xyXG4gICAgY29uc3QgW3BvaV0gPSBlbGVtZW50LnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9zaXRpb24oSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSkpO1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpOyAvLyB0byBrZWVwIGN1c3RvbSB0YWdJY29uIGFuZCBvcGFjaXR5XHJcbiAgICB9XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQodGhpcy5wb3NlQ2FtZXJhLnN3ZWVwKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0Um90YXRpb24odGhpcy5wb3NlQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KGVsZW1lbnQsIHBvaVR5cGUpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IGF3YWl0IHRoaXMuYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuUE9TSVRJT05JTkcpO1xyXG4gICAgYXdhaXQgdGhpcy5hZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIE1hdHRlcnRhZ0RhdGEgYW5kIG1hdHRlcnRhZyB0aGF0IGZvbGxvd3MgdGhlIGN1cnNvciB3aGVuIGNob29zaW5nIHBvc2l0aW9uIGZvciBhIG5ldyBvYmplY3RcclxuICAgKiBAcGFyYW0gcG9pVHlwZVxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1doZW5BZGRpbmcocG9pVHlwZTogUG9pVHlwZSkge1xyXG4gICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHBvaVR5cGUpO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHRoaXMucG9zZUNhbWVyYS5zd2VlcCk7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFJvdGF0aW9uKHRoaXMucG9zZUNhbWVyYS5yb3RhdGlvbik7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HKTtcclxuICAgIGF3YWl0IHRoaXMuYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VscyBmb2xsb3dpbmcgb2YgY3Vyc29yIChtZWFuaW5nIGRlbGV0aW5nIGxhc3QgTWF0dGVydGFnKVxyXG4gICAqL1xyXG4gIGNhbmNlbEZvbGxvd2luZ0N1cnNvcigpIHtcclxuICAgIHRoaXMuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG4gIH1cclxuXHJcbiAgc2V0TGFzdE9iamVjdDNEKGxhc3RPYmplY3QzRDogVGhyZWVKU09iamVjdDNEKSB7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRCA9IGxhc3RPYmplY3QzRDtcclxuICB9XHJcblxyXG4gIGdldExhc3RPYmplY3QzRCgpOiBUaHJlZUpTT2JqZWN0M0Qge1xyXG4gICAgcmV0dXJuIHRoaXMubGFzdE9iamVjdDNEO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybXMgY2FsbGJhY2sgYWZ0ZXIgbWF0dGVydGFnIHBvc2l0aW9uIHdhcyB2YWxpZGF0ZWQgKGNyZWF0aW9uIG9mIG9iamVjdCBvciByZXBvc2l0aW9uaW5nKVxyXG4gICAqIEBwYXJhbSBtb2RlIE1hdHRlcnRhZ0FjdGlvbk1vZGVcclxuICAgKi9cclxuICBjYWxsYmFja0FmdGVyTWF0dGVydGFnVmFsaWRhdGlvbihtb2RlOiBNYXR0ZXJ0YWdBY3Rpb25Nb2RlKSB7XHJcbiAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0VRVUlQTUVOVDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9lcXVpcGBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9USUNLRVQ6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfdGlja2V0YF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX09CSkVDVDNEOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX29iamVjdDNkYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0RBVEE6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCc/JykpIHtcclxuICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybC5zdWJzdHJpbmcoMCwgdGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJz8nKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3VybH0vYWRkX2ZlYXR1cmVgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREVTSzpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9mZWF0dXJlYF0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7aXNEZXNrOiB0cnVlfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9ST09NOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX3Jvb21gXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9PQkpFQ1QzRDpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgLy8gRE8gTm90aGluZyAocm91dGluZyksIGp1c3RcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vb2JqZWN0M2QvJHt0aGlzLmxhc3RPYmplY3QzRC5pZH1gXSxcclxuICAgICAgICAgICAge3F1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9fVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9USUNLRVQ6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZGV0YWlsLyR7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobGFzdFRhZykuZWxlbWVudElEXHJcbiAgICAgICAgICAgICAgfWAsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHtxdWVyeVBhcmFtczoge3Bvc2l0aW9uaW5nOiB0cnVlfX1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fRVFVSVBNRU5UOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2VxdWlwLyR7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobGFzdFRhZykuZWxlbWVudElEXHJcbiAgICAgICAgICAgICAgfWAsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHtxdWVyeVBhcmFtczoge3Bvc2l0aW9uaW5nOiB0cnVlfX1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fREFUQTpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtwb3NpdGlvbmluZzogdHJ1ZX0sIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgOiBcIm1lcmdlXCJcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX1JPT006XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9LCBxdWVyeVBhcmFtc0hhbmRsaW5nIDogXCJtZXJnZVwiXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdWxseSB1cGRhdGVzIGV4aXN0aW5nIE1hdHRlcnRhZyBjb250ZW50IHdpdGggZGF0YSBvZiBvYmplY3QgKFRpY2tldCwgRXF1aXBtZW50LCBEZXNrKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBEZXNrXHJcbiAgICogQHBhcmFtIHBvaVR5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBwb2kgUE9JXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0T2JqZWN0QW5kUG9pSW5UYWcoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2lUeXBlOiBQb2lUeXBlLFxyXG4gICAgcG9pOiBQT0kgfCBudWxsID0gbnVsbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5zZXRPYmplY3Qob2JqZWN0LCBwb2lUeXBlKTtcclxuICAgIGlmIChwb2kpIHtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5zZXRQb2kocG9pKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuZWxlbWVudElEID0gb2JqZWN0LmlkO1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQobWF0dGVydGFnSUQsIG9iamVjdCwgcG9pVHlwZSk7XHJcbiAgICAgIC8vIFRPRE86IGZpeCB0aGlzXHJcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTWF0dGVyVGFnUG9zSW5TZGtWaWV3ZXIoXHJcbiAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgIHBvaVR5cGUsXHJcbiAgICAgICAgcG9pXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBlcnJvciBpbiBzZXRPYmplY3RBbmRQb2lJblRhZzogJHtlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlTWF0dGVyVGFnUG9zSW5TZGtWaWV3ZXIoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2lUeXBlOiBQb2lUeXBlLFxyXG4gICAgcG9pOiBQT0kgfCBudWxsID0gbnVsbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgSW5kZXhUb1VwZGF0ZSA9IG9iamVjdC5wb2lzLml0ZW1zLmZpbmRJbmRleCgodSkgPT4gdS5pZCA9PT0gcG9pLmlkKTtcclxuICAgIG9iamVjdC5wb2lzLml0ZW1zW0luZGV4VG9VcGRhdGVdID0gcG9pO1xyXG4gICAgY29uc3Qge3gsIHksIHp9ID0gSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSk7XHJcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IHtcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICB4OiB4LFxyXG4gICAgICAgIHk6IHksXHJcbiAgICAgICAgejogeixcclxuICAgICAgfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIC8vIG1ha2UgdGhlIFRhZyBzdGljayBzdHJhaWdodCB1cCBhbmQgbWFrZSBpdCAwLjMwIG1ldGVycyAofjEgZm9vdCkgdGFsbFxyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMC4zLFxyXG4gICAgICAgIHo6IDAsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWdJRCwgbmV3UG9zaXRpb24pO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWdJRCwgbmV3UG9zaXRpb24pO1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3NcclxuICAgICAgLmdldChtYXR0ZXJ0YWdJRClcclxuICAgICAgLnNldFBvc2l0aW9uKG5ld1Bvc2l0aW9uLmFuY2hvclBvc2l0aW9uKTtcclxuXHJcbiAgICBmb3IgKGxldCB0YWdJZCBvZiB0aGlzLm1hdHRlcnRhZ0lEcykge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGFnID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRhZ0lkKTtcclxuICAgICAgaWYgKCFjdXJyZW50VGFnKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGN1cnJlbnRUYWcuZWxlbWVudElEID09PSBvYmplY3QuaWQgJiYgdGFnSWQgIT09IG1hdHRlcnRhZ0lEKSB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKHRhZ0lkKTtcclxuICAgICAgICB0aGlzLnNkay5UYWcucmVtb3ZlKHRhZ0lkKTtcclxuICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVtb3ZlKHRhZ0lkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBtYXR0ZXJUYWdJRCBhbmQgaXRzIHN3ZWVwIGZvciBhbiBvYmplY3QgSUQgKHRpY2tldCBJRCwgZXRjKVxyXG4gICAqIEBwYXJhbSBlbGVtZW50SUQgc3RyaW5nXHJcbiAgICogQHJldHVybnMge3RhZzogc3RyaW5nIHwgbnVsbCwgc3dlZXA6IHN0cmluZyB8IG51bGx9XHJcbiAgICovXHJcbiAgcHVibGljIGdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElEOiBzdHJpbmcpOiB7XHJcbiAgICB0YWc6IHN0cmluZyB8IG51bGw7XHJcbiAgICBzd2VlcDogc3RyaW5nIHwgbnVsbDtcclxuICB9IHtcclxuICAgIGxldCB0YWdJRCA9IG51bGw7XHJcbiAgICBsZXQgc3dlZXBJRCA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBbbWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGFdIG9mIHRoaXMuZGljdGlvbm5hcnlUYWdzKSB7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmVsZW1lbnRJRCA9PT0gZWxlbWVudElEKSB7XHJcbiAgICAgICAgdGFnSUQgPSBtYXR0ZXJ0YWdJRDtcclxuICAgICAgICBjb25zdCBzd2VlcCA9IG1hdHRlcnRhZ0RhdGEuZ2V0U3dlZXBJRCgpO1xyXG4gICAgICAgIGlmIChzd2VlcCAmJiB0aGlzLnN3ZWVwcyAmJiB0aGlzLnN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkpIHtcclxuICAgICAgICAgIHN3ZWVwSUQgPSBzd2VlcDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7dGFnOiB0YWdJRCwgc3dlZXA6IHN3ZWVwSUR9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBsYXRlc3QgdGFnIGNyZWF0ZWQgaW4gdGhlIHZpc2l0ICh3aGVuIGZvbGxvd2luZyB0aGUgY3Vyc29yIHRvIHBvc2l0aW9uKVxyXG4gICAqIEByZXR1cm5zIHN0cmluZyBtYXR0ZXJ0YWdJRFxyXG4gICAqL1xyXG4gIGdldExhc3RUYWcoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdHRlcnRhZ0lEcy5sZW5ndGggPT09IDBcclxuICAgICAgICA/IG51bGxcclxuICAgICAgICA6IHRoaXMubWF0dGVydGFnSURzW3RoaXMubWF0dGVydGFnSURzLmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBNYXR0ZXJ0YWdEYXRhIGZvciBNYXR0ZXJ0YWcgKHJlcGxhY2VzIGdldFRhZ0RhdGFGcm9tSWQpXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEXHJcbiAgICogQHJldHVybnMgTWF0dGVydGFnRGF0YVxyXG4gICAqL1xyXG4gIGdldE1hdHRlclRhZ0RhdGFGb3JNYXR0ZXJ0YWcobWF0dGVydGFnSUQ6IHN0cmluZyk6IE1hdHRlcnRhZ0RhdGEgfCBudWxsIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgcmV0cmlldmUgbWF0dGVydGFnRGF0YSBmb3IgdGFnJywgbWF0dGVydGFnSUQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gVmlld2VyIHJlbGF0ZWQgKHN3aXRjaCB2aWV3cywgZ28gdG8pIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2Zsb29ycGxhbigpIHtcclxuICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICBjb25zb2xlLmxvZygndmlld2VyIGlzIGluIHRyYW5zaXRpb24sIGNhbm5vdCBnbyBmbG9vcnBsYW4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oJ21vZGUuZmxvb3JwbGFuJyk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZmxvb3JwbGFuJywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpIHtcclxuICAgIHRoaXMuc2RrLk1vZGUubW92ZVRvKCdtb2RlLmluc2lkZScpO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uU2hvd0FsbEZsb29ycygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLkZsb29yLnNob3dBbGwoKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBzaG93IGFsbCBmbG9vcnMnLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2RvbGxob3VzZSgpIHtcclxuICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIm1vZGU6IFwiLCB0aGlzLmluVHJhbnNpdGlvbk1vZGUsIFwiIHN3ZWVwOiBcIiwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCk7XHJcbiAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGRvbGxob3VzZScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKCdtb2RlLmRvbGxob3VzZScpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBnbyB0byBkb2xsaG91c2UnLCBlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTIwMCk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9tZXN1cmUoKSB7XHJcbiAgICBjb25zdCBuZXdTdGF0ZSA9ICF0aGlzLmlzTWVhc3VyZU1vZGVPbjtcclxuICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy50b2dnbGVNb2RlKG5ld1N0YXRlKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYE1lYXN1cmVtZW50IG1vZGUgaXMgbm93ICR7bmV3U3RhdGUgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfWBcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfY2FuY2VsX21lc3VyZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTWVhc3VyZU1vZGVPbikge1xyXG4gICAgICB0aGlzLmFjdGlvbl90b29sYm94X21lc3VyZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2dvX3RvX2Zsb29yKFxyXG4gICAgZmxvb3JOYW1lOiBzdHJpbmcsXHJcbiAgICBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogbnVtYmVyID0gbnVsbFxyXG4gICkge1xyXG4gICAgaWYgKCF0aGlzLmZsb29ycykge1xyXG4gICAgICBjb25zb2xlLmxvZygnRmxvb3IgYXJlIG5vdCBsb2FkZWQgeWV0Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZmxvb3JzKTtcclxuICAgIC8vIGxvb2sgdXAgZm9yIHNlcXVlbmNlIG51bWJlciAodGhlIHNhZmVzdCBtZXRob2QpXHJcbiAgICBsZXQgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZChcclxuICAgICAgKGZsb29yKSA9PiBmbG9vci5zZXF1ZW5jZSA9PT0gbWF0dGVycG9ydEZsb29yU2VxdWVuY2VcclxuICAgICk7XHJcbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gJydcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTWF0dGVycG9ydClcclxuICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcclxuICAgICAgd2hpbGUgKHJldHJ5KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oXHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibW92ZWQgdG8gZmxvb3JJbmRleFwiLCBmbG9vckluZGV4KTtcclxuICAgICAgICAgIHJldHJ5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBGbG9vcicsIGVycm9yKTtcclxuICAgICAgICAgIGF3YWl0IHdhaXQoMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTm8gbWF0dGVycG9ydCBmbG9vciBmb3VuZCB0byBtb3ZlIHRvJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZ29fdG9fc3dlZXAoXHJcbiAgICBzd2VlcDogc3RyaW5nLFxyXG4gICAgcm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IG51bGxcclxuICApIHtcclxuICAgIGlmICh0aGlzLmZvcmJpZGRlblN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkpIHtcclxuICAgICAgY29uc29sZS5sb2coJ3VzZXIgaXMgbm90IGFsbG93ZWQgdG8gZ28gdG8gdGhpcyBzd2VlcCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImdvaW5nIHRvIHN3ZWVwXCIsIHN3ZWVwLCBcIndpdGggcm90YXRpb246XCIsIHJvdGF0aW9uKTtcclxuICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IGdvIHRvIHN3ZWVwLCBpbiB0cmFuc2l0aW9uJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKHN3ZWVwLCB7XHJcbiAgICAgICAgICB0cmFuc2l0aW9uOiAndHJhbnNpdGlvbi5pbnN0YW50JyxcclxuICAgICAgICAgIHRyYW5zaXRpb25UaW1lOiAxNTAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgdG8gc3dlZXAnLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJvdGF0aW9uKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHJvdGF0aW9uLCB7c3BlZWQ6IDEwMH0pOyAvLyBzcGVlZCBpcyBkZWdyZWVzIHBlciBzZWNvbmRcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50U3dlZXAoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBvc2VDYW1lcmEuc3dlZXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRDYW1lcmFQb3NpdGlvbigpOiB7XHJcbiAgICByb3RhdGlvbjogYW55O1xyXG4gICAgcG9zaXRpb246IGFueTtcclxuICAgIHN3ZWVwOiBhbnk7XHJcbiAgfSB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRJbnRlcmFjdGlvbk1vZGUoaW50ZXJhY3Rpb25Nb2RlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlID0gaW50ZXJhY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW50ZXJhY3Rpb25Nb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHZhcmlhYmxlcywgZGVsZXRlcyBhbGwgdGFncyAod2hlbiB2aWV3ZXIgaXMgcmVtb3ZlciBvciBtb2RlbCBjaGFuZ2VkPXJlbG9hZCBuZWVkZWQpXHJcbiAgICovXHJcbiAgYXN5bmMgY2xlYXJBbGwoKSB7XHJcbiAgICBjb25zb2xlLmxvZygncmVtb3Zpbmcgdmlld2VyJyk7XHJcbiAgICB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgIHRoaXMuZmxvb3JzID0gbnVsbDtcclxuICAgIHRoaXMuc3dlZXBzID0gbnVsbDtcclxuICAgIHRoaXMuc2RrID0gbnVsbDtcclxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lclBvaW50ZXIpO1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Td2VlcHMgPSBbXTtcclxuICAgIHRoaXMudGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuICAgIC8vIGNhbmNlbCBzdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLnBvaW50ZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ2NsaWNrJyxcclxuICAgICAgdGhpcy5wb2ludGVyTGVmdENsaWNrSGFuZGxlclxyXG4gICAgKTtcclxuICAgIHRoaXMucG9pbnRlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAnY29udGV4dG1lbnUnLFxyXG4gICAgICB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlclxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBUT0RPOiBvbmx5IEZvciBBZG1pbnNcclxuICAgIGlmICh0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAnYXV4Y2xpY2snLFxyXG4gICAgICAgIHRoaXMucG9pbnRlck1pZGRsZUNsaWNrSGFuZGxlclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogb25seSBmb3IgZGV2IVxyXG4gICAgaWYgKCEhdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiAmJlxyXG4gICAgICAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCdkZXYnKSAhPT0gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCdsb2NhbGhvc3QnKSAhPT0gLTEpKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Td2VlcHMgPSBbLi4uZm9yYmlkZGVuU3dlZXBzXTtcclxuICAgIGxldCByZW1vdmVkID0gMDtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBmb3JiaWRkZW5Td2VlcHMubWFwKGFzeW5jIChzd2VlcCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5kaXNhYmxlKHN3ZWVwKTtcclxuICAgICAgICAgIHJlbW92ZWQgKz0gMTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygncmVtb3ZlZCBzd2VlcHM6JywgcmVtb3ZlZCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gM0Qgb2JqZWN0cyAoU0RLIEJ1bmRsZSBvbmx5KSAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBhc3luYyBpbml0M0RPYmplY3RWaWV3ZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgdmFyIFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgdmFyIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcblxyXG4gICAgICAvLyBUT0RPIGNoYW5nZSB0aGlzIPCfpK5cclxuICAgICAgbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICAvL25vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTtcclxuICAgICAgLypub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7XHJcbiAgICAgIG5vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTsqL1xyXG4gICAgICBub2RlLnN0YXJ0KCk7XHJcblxyXG4gICAgICBjb25zdCBub2RlQ29udHJvbCA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgdGhpcy5vYmplY3RDb250cm9sID0gbm9kZUNvbnRyb2wuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgICBub2RlQ29udHJvbC5zdGFydCgpO1xyXG5cclxuICAgICAgLy90aGlzLmFkZDNET2JqZWN0KHt9LG51bGwpO1xyXG5cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQzRE9iamVjdChcclxuICAgIG9iajogSU9iamVjdDNELFxyXG4gICAgbW9kZT86ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZSdcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgLy8gVE9ETzogaW1wcm92bWVudCwgcmVncm91cCBhbGwgb2YgdGhlc2UgaW4gRHluYW1pY2FsIE9iamVjdHMgTGliXHJcbiAgICAgIC8vIFNlY3VyaXR5Q2FtZXJhXHJcbiAgICAgIC8vIE5lc3RUaGVybW9zdGF0XHJcbiAgICAgIC8vIFZpZGVvXHJcbiAgICAgIGxldCBpc0FuaW1hdGVkU2VjdXJpdHlDYW1lcmEgPSBmYWxzZTtcclxuICAgICAgbGV0IGlzTmVzdFRoZXJtb3N0YXQgPSBmYWxzZTtcclxuICAgICAgbGV0IGlzU21hcnRlcnBsYW5Qcm9tb3Rpb25hbFZpZGVvID0gZmFsc2U7XHJcbiAgICAgIGxldCBpc0F6aW11dGhhbENyb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogVE9ETzogcmVmYWN0byB3aXRoIGFuIGVudW0gb3Igc3dpdGNoL2Nhc2VcclxuICAgICAgICovXHJcbiAgICAgIGlmIChvYmoub2JqZWN0ID09PSBcInNlY3VyaXR5X2NhbWVyYVwiKSB7XHJcbiAgICAgICAgaXNBbmltYXRlZFNlY3VyaXR5Q2FtZXJhID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqLm9iamVjdCA9PT0gXCJuZXN0X3RoZXJtb3N0YXRcIikge1xyXG4gICAgICAgIGlzTmVzdFRoZXJtb3N0YXQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmoub2JqZWN0ID09PSAndmlkZW8nKSB7XHJcbiAgICAgICAgaXNTbWFydGVycGxhblByb21vdGlvbmFsVmlkZW8gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKG9iai5vYmplY3QgPT09ICdhemltdXRoJykge1xyXG4gICAgICAgIGlzQXppbXV0aGFsQ3Jvd24gPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtb2RlbE5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICAgIGxldCBjb21wb25lbnQgPSBudWxsO1xyXG4gICAgICBjb25zdCBpbml0aWFsID0ge1xyXG4gICAgICAgIHVybDogYC9hc3NldHMvM0RvYmplY3RzL29iamVjdHMvJHtvYmoub2JqZWN0fSR7XHJcbiAgICAgICAgICBvYmouZm9ybWF0LmluZGV4T2YoJy4nKSA9PT0gLTEgPyAnLicgKyBvYmouZm9ybWF0IDogb2JqLmZvcm1hdFxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIC8vIFRPRE8vIHN0b3JlIGxvY2FsUG9zaXRpb24gJiYgbG9jYWxSb3RhdGlvbiBpbiBCREQgdG9vIChpbiBvcmRlciB0byBoYXZlIHBlcnRmZWN0IGluaXRpYWwgcGxhY2VtZW50KVxyXG4gICAgICAgIGxvY2FsUm90YXRpb246IHtcInhcIjogMCwgXCJ5XCI6IDAsIFwielwiOiAwfSxcclxuICAgICAgICAvLyBUT0RPLyBzdG9yZSBsb2NhbFBvc2l0aW9uICYmIGxvY2FsUm90YXRpb24gaW4gQkREIHRvbyAoaW4gb3JkZXIgdG8gaGF2ZSBwZXJ0ZmVjdCBpbml0aWFsIHBsYWNlbWVudClcclxuICAgICAgICBsb2NhbFBvc2l0aW9uOiB7XCJ4XCI6IDAsIFwieVwiOiAwLCBcInpcIjogMH0sXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBjb2xsaWRlckVuYWJsZWQ6IHRydWVcclxuICAgICAgfTtcclxuXHJcblxyXG4gICAgICBzd2l0Y2ggKG9iai5mb3JtYXQpIHtcclxuICAgICAgICBjYXNlICcub2JqJzpcclxuICAgICAgICBjYXNlICdvYmonOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAub2JqTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZmJ4JzpcclxuICAgICAgICBjYXNlICdmYngnOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZmJ4TG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2x0Zic6XHJcbiAgICAgICAgY2FzZSAnZ2x0Zic6XHJcbiAgICAgICAgICBjb21wb25lbnQgPSBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5nbHRmTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2xiJzpcclxuICAgICAgICBjYXNlICdnbGInOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZ2x0ZkxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnLmRhZSc6XHJcbiAgICAgICAgY2FzZSAnZGFlJzpcclxuICAgICAgICAgIGNvbXBvbmVudCA9IG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLmRhZUxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRm9ybWF0IG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2NhY2hlIHN5c3RlbSAoaSdsbCB0cnkgdG8gbWFrZSBpdCB3b3JrIGxhdGVyIC4uLilcclxuICAgICAgLypsZXQgb2JqQ29udGVudHNKU09OID0gSlNPTi5zdHJpbmdpZnkobW9kZWxOb2RlKTtcclxuICAgICAgY29uc29sZS5sb2cobW9kZWxOb2RlKTtcclxuICAgICAgY29uc29sZS5sb2cob2JqQ29udGVudHNKU09OKTtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobW9kZWxOb2RlKSk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGB0ZXN0T2JqXyR7b2JqLm9iamVjdH1gLCBvYmpDb250ZW50c0pTT04pO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInN0b3JlZCA/IVwiKTtcclxuICAgICAgY29uc29sZS5sb2codHlwZW9mIG1vZGVsTm9kZSk7Ki9cclxuICAgICAgLy9sZXQgZGF0YVMgPSBzZXJpYWxpanNlLnNlcmlhbGl6ZShtb2RlbE5vZGUpO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKGRhdGFTKTtcclxuXHJcbiAgICAgIC8vIFVzZSAzID8hIEFtYmllbnQgbGlnaHRpbmdzXHJcbiAgICAgIGlmICh0aGlzLm5vTGlnaHRGb3JPYmplY3RzKSB7XHJcbiAgICAgICAgY29uc3QgbGlnaHRzTm9kZSA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgICBsaWdodHNOb2RlLmFkZENvbXBvbmVudCgnbXAuYW1iaWVudExpZ2h0Jywge1xyXG4gICAgICAgICAgaW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgY29sb3I6IHtyOiAxLjAsIGc6IDEuMCwgYjogMS4wfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm5vTGlnaHRGb3JPYmplY3RzID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5wb3NpdGlvbi5zZXQoXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLngsXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLnksXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLnpcclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5yb3RhdGlvbi5zZXQoXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLngsXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLnksXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLnpcclxuICAgICAgKTtcclxuICAgICAgbW9kZWxOb2RlLm9iajNELnNjYWxlLnNldChvYmouc2NhbGUueCwgb2JqLnNjYWxlLnksIG9iai5zY2FsZS56KTtcclxuICAgICAgaWYoaXNBemltdXRoYWxDcm93bilcclxuICAgICAge1xyXG4gICAgICAgIC8qaWYobW9kZWxOb2RlLm9iajNELnNjYWxlLnggPj0gMS4wKXtcclxuICAgICAgICAgIG1vZGVsTm9kZS5vYmozRC5zY2FsZS5zZXQob2JqLnNjYWxlLngvNTAwMCwgb2JqLnNjYWxlLnkvNTAwMCwgb2JqLnNjYWxlLnovNTAwMCk7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgdGhpcy5hemltdXRoYWxDcm93bj1tb2RlbE5vZGU7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXppbXV0YWxDcm93bigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBCeSBkZWZhdXQsIGR1cmluZyBjcmVhdGlvbiwgb2JqZWN0IGhhcyB0cmFuc2xhdGlvbiBnaXptb1xyXG4gICAgICAvLyA9PiBVc2VyIGhhcyB0byBjbGljayBvbiBsYXRlcmFsIHBhbmVsLCBhbmQgc2F2ZSBpdHMgcG9zaXRpb24gYWZ0ZXIgcGxheWluZyB3aXRoIGl0IVxyXG4gICAgICBpZiAobW9kZSAmJiAhaXNOZXN0VGhlcm1vc3RhdCkge1xyXG4gICAgICAgIHRoaXMuYXR0YWNoR2l6bW9Db250cm9sVG8zRE9iamVjdChcclxuICAgICAgICAgIG1vZGVsTm9kZSxcclxuICAgICAgICAgIHNjZW5lT2JqZWN0LFxyXG4gICAgICAgICAgbW9kZSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApLmNhdGNoKChlKSA9PiBjb25zb2xlLmxvZyhlKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RPYmplY3QzRCAmJiB0eXBlb2YgdGhpcy5sYXN0T2JqZWN0M0QuaWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgLy8gcHJvbXB0IFRocmVlSlMgVVVJRCB0byBtYXRjaCBvdXIgbGFzdCBnZW5lcmF0ZWQgb2JqZWN0IGlmIG5ldyAobm90IGZyb20gRGIpXHJcbiAgICAgICAgbW9kZWxOb2RlLm9iajNELnV1aWQgPSB0aGlzLmxhc3RPYmplY3QzRC5pZDtcclxuICAgICAgfSBlbHNlIGlmIChvYmouaWQpIHtcclxuICAgICAgICBtb2RlbE5vZGUub2JqM0QudXVpZCA9IG9iai5pZDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RPYmplY3QzRCA9IG1vZGVsTm9kZS5vYmozRDtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoaXMgaW4gbWVtb3J5IE1hcCBkaWN0aW9ubmFyeVxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwiQWRkaW5nIG9iamVjdDogXCIpO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKG1vZGVsTm9kZSk7XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBtb2RlbE5vZGUpO1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBzY2VuZU9iamVjdCk7XHJcblxyXG4gICAgICAvKnRoaXMuc2RrLkNhbWVyYS5wb3NlLnN1YnNjcmliZShcclxuICAgICAgICBmdW5jdGlvbiAocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW4gY2FsbGJhY2tcIilcclxuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5sYXN0Q2FtZXJhUG9zaXRpb24pXHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHBvc2UucG9zaXRpb24pXHJcbiAgICAgICAgICBpZigocG9zZS5wb3NpdGlvbi54ID09IHRoaXMubGFzdENhbWVyYVBvc2l0aW9uLnggJiYgcG9zZS5wb3NpdGlvbi55ID09IHRoaXMubGFzdENhbWVyYVBvc2l0aW9uLnkgJiYgcG9zZS5wb3NpdGlvbi56ID09IHRoaXMubGFzdENhbWVyYVBvc2l0aW9uLnopIHx8IHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKXtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInJldHVybmluZ1wiKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImNhbWVyYSBwb3M6XCIscG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICB0aGlzLmxhc3RDYW1lcmFQb3NpdGlvbiA9IHsuLi5wb3NlLnBvc2l0aW9ufTtcclxuICAgICAgICAgIGlmKHRoaXMubGFzdE9iamVjdDNEKXtcclxuICAgICAgICAgICAgdGhpcy5sYXN0T2JqZWN0M0QucG9zaXRpb24uc2V0KHBvc2UucG9zaXRpb24ueCsuNSxwb3NlLnBvc2l0aW9uLnkrLjUscG9zZS5wb3NpdGlvbi56Ky41KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LmJpbmQodGhpcykpOyovXHJcblxyXG4gICAgICBpZiAoaXNBbmltYXRlZFNlY3VyaXR5Q2FtZXJhKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGFuaW1hdG9yID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuc2VjdXJpdHlDYW1lcmEnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcIm5lYXJQbGFuZVwiOiAwLjEsXHJcbiAgICAgICAgICAgIFwiZmFyUGxhbmVcIjogMTAsXHJcbiAgICAgICAgICAgIFwiaG9yaXpvbnRhbEZPVlwiOiA1MixcclxuICAgICAgICAgICAgXCJhc3BlY3RcIjogMS43Nzc3Nzc3Nzc3Nzc3Nzc3LFxyXG4gICAgICAgICAgICBcImxvY2FsUG9zaXRpb25cIjoge1xyXG4gICAgICAgICAgICAgIFwieFwiOiAwLjMsXHJcbiAgICAgICAgICAgICAgXCJ5XCI6IDAuMTgsXHJcbiAgICAgICAgICAgICAgXCJ6XCI6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJsb2NhbFJvdGF0aW9uXCI6IHtcclxuICAgICAgICAgICAgICBcInhcIjogLTE1LFxyXG4gICAgICAgICAgICAgIFwieVwiOiAtOTAsXHJcbiAgICAgICAgICAgICAgXCJ6XCI6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2xvclwiOiA2NTI4MCxcclxuICAgICAgICAgICAgXCJwYW5QZXJpb2RcIjogNSxcclxuICAgICAgICAgICAgXCJwYW5BbmdsZVwiOiAtNDVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsT3V0cHV0ID0gc2NlbmVPYmplY3QuYWRkUGF0aCh7XHJcbiAgICAgICAgICBpZDogJ2FuaW1hdGVkLW1vZGVsJyxcclxuICAgICAgICAgIHR5cGU6IHRoaXMuc2RrLlNjZW5lLlBhdGhUeXBlLk9VVFBVVCxcclxuICAgICAgICAgIG5vZGU6IG1vZGVsTm9kZSxcclxuICAgICAgICAgIGNvbXBvbmVudDogYW5pbWF0b3IsXHJcbiAgICAgICAgICBwcm9wZXJ0eTogJ29iamVjdFJvb3QnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlDYW1lcmFBbmltYXRvciA9IGFuaW1hdG9yO1xyXG4gICAgICAgIGlmICghb2JqLnZpZXdGcnVzdHVtKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgYW5pbWF0b3IudG9nZ2xlVmlld0ZydXN0dW0oKTtcclxuICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzTmVzdFRoZXJtb3N0YXQpIHtcclxuICAgICAgICAvLyBUT0RPOiB1c2UgYmluZFBhdGggaW5zdGVhZCB1c2luZyBNUCBzZGsgY2xhc3NlcyAoc2VlIFNlY3VyaXR5IENhbWVyYSBleGFtcGxlKVxyXG4gICAgICAgIC8vIGZvciBUViB1c2VzIENhbnZhc0ltYWdlIGJlbG93IVxyXG4gICAgICAgIC8vIGNvbnN0IGNpID0gbmV3IENhbnZhc0ltYWdlKCk7XHJcbiAgICAgICAgLy8gY2kub25Jbml0KCk7XHJcbiAgICAgICAgY29uc3QgY3YgPSBuZXcgQ2FudmFzUmVuZGVyZXIoKTtcclxuICAgICAgICBjdi5vbkluaXQoKTtcclxuICAgICAgICBjb25zdCBwbGFuZSA9IG5ldyBQbGFuZVJlbmRlcmVyKCk7XHJcbiAgICAgICAgcGxhbmUub3V0cHV0cyA9IHtcclxuICAgICAgICAgIG9iamVjdFJvb3Q6IG5ldyBPYmplY3QzRCgpLFxyXG4gICAgICAgICAgY29sbGlkZXI6IG5ldyBPYmplY3QzRCgpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpbnB1dFRleHR1cmUgPSBjdi5vdXRwdXRzLnRleHR1cmU7XHJcbiAgICAgICAgcGxhbmUuc2V0Um9vdFNjZW5lKHRoaXMudGhyZWVKU1NjZW5lKTtcclxuICAgICAgICBwbGFuZS5vbkluaXQobW9kZWxOb2RlLCBpbnB1dFRleHR1cmUpO1xyXG4gICAgICAgIGNvbnN0IHNjID0gbmV3IE5lc3RUaGVybW9zdGF0KCk7XHJcbiAgICAgICAgc2Muc2V0Q29tcG9uZW50KGNvbXBvbmVudCwgcGxhbmUsIGN2KTtcclxuICAgICAgICBzYy5zZXRSb290U2NlbmUodGhpcy50aHJlZUpTU2NlbmUpO1xyXG4gICAgICAgIHNjLm9uSW5pdChtb2RlbE5vZGUsIHBsYW5lLCBpbnB1dFRleHR1cmUpO1xyXG4gICAgICAgIGN2LnNldENhbnZhc05lc3RUaGVybW9zdGF0UGFpbnRlcihzYyk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBzYy5pbnB1dHMubG9hZGluZ1N0YXRlID0gXCJMb2FkZWRcIjtcclxuICAgICAgICAgIHNjLm9uSW5wdXRzVXBkYXRlZCgpO1xyXG4gICAgICAgIH0sIDUwMDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTbWFydGVycGxhblByb21vdGlvbmFsVmlkZW8pIHtcclxuICAgICAgICAvLyBUT0RPOiB1c2UgYmluZFBhdGggaW5zdGVhZCB1c2luZyBNUCBzZGsgY2xhc3NlcyAoc2VlIFNlY3VyaXR5IENhbWVyYSBleGFtcGxlKVxyXG4gICAgICAgIGNvbnN0IHNjID0gbmV3IFR2UGxheWVyKCk7XHJcbiAgICAgICAgc2Muc2V0Q29tcG9uZW50KGNvbXBvbmVudCk7XHJcbiAgICAgICAgc2Mub25Jbml0KG1vZGVsTm9kZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBzYy5pbnB1dHMubG9hZGluZ1N0YXRlID0gXCJMb2FkZWRcIjtcclxuICAgICAgICAgIHNjLm9uSW5wdXRzVXBkYXRlZCgpO1xyXG4gICAgICAgIH0sIDUwMDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzY2VuZU9iamVjdC5zdGFydCgpO1xyXG4gICAgICByZXNvbHZlKHRoaXMubGFzdE9iamVjdDNEKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlT2JqZWN0VmlzaWJpbGl0eShvYmplY3RJZDogYW55KXtcclxuICAgIGxldCBvYmogPSB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldChvYmplY3RJZCk7XHJcbiAgICBvYmoub2JqM0QudmlzaWJsZSA9ICFvYmoub2JqM0QudmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGlzT2JqZWN0VmlzaWJsZShvYmplY3RJZDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQob2JqZWN0SWQpO1xyXG4gICAgcmV0dXJuIG9iai5vYmozRC52aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcG9pbnRDYW1lcmFUbzNET2JqZWN0KG9iamVjdElkOiBhbnkpe1xyXG4gICAgbGV0IG9iaiA9IHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0QuZ2V0KG9iamVjdElkKTtcclxuXHJcbiAgICAvL1dlIGNyZWF0ZSBhIHRlbXBvcmFyeSBUYWdcclxuICAgIGNvbnN0IHBvaU9iamVjdCA9IHtcclxuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkob2JqLm9iajNELnBvc2l0aW9uKSxcclxuICAgICAgdHlwZTogUG9pVHlwZS5PQkpFQ1QzRCxcclxuICAgICAgZWxlbWVudElEOiBvYmplY3RJZCwgLy90b2RvOiBiZSBjYXJlZnVsIHdpdGggdGhpc1xyXG4gICAgfSBhcyBQT0k7XHJcbiAgICBjb25zdCBvYmplY3REYiA9IHtpZDogb2JqZWN0SWR9IGFzIERiT2JqZWN0VHlwZTtcclxuXHJcbiAgICB0cnl7XHJcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTWF0dGVydGFnRnJvbVBPSShQb2lUeXBlLk9CSkVDVDNELCBvYmplY3REYiwgcG9pT2JqZWN0KTtcclxuICAgIH1jYXRjaChlcnI6IGFueSl7fVxyXG5cclxuICAgIC8vTm90IHJlYWxseSBuZWNlc3NhcnkgYW55bW9yZSBzaW5jZSB0aGUgdGFnIHdpbGwgZGlzYXBwZWFyIHF1aWNrXHJcbiAgICAvL3RoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eShtYXR0ZXJ0YWdJRCwgMC4wKTsvL29wYWNpdHkpO1xyXG4gICAgLy90aGlzLnNkay5UYWcuYWxsb3dBY3Rpb24obWF0dGVydGFnSUQsIHt9KTsgLy9kaXNhYmxlcyBldmVyeSBhY3Rpb25cclxuXHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKG9iamVjdElkKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmdvVG9UYWcocmVzdWx0LnRhZyk7XHJcbiAgICB0aGlzLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICB9XHJcblxyXG4gIGdldFNjZW5lTm9kZUZyb21PYmplY3QzRElkKHV1aWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNELmdldCh1dWlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRpc3BsYXlBemltdXRhbENyb3duKCl7XHJcbiAgICBpZih0aGlzLmF6aW11dGhhbENyb3duKXtcclxuICAgICAgdGhpcy5hemltdXRoYWxDcm93bi5vYmozRC5wb3NpdGlvbi5zZXQodGhpcy5wb3NlQ2FtZXJhLnBvc2l0aW9uLngsdGhpcy5wb3NlQ2FtZXJhLnBvc2l0aW9uLnksdGhpcy5wb3NlQ2FtZXJhLnBvc2l0aW9uLnopXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhdHRhY2hHaXptb0NvbnRyb2xUbzNET2JqZWN0KFxyXG4gICAgbW9kZWxOb2RlOiBhbnksXHJcbiAgICBzY2VuZU9iamVjdDogYW55LFxyXG4gICAgbW9kZTogJ3RyYW5zbGF0ZScgfCAncm90YXRlJyB8ICdzY2FsZScsXHJcbiAgICB2aXNpYmxlOiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIENyZWF0ZSBhIHNjZW5lIG5vZGUgd2l0aCBhIHRyYW5zZm9ybSBjb250cm9sIGNvbXBvbmVudC5cclxuICAgIGxldCBub2RlID0gbnVsbDtcclxuICAgIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgY29uc3QgW3NjZW5lT2JqZWN0XSA9IGF3YWl0IHRoaXMuc2RrLlNjZW5lLmNyZWF0ZU9iamVjdHMoMSk7XHJcbiAgICAgIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbXlDb250cm9sID0gbm9kZS5hZGRDb21wb25lbnQoJ21wLnRyYW5zZm9ybUNvbnRyb2xzJyk7XHJcbiAgICBub2RlLnN0YXJ0KCk7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gTWFrZSB0aGUgdHJhbnNmb3JtIGNvbnRyb2wgdmlzaWJsZSBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtYW5pcHVsYXRlIHRoZSBjb250cm9sIHNlbGVjdGlvbi5cclxuICAgIG15Q29udHJvbC50cmFuc2Zvcm1Db250cm9scy52aXNpYmxlID0gdmlzaWJsZTtcclxuICAgIC8vXHJcbiAgICAvLyAvLyBBdHRhY2ggdGhlIG1vZGVsIHRvIHRoZSB0cmFuc2Zvcm0gY29udHJvbFxyXG4gICAgbXlDb250cm9sLmlucHV0cy5zZWxlY3Rpb24gPSBtb2RlbE5vZGU7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gc2V0ICd0cmFuc2xhdGUnIG1vZGUgdG8gcG9zaXRpb24gdGhlIHNlbGVjdGlvbi5cclxuICAgIG15Q29udHJvbC5pbnB1dHMubW9kZSA9IG1vZGU7XHJcbiAgICBtb2RlbE5vZGUub2JqM0QuY29udHJvbHMgPSBteUNvbnRyb2w7IC8vIHN0b3JlIGdpem1vQ3RybCBpbnNpZGUgb2JqZWN0XHJcblxyXG4gICAgaWYgKCF0aGlzLmxhc3RPYmplY3QzRCB8fCAhdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBtb2RlbE5vZGUub2JqM0QudXVpZCA9IHRoaXMubGFzdE9iamVjdDNELnV1aWQgfHwgdGhpcy5sYXN0T2JqZWN0M0QuaWQ7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgaWQgb2JqIGluIFNjZW5lIHdhcyBub3QgYXNzaWduZWQgdG8gaWQgZnJvbSBEQiBzaW5jZWApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdE9iamVjdDNEID0gbW9kZWxOb2RlLm9iajNEO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2RlbE5vZGU7XHJcbiAgfVxyXG5cclxuICByZW1vdmVHaXptb0Zyb21MYXN0T2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMudHJhbnNmb3JtQ29udHJvbHMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMudHJhbnNmb3JtQ29udHJvbHMuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmlld0ZydXN0dW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlY3VyaXR5Q2FtZXJhQW5pbWF0b3IudG9nZ2xlVmlld0ZydXN0dW0oKTtcclxuICB9XHJcblxyXG4gLypwdWJsaWMgc2V0M0RPYmplY3RNb2RlKG1vZGVsTm9kZTogYW55LCBtb2RlPzogc3RyaW5nKSB7XHJcbiAgIGlmIChtb2RlKSB7XHJcbiAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy5zZWxlY3Rpb24gPSBtb2RlbE5vZGU7XHJcbiAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy52aXNpYmxlID0gdHJ1ZTtcclxuICAgICB0aGlzLm9iamVjdENvbnRyb2wuaW5wdXRzLm1vZGUgPSBtb2RlO1xyXG5cclxuICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICBjb25zb2xlLmxvZyhtb2RlbE5vZGUpO1xyXG4gICAgIH0sIDUwMDApO1xyXG5cclxuICAgfSBlbHNlIHtcclxuICAgICB0aGlzLm9iamVjdENvbnRyb2wuaW5wdXRzLnZpc2libGUgPSB0cnVlO1xyXG4gICB9XHJcbiB9Ki9cclxufVxyXG4iXX0=