@pmcretail/mapper-library 0.0.41 → 0.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2022/lib/RJ-mapper.class.mjs +1 -1
- package/esm2022/lib/TransactionDocumentBuilder.mjs +1 -1
- package/esm2022/lib/WebReturn-mapper.class.mjs +1 -1
- package/esm2022/lib/WebReturnSalesforceMapper.class.mjs +1 -1
- package/esm2022/lib/basket.service.mjs +1 -1
- package/esm2022/lib/mapper-library.component.mjs +9 -9
- package/esm2022/lib/mapper-library.model.mjs +1 -1
- package/esm2022/lib/mapper-library.module.mjs +1 -1
- package/esm2022/lib/number-util.service.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/pmcretail-mapper-library.mjs +8 -8
- package/fesm2022/pmcretail-mapper-library.mjs.map +1 -1
- package/lib/WebReturnSalesforceMapper.class.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1237,4 +1237,4 @@ export class TransactionDocumentBuilder {
|
|
|
1237
1237
|
return this;
|
|
1238
1238
|
}
|
|
1239
1239
|
}
|
|
1240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXBwZXItbGlicmFyeS9zcmMvbGliL1RyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBc0QsZ0JBQWdCLEVBQWlHLE1BQU0sd0JBQXdCLENBQUM7QUFDN00sT0FBTyxFQUFFLGdCQUFnQixFQUErRCxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0sT0FBTywwQkFBMEI7SUFLckMsWUFDRSxjQUFvQyxFQUM1QixZQUEyQixFQUMzQixhQUFtQztRQURuQyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFFM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN2RSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxjQUFjLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLEdBQUc7Z0JBQ3pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixvQkFBb0IsRUFBRSxFQUFFO2dCQUN4QixjQUFjLEVBQUUsRUFBRTtnQkFDbEIs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LENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgQmFza2V0U3VtbWFyeSwgQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlscywgQ3VzdG9tZXIsIERFTElWRVJZX01FVEhPRFMsIEl0ZW1EaXNjb3VudHMsIFRheEJyZWFrZG93biwgVGF4TGluZSwgVEJhc2tldCwgVG90YWxUYXhTdW1tYXJ5LCBUUHJvZHVjdCwgVHJhbnNhY3Rpb25Eb2N1bWVudCB9IGZyb20gXCIuL21hcHBlci1saWJyYXJ5Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFRSQU5TQUNUSU9OX1RZUEUsIEJhc2tldCwgTGluZURpc2NvdW50LCBMaW5lUHJvbW90aW9ucywgUHJvZHVjdCwgVXNlck92ZXJyaWRlIH0gZnJvbSBcIi4vbWFwcGVyLWxpYnJhcnkubW9kZWxcIjtcclxuaW1wb3J0IHsgQmFza2V0U2VydmljZSB9IGZyb20gXCIuL2Jhc2tldC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE51bWJlclV0aWxTZXJ2aWNlIH0gZnJvbSBcIi4vbnVtYmVyLXV0aWwuc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zYWN0aW9uIGRvY3VtZW50IGJ1aWxkZXJcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgcHJpdmF0ZSB0cmFuc2FjdGlvbkRvY3VtZW50OiBUcmFuc2FjdGlvbkRvY3VtZW50O1xyXG4gIHByaXZhdGUgbnVtYmVyVXRpbFNlcnZpY2U6IE51bWJlclV0aWxTZXJ2aWNlO1xyXG4gIHByaXZhdGUgc3RvcmVJbmZvIDogYW55O1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgdHJhbnNhY3Rpb25Eb2M/OiBUcmFuc2FjdGlvbkRvY3VtZW50LFxyXG4gICAgcHJpdmF0ZSBjdXJyZW5jeVBpcGU/OiBDdXJyZW5jeVBpcGUsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U/OiBCYXNrZXRTZXJ2aWNlIHwgYW55LFxyXG4gICkge1xyXG4gICAgdGhpcy5udW1iZXJVdGlsU2VydmljZSA9IG5ldyBOdW1iZXJVdGlsU2VydmljZShjdXJyZW5jeVBpcGUpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlID0gbmV3IEJhc2tldFNlcnZpY2UodGhpcy5udW1iZXJVdGlsU2VydmljZSk7XHJcbiAgICB0aGlzLnN0b3JlSW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0b3JlSW5mbycpIHx8ICd7fScpO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uRG9jKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCA9IHRyYW5zYWN0aW9uRG9jO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0ge1xyXG4gICAgICAgIHRyYW5zYWN0aW9uSWQ6IFwiXCIsXHJcbiAgICAgICAgb2ZmbGluZVRyYW5zYWN0aW9uSWQ6IFwiXCIsXHJcbiAgICAgICAgdHJhbnNhY3Rpb25SZWY6IFwiXCIsXHJcbiAgICAgICAgZGF0ZVRpbWU6IFwiXCIsXHJcbiAgICAgICAgb3JnQ29kZTogXCJcIixcclxuICAgICAgICBzdG9yZUlkOiBcIlwiLFxyXG4gICAgICAgIHN0b3JlTm9kZUlkOiBcIlwiLFxyXG4gICAgICAgIHN0b3JlTm9kZVN0cnVjdHVyZTogXCJcIixcclxuICAgICAgICBkZXZpY2VJZDogXCJcIixcclxuICAgICAgICB0ZXJtaW5hbElkOiBcIlwiLFxyXG4gICAgICAgIHVzZXJJZDogXCJcIixcclxuICAgICAgICBpbml0aWF0aW5nTW9kdWxlIDogXCJlQmFza2V0XCIsXHJcbiAgICAgICAgZXhwb3J0OiBmYWxzZSxcclxuICAgICAgICBiYXNrZXQ6IHt9IGFzIFRCYXNrZXQsXHJcbiAgICAgICAgYmFza2V0U3VtbWFyeToge30gYXMgQmFza2V0U3VtbWFyeSxcclxuICAgICAgICBiYXNlQ3VycmVuY3k6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogXCJcIixcclxuICAgICAgICBvcGVyYXRpb25TdGF0dXM6IFwiXCIsXHJcbiAgICAgICAgY3JlYXRlZEF0OiBcIlwiLFxyXG4gICAgICAgIHVwZGF0ZWRBdDogXCJcIixcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBjdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzOiB7fSBhcyBDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLFxyXG4gICAgICAgIHNhbGVUb3RhbDogMCxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zYWN0aW9ucyByZWZcclxuICAgKiBAcmV0dXJucyByZWZcclxuICAgKi9cclxuICB0cmFuc2FjdGlvblJlZigpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICBjb25zdCBzdG9yZURldGFpbHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdG9yZUluZm8nKSB8fCAne30nKTtcclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgcmFuZG9tID0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKVxyXG4gICAgICAudG9TdHJpbmcoMTYpXHJcbiAgICAgIC5zdWJzdHJpbmcoMSk7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHJhbnNhY3Rpb25SZWYgPVxyXG4gICAgICBzdG9yZURldGFpbHMub3JnQ29kZSArIHN0b3JlRGV0YWlscy5zdG9yZUlkICsgZGF0ZS50b0lTT1N0cmluZygpICsgcmFuZG9tO1xyXG4gICAgY29uc29sZS5sb2coXCJlYmFza2V0OiB0cmFuc2FjdGlvbiByZWYgY3JlYXRlZFwiLCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHJhbnNhY3Rpb25SZWYpXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zYWN0aW9ucyBpZFxyXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbklEXHJcbiAgICogQHJldHVybnMgaWRcclxuICAgKi9cclxuICB0cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSUQ6IHN0cmluZywgaXNPbmxpbmU6IGJvb2xlYW4gPSB0cnVlKTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgaWYgKGlzT25saW5lKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JRDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhbnNhY3Rpb25zIGlkXHJcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uSURcclxuICAgKiBAcmV0dXJucyBpZFxyXG4gICAqL1xyXG4gIG9mZmxpbmVUcmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSUQ6IHN0cmluZywgaXNPbmxpbmU6IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIGlmICghaXNPbmxpbmUpIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Lm9mZmxpbmVUcmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JRDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBzdG9yZU5vZGUgSWRcclxuICAqIEBwYXJhbSBzdG9yZU5vZGVJZFxyXG4gICogQHJldHVybnMgaWRcclxuICAqL1xyXG4gIHN0b3JlTm9kZUlkKHN0b3JlTm9kZUlkOiBzdHJpbmcpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVOb2RlSWQgPSBzdG9yZU5vZGVJZDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiogc3RvcmVOb2RlIHN0cnVjdHVyZVxyXG4qIEBwYXJhbSBzdG9yZU5vZGVTdHJ1Y3R1cmVcclxuKiBAcmV0dXJucyBpZFxyXG4qL1xyXG4gIHN0b3JlTm9kZVN0cnVjdHVyZShzdG9yZU5vZGVTdHJ1Y3R1cmU6IHN0cmluZyk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZU5vZGVTdHJ1Y3R1cmUgPSBzdG9yZU5vZGVTdHJ1Y3R1cmU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9yZ3MgY29kZVxyXG4gICAqIEBwYXJhbSBvcmdDb2RlXHJcbiAgICogQHJldHVybnMgY29kZVxyXG4gICAqL1xyXG4gIG9yZ0NvZGUob3JnQ29kZTogYW55KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Lm9yZ0NvZGUgPSBvcmdDb2RlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyBpZFxyXG4gICAqIEBwYXJhbSBzdG9yZUlkXHJcbiAgICogQHJldHVybnMgaWRcclxuICAgKi9cclxuICBzdG9yZUlkKHN0b3JlSWQ6IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkID0gc3RvcmVJZDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEYXRlcyB0aW1lXHJcbiAgICogQHJldHVybnMgdGltZVxyXG4gICAqL1xyXG4gIGRhdGVUaW1lKCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmRhdGVUaW1lID0gZGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERldmljZXMgaWRcclxuICAgKiBAcGFyYW0gZGV2aWNlSWRcclxuICAgKiBAcmV0dXJucyBpZFxyXG4gICAqL1xyXG4gIGRldmljZUlkKGRldmljZUlkOiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuZGV2aWNlSWQgPSBkZXZpY2VJZDtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgICogdGVybWluYWwgaWRcclxuICAgICAqIEBwYXJhbSB0ZXJtaW5hbElkXHJcbiAgICAgKiBAcmV0dXJucyBpZFxyXG4gICAgICovXHJcbiAgdGVybWluYWxJZCh0ZXJtaW5hbElkOiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudGVybWluYWxJZCA9IHRlcm1pbmFsSWQ7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgICogc2FsZUV4cG9ydFxyXG4gICAgKiBAcGFyYW0gc2FsZUV4cG9ydFxyXG4gICAgKiBAcmV0dXJucyBpZFxyXG4gICAgKi9cclxuICBleHBvcnQoc2FsZUV4cG9ydDogYW55KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmV4cG9ydCA9IHNhbGVFeHBvcnQ7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyogIGN1c3RvbWVyKCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXN0b21lciA9IHVzZXI7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9ICovXHJcbiAgLyoqXHJcbiAgICogQmFza2V0cyB0cmFuc2FjdGlvbiBkb2N1bWVudCBidWlsZGVyXHJcbiAgICogQHBhcmFtIGJhc2tldERldGFpbHNcclxuICAgKiBAcmV0dXJucyBiYXNrZXRcclxuICAgKi9cclxuICBiYXNrZXQoYmFza2V0RGV0YWlsczogQmFza2V0KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgY29uc29sZS5sb2coXCJlYmFza2V0OiBiYXNrZXQgZGV0YWlscyB1cGRhdGUgaW4gdHJhbnNhY3Rpb24gZG9jdW1lbnRcIiwgSlNPTi5zdHJpbmdpZnkoYmFza2V0RGV0YWlscykpO1xyXG5cclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdWJzaWRpYXJ5SWQgPSBiYXNrZXREZXRhaWxzLnN1YnNpZGlhcnlJZCB8fCAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1YnNpZGlhcnlJZCcpIHx8ICcnKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMgPSBbXSBhcyBUUHJvZHVjdFtdO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQgPSBbXTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbiA9IFtdO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9IFtdO1xyXG4gICAgYmFza2V0RGV0YWlscy5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0OiBhbnksIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHAgPSB7fSBhcyBUUHJvZHVjdDtcclxuICAgICAgcC5pdGVtRGlzY291bnRzID0ge30gYXMgSXRlbURpc2NvdW50cztcclxuICAgICAgcC5TS1UgPSBwcm9kdWN0LlNLVTtcclxuICAgICAgcC5leGNsdWRlUHJvbW90aW9uID0gcHJvZHVjdC5leGNsdWRlUHJvbW90aW9uO1xyXG4gICAgICBwLmJhckNvZGUgPSBwcm9kdWN0LmJhcmNvZGU7XHJcbiAgICAgIHAuYmFyY29kZXMgPSBwcm9kdWN0LmJhcmNvZGVzO1xyXG4gICAgICBwLmRlc2NyaXB0aW9uID0gcHJvZHVjdC5kZXNjcmlwdGlvbjtcclxuICAgICAgcC5pdGVtTGluZUlkID0gcHJvZHVjdC5pdGVtTGluZUlkID8gcHJvZHVjdC5pdGVtTGluZUlkLnRvU3RyaW5nKCkgOiBcIlwiICsgKGluZGV4ICsgMSk7XHJcbiAgICAgIHAucHJpY2UgPSBwcm9kdWN0LnNlbGVjdGVkUHJpY2U7XHJcbiAgICAgIHAucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICBwLnRvdGFsTGluZVByaWNlID0gcHJvZHVjdC5xdWFudGl0eSAqIHByb2R1Y3Quc2VsZWN0ZWRQcmljZTtcclxuICAgICAgcC5pbWFnZVVybHMgPSBwcm9kdWN0LmltYWdlVXJscztcclxuICAgICAgcC5zZWxlY3RlZFJSUFByaWNlID0gcHJvZHVjdC5zZWxlY3RlZFJSUFByaWNlO1xyXG5cclxuICAgICAgLy9pbnZlbnRvcnkgZmllbGRzXHJcbiAgICAgIFxyXG4gICAgICBwLmZ1bGxmaWxtZW50SWQgPSBwcm9kdWN0LmZ1bGxmaWxtZW50SWQ/IHByb2R1Y3QuZnVsbGZpbG1lbnRJZDogdGhpcy5zdG9yZUluZm8uc3RvcmVJZDtcclxuXHJcbiAgICAgIHAuZnVsbGZpbG1lbnRMb2NhdGlvbk5hbWUgPSBwcm9kdWN0LmZ1bGxmaWxtZW50TG9jYXRpb25OYW1lO1xyXG4gICAgICBwLmRlbGl2ZXJ5R3JvdXAgPSBwcm9kdWN0LmRlbGl2ZXJ5R3JvdXA7XHJcbiAgICAgIHAubGVhZFRpbWUgPSBwcm9kdWN0LmxlYWRUaW1lO1xyXG4gICAgICBwLmRlbGl2ZXJ5TWV0aG9kID0gcHJvZHVjdC5kZWxpdmVyeU1ldGhvZDtcclxuXHJcbiAgICAgIHAuZ2lmdENhcmQgPSBwcm9kdWN0LmdpZnRDYXJkO1xyXG4gICAgICBwLmdpZnRDYXJkRXhwaXJ5RGF0ZSA9IHByb2R1Y3QuZ2lmdENhcmRFeHBpcnlEYXRlO1xyXG4gICAgICBwLmdpZnRDYXJkTnVtYmVySXNzdWVkID0gcHJvZHVjdC5naWZ0Q2FyZE51bWJlcklzc3VlZDtcclxuICAgICAgcC5naWZ0Q2FyZFJlY2lwaWVudEVtYWlsID0gcHJvZHVjdC5naWZ0Q2FyZFJlY2lwaWVudEVtYWlsO1xyXG4gICAgICBwLmdpZnRDYXJkUmVjaXBpZW50TmFtZSA9IHByb2R1Y3QuZ2lmdENhcmRSZWNpcGllbnROYW1lO1xyXG5cclxuICAgICAgaWYgKHByb2R1Y3QucmVmdW5kZWRRdWFudGl0eSA+IDApIHtcclxuICAgICAgICBwLnJlZnVuZGVkUXVhbnRpdHkgPSBwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHk7XHJcbiAgICAgICAgcC5yZWZ1bmRlZFByb21vdGlvbmFsUXVhbnRpdHkgPSBwcm9kdWN0LnJlZnVuZFByb21vdGlvbmFsUXVhbnRpdHk7XHJcbiAgICAgICAgcC5yZWZ1bmRlZCA9IHByb2R1Y3QucmVmdW5kZWQ7XHJcbiAgICAgICAgcC5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uID0gcHJvZHVjdC5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uO1xyXG4gICAgICAgIHAucmVmdW5kZWRSZWFzb24gPSBwcm9kdWN0LnJlZnVuZGVkUmVhc29uO1xyXG4gICAgICAgIGlmICghcC5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICBwLnJlZnVuZGVkUmVhc29uRGVzY3JpcHRpb24gPSBwLnJlZnVuZGVkUmVhc29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwLnJlZnVuZGVkVG90YWwgPSBwcm9kdWN0LnJlZnVuZGVkVG90YWw7XHJcbiAgICAgICAgcC5pc0xhc3RFeGNoYW5nZWQgPSBwcm9kdWN0LmlzTGFzdEV4Y2hhbmdlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByb2R1Y3QuZXhjaGFuZ2UpIHtcclxuICAgICAgICBwLmV4Y2hhbmdlID0gcHJvZHVjdC5leGNoYW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZHVjdC5saW5lRGlzY291bnQpIHtcclxuICAgICAgICBwLmxpbmVEaXNjb3VudCA9IHByb2R1Y3QubGluZURpc2NvdW50O1xyXG4gICAgICB9XHJcbiAgICAgIHAuaXRlbURpc2NvdW50cyA9IHByb2R1Y3QuaXRlbURpc2NvdW50cyBhcyBJdGVtRGlzY291bnRzO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLnB1c2gocCk7XHJcbiAgICAgIHRoaXMubGluZURpc2NvdW50KGJhc2tldERldGFpbHMpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmluZm8oXCJlYmFza2V0OiB0cmFuc2FjdGlvbmRvY3VtZW50IGJhc2tldCBkZXRhaWxzIHVwZGF0ZWRcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldCkpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAgKiBjdXJyZW50IHRyYW5zYWN0aW9uIERldGFpbHMgVG90YWwoTmV3IFByb2R1Y3RzKVxyXG4gICAgICogQHJldHVybnMgY3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1xyXG4gICAgICovXHJcblxyXG4gIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMoYmFza2V0OiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICBjb25zb2xlLmxvZyhcImViYXNrZXQ6IGN1cnJlbnQgdHJhbnNhY3Rpb24gZGV0YWlscyBmb3IgZXhjaGFuZ2VzXCIsIGJhc2tldCk7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cyA9IFtdIGFzIFByb2R1Y3RbXTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmxpbmVQcm9tb3Rpb24gPSBbXSBhcyBMaW5lUHJvbW90aW9uc1tdO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMubGluZURpc2NvdW50ID0gW10gYXMgTGluZURpc2NvdW50W107XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50ID0gW107XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cyA9IGJhc2tldC5wcm9kdWN0cztcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMucHJvZHVjdHMuZmlsdGVyKFxyXG4gICAgICAoICAgICAgcHJvajogeyByZWZ1bmRlZFF1YW50aXR5OiBudW1iZXI7IH0pID0+IHByb2oucmVmdW5kZWRRdWFudGl0eSAhPSAwXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3Q6IHsgcmVmdW5kZWRRdWFudGl0eTogYW55OyBxdWFudGl0eTogYW55OyB0b3RhbExpbmVQcmljZTogbnVtYmVyOyByZWZ1bmRlZFRvdGFsOiBudW1iZXI7IHRvdGFsOiBhbnk7IHJlZnVuZGVkOiBib29sZWFuOyBsaW5lUHJvbW90aW9uczogYW55OyBsaW5lRGlzY291bnQ6IGFueTsgfSkgPT4ge1xyXG4gICAgICBpZiAocHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5KSB7XHJcbiAgICAgICAgcHJvZHVjdC5xdWFudGl0eSA9IHByb2R1Y3QucmVmdW5kZWRRdWFudGl0eTtcclxuICAgICAgICAvLyB1cGRhdGluZyB0b3RhbCBsaW5lIHByaWNlIHdpdGggYWN0dWFsIHByaWNlIHRvIGJlIHJlZnVuZGVkIGluY2x1ZGluZyB0aGUgcmVmdW5kaW5nIHF0eVxyXG4gICAgICAgIHByb2R1Y3QudG90YWxMaW5lUHJpY2UgPSBNYXRoLmFicyhwcm9kdWN0LnJlZnVuZGVkVG90YWwpO1xyXG4gICAgICAgIHByb2R1Y3QudG90YWwgPSBwcm9kdWN0LnRvdGFsTGluZVByaWNlO1xyXG4gICAgICAgIGlmIChwcm9kdWN0LnF1YW50aXR5ID09PSBwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkpIHtcclxuICAgICAgICAgIHByb2R1Y3QucmVmdW5kZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvL1VwZGF0aW5nIGxpbmUgcHJvbW90aW9ucyBhbmQgbGluZSBkaXNjb3VudHMgICAgICBcclxuICAgICAgaWYgKHByb2R1Y3QubGluZVByb21vdGlvbnMgJiYgIXByb2R1Y3QucmVmdW5kZWRRdWFudGl0eSkge1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmxpbmVQcm9tb3Rpb24ucHVzaChwcm9kdWN0LmxpbmVQcm9tb3Rpb25zKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9kdWN0LmxpbmVEaXNjb3VudCAmJiAhcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMubGluZURpc2NvdW50LnB1c2gocHJvZHVjdC5saW5lRGlzY291bnQpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiZWJhc2tldDogY3VycmVudCB0cmFuc2FjdGlvbiBkZXRhaWxzIGFmdGVyIHJlbW92aW5nIG9sZCBwcm9kdWN0c1wiLCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cyk7XHJcblxyXG4gICAgaWYgKGJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50ICYmIGJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudHJhbnNhY3Rpb25EaXNjb3VudC5wdXNoKC4uLmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50KTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkgPSB7fSBhcyBCYXNrZXRTdW1tYXJ5O1xyXG5cclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkuc2FsZVRvdGFsID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGhpcy51cGRhdGVTYWxlVG90YWwodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMpKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyA9IGJhc2tldC5xdWFudGl0eTtcclxuXHJcblxyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCA9IGJhc2tldC5iYXNrZXRUb3RhbDtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkucmVmdW5kVG90YWwgPSB0aGlzLnVwZGF0ZUN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNSZWZ1bmRUb3RhbCgpO1xyXG4gICAgLy8gRm9yIHBhcnRpYWwgcmVmdW5kIGRpc2NvdW50IGlzIHVwZGF0aWVkIGluIHRvdGFsIGxpbmUgcHJpY2Ugc28gZGlzY291bnRUb3RhbCB3aWxsIGFsd2F5cyBiZSB6ZXJvICYgaW4gY2FzZSBvZiBleGNoYW5nZSBkaXNjb3VudCB0b3RhbCBpcyBjYWxjdWxhdGVkXHJcblxyXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfRVhDSEFOR0UpIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGhpcy51cGRhdGVDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzRGlzY291bnRUb3RhbCgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50ICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBkaXNjb3VudFRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50LmZvckVhY2goKGRpc2NvdW50OiB7IGRpc2NvdW50QW1vdW50OiBudW1iZXI7IH0pID0+IHtcclxuICAgICAgICAgIGRpc2NvdW50VG90YWwgKz0gZGlzY291bnQuZGlzY291bnRBbW91bnQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsID0gTWF0aC5hYnMoZGlzY291bnRUb3RhbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsID0gMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiZWJhc2tldDp0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1wiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAqIGN1cnJlbnQgdHJhbnNhY3Rpb24gVGF4IFRvdGFsXHJcbiAqIEByZXR1cm5zIFRheCBUb3RhbFxyXG4gKi9cclxuXHJcbiAgdXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1RheEJyZWFrZG93bihiYXNrZXREZXRhaWxzOiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICBsZXQgdHJhbnNhY3Rpb25EaXNjb3VudFRvdGFsID0gMDtcclxuICAgIGxldCB0YXhCcmVha2Rvd246IFRheEJyZWFrZG93biA9IHtcclxuICAgICAgdGF4TGluZXM6IFtdLFxyXG4gICAgICB0b3RhbFRheGFibGVBbW91bnQ6IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50ICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50LmZvckVhY2goKGRpc2NvdW50OiB7IGRpc2NvdW50QW1vdW50OiBudW1iZXI7IH0pID0+IHtcclxuICAgICAgICB0cmFuc2FjdGlvbkRpc2NvdW50VG90YWwgKz0gZGlzY291bnQuZGlzY291bnRBbW91bnQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cyAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3Q6IHsgaXRlbUxpbmVJZDogYW55OyBzZWxlY3RlZFZBVDogYW55OyBzZWxlY3RlZFZBVENvZGU6IGFueTsgdG90YWw6IGFueTsgcmVmdW5kZWRRdWFudGl0eTogbnVtYmVyOyBpdGVtRGlzY291bnRzOiB7IGN1cnJlbnRSZWZ1bmRQb3J0aW9uOiBudW1iZXI7IHRybkRpc2NvdW50c1BvcnRpb246IG51bWJlcjsgdHJuUHJvbW90aW9uc1BvcnRpb246IG51bWJlcjsgfTsgfSkgPT4ge1xyXG4gICAgICAgIGxldCB0YXhMaW5lOiBUYXhMaW5lID0ge1xyXG4gICAgICAgICAgaXRlbUxpbmVJZDogcHJvZHVjdC5pdGVtTGluZUlkLFxyXG4gICAgICAgICAgVkFUOiBwcm9kdWN0LnNlbGVjdGVkVkFUID8gcHJvZHVjdC5zZWxlY3RlZFZBVCA6IDAsXHJcbiAgICAgICAgICBWQVRDb2RlOiBwcm9kdWN0LnNlbGVjdGVkVkFUQ29kZSxcclxuICAgICAgICAgIHRheExpbmVUb3RhbDogMCxcclxuICAgICAgICAgIHRheGFibGVBbW91bnQ6IHByb2R1Y3QudG90YWwsXHJcbiAgICAgICAgICBQcmVUYXg6IDBcclxuXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJQcm9kdWN0IGNvbnRyaWJ1dGlvbiA6IGl0ZW0gbGluZSBJRCA6Y3VycmVudCB0cmFuc2FjdGlvbiBEZXRhaWxzXCIsXHJcbiAgICAgICAgICBwcm9kdWN0Lml0ZW1MaW5lSWQsIFwidGF4IGxpbmUgOlwiLCBKU09OLnN0cmluZ2lmeSh0YXhMaW5lKSwgSlNPTi5zdHJpbmdpZnkoYmFza2V0RGV0YWlscy5iYXNrZXRUb3RhbCkpO1xyXG5cclxuICAgICAgICAvL3N0ZXAgMVxyXG4gICAgICAgIC8vIGlmIFRyYW5zYWN0aW9uIERpc2NvdW50IGFuZC9vciBwcm9tb3Rpb24gYXBwbGllZCwgZmluZCBuZXQgc2VsbGluZyBwcmljZSBvZiBlYWNoIHByb2R1Y3QgYXMgdGF4YWJsZWFtb3VudFxyXG5cclxuICAgICAgICAvL0lmIHRyYW5zYWN0aW9uIGRpc2NvdW50L3Byb21vdGlvbiBpcyBhcHBsaWVkIHRheGFibGUgYW1vdW50IHNob3VsZCBiZSBkZWR1Y3RpbmcgdHJhbnNhY3Rpb24gcHJvbW90aW9uIGFuZCB0cmFuc2FjdGlvbiBkaXNhY291bnQgcG9ydGlvblxyXG4gICAgICAgIGlmIChwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkgJiYgcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ID4gMCkge1xyXG5cclxuICAgICAgICAgIHRheExpbmUudGF4YWJsZUFtb3VudCA9IC1NYXRoLmFicyh0YXhMaW5lLnRheGFibGVBbW91bnQgLSBwcm9kdWN0Lml0ZW1EaXNjb3VudHMuY3VycmVudFJlZnVuZFBvcnRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YXhMaW5lLnRheGFibGVBbW91bnQgPSB0YXhMaW5lLnRheGFibGVBbW91bnQgLSBwcm9kdWN0Lml0ZW1EaXNjb3VudHMudHJuRGlzY291bnRzUG9ydGlvbiAtIHByb2R1Y3QuaXRlbURpc2NvdW50cy50cm5Qcm9tb3Rpb25zUG9ydGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vc3RlcCAyIC0gZmluZCBwcmUgdGF4XHJcbiAgICAgICAgdGF4TGluZS5QcmVUYXggPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMigodGF4TGluZS50YXhhYmxlQW1vdW50ICogMTAwKSAvICgxMDAgKyB0YXhMaW5lLlZBVCkpO1xyXG5cclxuICAgICAgICAvL3N0ZXAgMyAtIFVwZGF0ZSB0YXhicmVha2Rvd25cclxuICAgICAgICB0YXhCcmVha2Rvd24udG90YWxUYXhhYmxlQW1vdW50ICs9IHRheExpbmUudGF4YWJsZUFtb3VudDtcclxuICAgICAgICB0YXhMaW5lLnRheGFibGVBbW91bnQgPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMih0YXhMaW5lLnRheGFibGVBbW91bnQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIHN0ZXAgNCAtIHVwZGF0ZSB0YXggTGluZSB0b3RhbFxyXG4gICAgICAgIHRheExpbmUudGF4TGluZVRvdGFsID0gIHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRheExpbmUudGF4YWJsZUFtb3VudCAtIHRheExpbmUuUHJlVGF4KTtcclxuICAgICAgICB0YXhCcmVha2Rvd24udGF4TGluZXMucHVzaCh0YXhMaW5lKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGF4QnJlYWtkb3duLnRvdGFsVGF4YWJsZUFtb3VudCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRheEJyZWFrZG93bi50b3RhbFRheGFibGVBbW91bnQpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudGF4QnJlYWtkb3duID0gdGF4QnJlYWtkb3duO1xyXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93biAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50YXhCcmVha2Rvd24udGF4TGluZXMgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudGF4QnJlYWtkb3duLnRheExpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93bi50YXhMaW5lcy5yZWR1Y2UoXHJcbiAgICAgICAgKG46IGFueSwgeyB0YXhMaW5lVG90YWwgfTogYW55KSA9PiBuICsgdGF4TGluZVRvdGFsLFxyXG4gICAgICAgIDBcclxuICAgICAgKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCA9IDAuMDA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJlQmFza2V0OmFmdGVyIGNhbGN1bGF0aW5nIHRheCBjdXJyZW50dHJhbnNhY3Rpb25EZXRhaWxzXCIsIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzVG90YWxUYXhTdW1tYXJ5KCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICBcclxuICAgIGNvbnNvbGUubG9nKFwiVG90YWwgVGF4IFN1bW1lcnkgUmVxdWVzdCA6XCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93bikpO1xyXG5cclxuICAgIGxldCB0b3RhbFRheFN1bW1hcnlBcnJheTogVG90YWxUYXhTdW1tYXJ5W10gPSBbXVxyXG4gICAgbGV0IHRvdGFsVGF4U3VtbWFyeUdyb3VwID0gW11cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlRheCBMaW5lcyBmb3IgVG90YWwgVGF4IFN1bW1lcnkgOlwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50YXhCcmVha2Rvd24udGF4TGluZXMpKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50YXhCcmVha2Rvd24udGF4TGluZXMuZm9yRWFjaCgoZWxlbWVudDogeyBWQVRDb2RlOiBhbnk7IFZBVDogYW55OyBQcmVUYXg6IGFueTsgdGF4TGluZVRvdGFsOiBhbnk7IH0pID0+IHtcclxuICAgICAgbGV0IFRheFN1bW1hcnk6IFRvdGFsVGF4U3VtbWFyeSA9IHtcclxuICAgICAgICBWQVRDb2RlOlwiXCIsXHJcbiAgICAgICAgVkFUOiAtMTIzNDUsXHJcbiAgICAgICAgUHJlVGF4U3VtOiAwLFxyXG4gICAgICAgIFRheFN1bTogMCxcclxuICAgICAgICBUWHJhdGVTdW06IDBcclxuICAgICAgfTtcclxuICAgICAgICBUYXhTdW1tYXJ5LlZBVENvZGU9ZWxlbWVudC5WQVRDb2RlO1xyXG4gICAgICAgIFRheFN1bW1hcnkuVkFUID0gZWxlbWVudC5WQVQ7ICAgICAgICBcclxuICAgICAgIFxyXG4gICAgICAgIFRheFN1bW1hcnkuUHJlVGF4U3VtID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIoZWxlbWVudC5QcmVUYXgpOyAgICAgICAgXHJcbiAgICAgICAgVGF4U3VtbWFyeS5UYXhTdW0gPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMihlbGVtZW50LnRheExpbmVUb3RhbCk7XHJcbiAgICAgICAgVGF4U3VtbWFyeS5UWHJhdGVTdW0gPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMihUYXhTdW1tYXJ5LlByZVRheFN1bSArIFRheFN1bW1hcnkuVGF4U3VtKTsgICAgIFxyXG4gICAgICAgIHRvdGFsVGF4U3VtbWFyeUFycmF5LnB1c2goVGF4U3VtbWFyeSk7XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiVG90YWwgVGF4IFN1bW1lcnkgIFdpdGhvdXQgR3JvdXBlZCA6IFwiLCBKU09OLnN0cmluZ2lmeSh0b3RhbFRheFN1bW1hcnlBcnJheSkpO1xyXG4gICAgXHJcbiAgICB0b3RhbFRheFN1bW1hcnlHcm91cCA9IHRvdGFsVGF4U3VtbWFyeUFycmF5LnJlZHVjZSgocHJlcGFyZWRBcnJheTphbnksY3VycmVudE9iajphbnkpID0+IHtcclxuICAgICAgbGV0IGluZCA9IHByZXBhcmVkQXJyYXkuZmluZEluZGV4KCh4OiB7IFZBVDogYW55OyB9KSA9PiB4LlZBVCA9PT0gY3VycmVudE9iai5WQVQpO1xyXG4gICAgICBpZihpbmQgPT09IC0xKXtcclxuICAgICAgICBwcmVwYXJlZEFycmF5LnB1c2goY3VycmVudE9iailcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHByZXBhcmVkQXJyYXlbaW5kXS5WQVRDb2RlID0gY3VycmVudE9iai5WQVRDb2RlO1xyXG4gICAgICAgIHByZXBhcmVkQXJyYXlbaW5kXS5WQVQgPSBjdXJyZW50T2JqLlZBVDtcclxuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uUHJlVGF4U3VtICs9IGN1cnJlbnRPYmouUHJlVGF4U3VtO1xyXG4gICAgICAgIHByZXBhcmVkQXJyYXlbaW5kXS5UYXhTdW0gKz0gY3VycmVudE9iai5UYXhTdW07XHJcbiAgICAgICAgcHJlcGFyZWRBcnJheVtpbmRdLlRYcmF0ZVN1bSArPSBjdXJyZW50T2JqLlRYcmF0ZVN1bTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcHJlcGFyZWRBcnJheTtcclxuICAgIH0sW10pXHJcbiAgICAvLyBsaXN0T2ZUYWdzLm1hcCh4ID0+IHVuaXF1ZS5maWx0ZXIoYSA9PiBhLmxhYmVsID09IHgubGFiZWwgJiYgYS5jb2xvciA9PSB4LmNvbG9yKS5sZW5ndGggPiAwID8gbnVsbCA6IHVuaXF1ZS5wdXNoKHgpKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlRvdGFsICBUYXggU3VtbWVyIEdyb3VwIDpcIiwgSlNPTi5zdHJpbmdpZnkodG90YWxUYXhTdW1tYXJ5R3JvdXApKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50b3RhbFRheFN1bW1hcnkgPSB0b3RhbFRheFN1bW1hcnlHcm91cDtcclxuICAgIHJldHVybiB0aGlzO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGN1cnJlbnQgdHJhbnNhY3Rpb24gRGlzb2N1bnQgVG90YWxcclxuICAgKiBAcmV0dXJucyBEaXNjb3VudCBUb3RhbFxyXG4gICAqL1xyXG4gIHVwZGF0ZUN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNEaXNjb3VudFRvdGFsKCkge1xyXG4gICAgbGV0IHJlZnVuZFRvdGFsID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5yZWZ1bmRUb3RhbCA/IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkucmVmdW5kVG90YWwgOiAwO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiZS1iYXNrZXQ6IHRyYW5zYWN0aW9uIGJ1aWxkZXIgdXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc0Rpc2NvdW50VG90YWw6IGRpc2NvdW50VG90YWxcIiwgcmVmdW5kVG90YWwsIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwsIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkuc2FsZVRvdGFsKTtcclxuICAgIGNvbnN0IGRpc2NvdW50VG90YWwgPVxyXG4gICAgICBNYXRoLmFicyhcclxuICAgICAgICBNYXRoLmFicyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCkgLVxyXG4gICAgICAgIChNYXRoLmFicyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsKSArIE1hdGguYWJzKHJlZnVuZFRvdGFsKSlcclxuICAgICAgKTtcclxuICAgIGNvbnNvbGUubG9nKFwiZS1iYXNrZXQ6IHRyYW5zYWN0aW9uIGJ1aWxkZXIgdXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc0Rpc2NvdW50VG90YWw6IGRpc2NvdW50VG90YWxcIiwgZGlzY291bnRUb3RhbClcclxuICAgIHJldHVybiBOdW1iZXIoZGlzY291bnRUb3RhbC50b0ZpeGVkKDIpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogY3VycmVudCB0cmFuc2FjdGlvbiBSZWZ1bmQgVG90YWxcclxuICAqIEByZXR1cm5zIFJlZnVuZCBUb3RhbFxyXG4gICovXHJcbiAgdXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1JlZnVuZFRvdGFsKCkge1xyXG4gICAgbGV0IHRvdGFsUmVmdW5kID0gMDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgcHJvZHVjdDogUHJvZHVjdCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzW2luZGV4XTtcclxuICAgICAgaWYgKHByb2R1Y3QucmVmdW5kZWRUb3RhbCkge1xyXG4gICAgICAgIHRvdGFsUmVmdW5kID0gdG90YWxSZWZ1bmQgKyBwcm9kdWN0LnJlZnVuZGVkVG90YWw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coXCJlYmFza2V0IDogdHJhbnNhY3Rpb24gU2VydmljZTogdG90YWxSZWZ1bmQgZm9yIEN1cnJlbnQgVHJhbnNhY3Rpb25EZXRhaWxzXCIgKyB0b3RhbFJlZnVuZClcclxuICAgIH1cclxuICAgIHJldHVybiB0b3RhbFJlZnVuZDtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQmFza2V0cyBzdW1tYXJ5XHJcbiAgICogQHBhcmFtIGJhc2tldERldGFpbHNcclxuICAgKiBAcmV0dXJucyBzdW1tYXJ5XHJcbiAgICovXHJcbiAgYmFza2V0U3VtbWFyeShiYXNrZXREZXRhaWxzOiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwoYmFza2V0RGV0YWlscy5iYXNrZXRUb3RhbCk7XHJcblxyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuc2FsZVRvdGFsID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGhpcy51cGRhdGVTYWxlVG90YWwoXHJcbiAgICAgIGJhc2tldERldGFpbHNcclxuICAgICkpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkucmVmdW5kVG90YWwgPSB0aGlzLmdldFJlZnVuZFRvdGFsKCk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50IHx8XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvblxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmRpc2NvdW50VG90YWwgPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMih0aGlzLnVwZGF0ZURpc2NvdW50VG90YWwoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zID0gYmFza2V0RGV0YWlscy5xdWFudGl0eTtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMucmVkdWNlKFxyXG4gICAgICAgIChuOiBhbnksIHsgdGF4TGluZVRvdGFsIH06IGFueSkgPT4gbiArIHRheExpbmVUb3RhbCxcclxuICAgICAgICAwXHJcbiAgICAgICkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsID0gMC4wMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmluZm8oXCJlYmFza2V0OiBiYXNrZXRzdW1tYXJ5IHVwZGF0ZWQgaW4gdHJhbnNhY3Rpb24gZG9jdW1lbnQ6IFwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeSkpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaW5lIERpc2NvdW50XHJcbiAgICogQHBhcmFtIGJhc2tldERldGFpbHNcclxuICAgKiBAcmV0dXJucyBsaW5lIERpc2NvdW50XHJcbiAgICovXHJcbiAgbGluZURpc2NvdW50KGJhc2tldERldGFpbHM6IEJhc2tldCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYmFza2V0RGV0YWlscy5wcm9kdWN0cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGJhc2tldERldGFpbHMucHJvZHVjdHNbaW5kZXhdO1xyXG4gICAgICBpZiAoZWxlbWVudC5saW5lRGlzY291bnQpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5wdXNoKGVsZW1lbnQubGluZURpc2NvdW50KTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LnJlZHVjZShcclxuICAgICAgICAgIChhY2M6IGFueVtdLCB2YWw6IHsgaXRlbUxpbmVJZDogYW55OyB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghYWNjLmZpbmQoKGVsOiB7IGl0ZW1MaW5lSWQ6IGFueTsgfSkgPT4gZWwuaXRlbUxpbmVJZCA9PT0gdmFsLml0ZW1MaW5lSWQpKSB7XHJcbiAgICAgICAgICAgICAgYWNjLnB1c2godmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY29uc29sZS5pbmZvKFxyXG4gICAgICAvLyAgIFwiZS1iYXNrZXQgOmxpbmUgZGlzY291bnQgdXBkYXRlZCBpbiB0cmFuc2FjdGlvbiBkb2N1bWVudFwiLFxyXG4gICAgICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50XHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGV4Y2hhbmdlXHJcbiAgICogQHBhcmFtIGJhc2tldERldGFpbHNcclxuICAgKiBAcmV0dXJucyBleGNoYW5nZSBcclxuICAgKi9cclxuICBleGNoYW5nZShiYXNrZXREZXRhaWxzOiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmV4Y2hhbmdlID0gYmFza2V0RGV0YWlscy5leGNoYW5nZSAmJiBiYXNrZXREZXRhaWxzLmV4Y2hhbmdlLmxlbmd0aCA+IDAgPyBbLi4uYmFza2V0RGV0YWlscy5leGNoYW5nZV0gOiBbXTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBiYXNrZXREZXRhaWxzLnByb2R1Y3RzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cclxuICAgICAgY29uc3QgZWxlbWVudDogYW55ID0gYmFza2V0RGV0YWlscy5wcm9kdWN0c1tpbmRleF07XHJcbiAgICAgIGlmIChlbGVtZW50LmV4Y2hhbmdlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGlzUHJlc2VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQuZXhjaGFuZ2Uuc29tZSgoZWw6IHsgZXhjaGFuZ2VJZDogYW55OyB9KSA9PiBlbC5leGNoYW5nZUlkID09PSBlbGVtZW50LmV4Y2hhbmdlLmV4Y2hhbmdlSWQpO1xyXG4gICAgICAgIGlmICghaXNQcmVzZW50KSB7XHJcbiAgICAgICAgICBsZXQgZXhjaGFuZ2VJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50LmV4Y2hhbmdlLm5ld0l0ZW1zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LmV4Y2hhbmdlLm5ld0l0ZW1zW2pdO1xyXG4gICAgICAgICAgICBsZXQgbmV3SXRlbXM6IGFueSA9IHsgbGluZUl0ZW1JZDogaXRlbS5pdGVtTGluZUlkLCBRdWFudGl0eTogaXRlbS5xdWFudGl0eSB9XHJcbiAgICAgICAgICAgIGV4Y2hhbmdlSXRlbXMucHVzaChuZXdJdGVtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbGVtZW50LmV4Y2hhbmdlLm5ld0l0ZW1zID0gWy4uLmV4Y2hhbmdlSXRlbXNdO1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5leGNoYW5nZS5wdXNoKGVsZW1lbnQuZXhjaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBcImUtYmFza2V0IDpUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldCBleGNoYW5nZVwiLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQuZXhjaGFuZ2UpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIGFkZCBwcmV2aW91cyBleGNoYW5nZSBkYXRhXHJcbiAgKiBAcGFyYW0gb3JpZ2luYWxUcmFuc2FjdGlvbkRvY3VtZW50XHJcbiAgKiBAcmV0dXJucyBsaW5lIFByb21vdGlvbnNcclxuICAqL1xyXG4gIGFkZEV4Y2hhbmdlRGF0YShvcmlnaW5hbFRyYW5zYWN0aW9uRG9jdW1lbnQ6IFRyYW5zYWN0aW9uRG9jdW1lbnQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmV4Y2hhbmdlID0gb3JpZ2luYWxUcmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5leGNoYW5nZSA/IFsuLi5vcmlnaW5hbFRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmV4Y2hhbmdlXSA6IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxpbmUgUHJvbW90aW9uc1xyXG4gICAqIEBwYXJhbSBiYXNrZXREZXRhaWxzXHJcbiAgICogQHJldHVybnMgbGluZSBQcm9tb3Rpb25zXHJcbiAgICovXHJcbiAgbGluZVByb21vdGlvbihiYXNrZXREZXRhaWxzOiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24gPSBbXTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBiYXNrZXREZXRhaWxzLnByb2R1Y3RzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gYmFza2V0RGV0YWlscy5wcm9kdWN0c1tpbmRleF07XHJcbiAgICAgIGlmIChlbGVtZW50LmxpbmVQcm9tb3Rpb25zKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLnB1c2goXHJcbiAgICAgICAgICBlbGVtZW50LmxpbmVQcm9tb3Rpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ucmVkdWNlKFxyXG4gICAgICAgICAgKGFjYzogYW55W10sIHZhbDogeyBpdGVtTGluZUlkOiBhbnk7IH0pID0+IHtcclxuICAgICAgICAgICAgaWYgKCFhY2MuZmluZCgoZWw6IHsgaXRlbUxpbmVJZDogYW55OyB9KSA9PiBlbC5pdGVtTGluZUlkID09PSB2YWwuaXRlbUxpbmVJZCkpIHtcclxuICAgICAgICAgICAgICBhY2MucHVzaCh2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyYW5zYWN0aW9uIFByb21vdGlvblxyXG4gICAqIEBwYXJhbSBiYXNrZXREZXRhaWxzXHJcbiAgICogQHJldHVybnMgdHJhbnNhY3Rpb24gUHJvbW90aW9uXHJcbiAgICovXHJcbiAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24oYmFza2V0RGV0YWlsczogQmFza2V0KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgaWYgKGJhc2tldERldGFpbHMudHJhbnNhY3Rpb25Qcm9tb3Rpb24pIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9XHJcbiAgICAgICAgYmFza2V0RGV0YWlscy50cmFuc2FjdGlvblByb21vdGlvbjtcclxuICAgICAgLy8gICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYmFza2V0RGV0YWlscy5UcmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHVzaChlbGVtZW50LmxpbmVQcm9tb3Rpb25zKVxyXG4gICAgICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9ucy5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XHJcbiAgICAgIC8vICAgICBpZiAoIWFjYy5maW5kKGVsID0+IGVsLml0ZW1MaW5lSWQgPT09IHZhbC5pdGVtTGluZUlkKSkge1xyXG4gICAgICAvLyAgICAgICBhY2MucHVzaCh2YWwpO1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgcmV0dXJuIGFjYztcclxuICAgICAgLy8gICB9LCBbXSk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJlLWJhc2tldCA6VHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXI6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb25cIixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB0cmFuc2FjdGlvbkRpc2NvdW50KGJhc2tldERldGFpbHM6IEJhc2tldCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIGlmIChiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQpIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50ID1cclxuICAgICAgICBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQ7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBcImUtYmFza2V0IDpUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcjogdHJhbnNhY3Rpb24gRGlzY291bnRcIixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBheW1lbnRzIGRldGFpbHNcclxuICAgKiBAcGFyYW0gcGF5bWVudERldGFpbHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHBheW1lbnREZXRhaWxzKHBheW1lbnREZXRhaWxzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUuaW5mbyhcImViYXNrZXQgOiBwYXltZW50IGRldGFpbHMgYWZ0ZXIgdHJhbnNhY3Rpb24gY29tcGxldGVkXCIsSlNPTi5zdHJpbmdpZnkocGF5bWVudERldGFpbHMpKTtcclxuICAgIFxyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzID0gcGF5bWVudERldGFpbHM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBQYXltZW50cyBkZXRhaWxzXHJcbiAgICogQHBhcmFtIHBheW1lbnREZXRhaWxzXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICAgc3BsaXRQYXltZW50KHNwbGl0UGF5bWVudDogYm9vbGVhbikgeyAgICBcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zcGxpdFBheW1lbnQgPSBzcGxpdFBheW1lbnQ7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9IFxyXG5cclxuICAgLyoqXHJcbiAgICogUGF5bWVudHMgZGV0YWlsc1xyXG4gICAqIEBwYXJhbSBwYXltZW50RGV0YWlsc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgICBpc1BheW1lbnRDb21wbGV0ZWQoaXNQYXltZW50Q29tcGxldGVkOiBib29sZWFuKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5pc1BheW1lbnRDb21wbGV0ZWQgPSBpc1BheW1lbnRDb21wbGV0ZWQ7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSBcclxuICBcclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiBCYXNlcyBjdXJyZW5jeVxyXG4gICAqIEBwYXJhbSBjdXJyZW5jeVxyXG4gICAqIEByZXR1cm5zIGN1cnJlbmN5XHJcbiAgICovXHJcbiAgYmFzZUN1cnJlbmN5KGN1cnJlbmN5OiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5ID0gY3VycmVuY3k7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogZ2lmdCBvcHRpb24gYXRcclxuICAqIEByZXR1cm5zIGF0XHJcbiAgKi9cclxuICBnaWZ0T3B0aW9uKGdpZnQ6IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICBcImUtYmFza2V0IDpUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmdpZnRvcHRpb25cIixcclxuICAgICAgZ2lmdFxyXG4gICAgKTtcclxuICAgIGlmIChnaWZ0KSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5naWZ0ZWRSZWNlaXB0ID0gZ2lmdDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuXHJcbi8qKlxyXG4gKiBtYW51YWwgRGlzY291bnRcclxuICogQHBhcmFtIGRpc2NvdW50RGF0YVxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuXHJcbiAgLy8gbWFudWFsRGlzY291bnQoZGlzY291bnREYXRhIDogYmFza2V0RGlzY291bnQpOlRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAvLyAgIGxldCBzYWxlVG90YWwgPSAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWw7XHJcbiAgLy8gICBpZihkaXNjb3VudERhdGEuZGlzY291bnRUeXBlID09J1BlcmNlbnQnKXtcclxuICAvLyAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPSBzYWxlVG90YWwtKHNhbGVUb3RhbCooZGlzY291bnREYXRhLmRpc2NvdW50QW1vdW50LzEwMCkpO1xyXG4gIC8vICAgICBkaXNjb3VudERhdGEuZGlzY291bnRBbW91bnQgPSAtMSooc2FsZVRvdGFsLXRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsKTtcclxuICAvLyAgIH1lbHNlIHtcclxuICAvLyAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPXNhbGVUb3RhbC1kaXNjb3VudERhdGEuZGlzY291bnRBbW91bnQ7XHJcbiAgLy8gICAgIGRpc2NvdW50RGF0YS5kaXNjb3VudEFtb3VudCA9IC0xKmRpc2NvdW50RGF0YS5kaXNjb3VudEFtb3VudDtcclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50cmFuc2FjdGlvbkRpc2NvdW50LnB1c2goZGlzY291bnREYXRhKTtcclxuICAvLyAgIHJldHVybiB0aGlzO1xyXG5cclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFR5cGVzIHRyYW5zYWN0aW9uIGRvY3VtZW50IGJ1aWxkZXJcclxuICAgKiBAcGFyYW0gdFxyXG4gICAqIEByZXR1cm5zIHR5cGVcclxuICAgKi9cclxuICB0eXBlKHQ6IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID0gdDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBPcGVyYXRpb25zIHN0YXR1c1xyXG4gICAqIEBwYXJhbSBvXHJcbiAgICogQHJldHVybnMgc3RhdHVzXHJcbiAgICovXHJcbiAgb3BlcmF0aW9uU3RhdHVzKG86IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcGVyYXRpb25TdGF0dXMgPSBvO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZWQgYXRcclxuICAgKiBAcmV0dXJucyBhdFxyXG4gICAqL1xyXG4gIGNyZWF0ZWRBdCgpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0ID0gZGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZWQgYXRcclxuICAgKiBAcmV0dXJucyBhdFxyXG4gICAqL1xyXG4gIHVwZGF0ZWRBdCgpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogdHJhbnNzYWN0aW9uIGNvbXBsZXRpb24gYXRcclxuICAgKiBAcmV0dXJucyB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIGRhdGVcclxuICAgKi9cclxuICB0cmFuc2FjdGlvbkNvbXBsZXRlZEF0KCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRyYW5zQ29tcGxldGVkQXQgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRyYW5zYWN0aW9uIGRvY3VtZW50IGJ1aWxkZXJcclxuICAgKiBAcmV0dXJucyBidWlsZFxyXG4gICAqL1xyXG4gIGJ1aWxkKCk6IFRyYW5zYWN0aW9uRG9jdW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhbGVzIHRvdGFsIGluIHJlZnVuZFxyXG4gICAqIEBwYXJhbSBzYWxlVG90YWxcclxuICAgKiBAcmV0dXJucyB0b3RhbCBpbiByZWZ1bmRcclxuICAgKi9cclxuICBzYWxlVG90YWxJblJlZnVuZChzYWxlVG90YWw6IG51bWJlcik6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zYWxlVG90YWwgPSBzYWxlVG90YWw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYmFza2V0IGRldGFpbHNcclxuICAgKiBAcmV0dXJucyBiYXNrZXQgZGV0YWlsc1xyXG4gICAqL1xyXG4gIGdldEJhc2tldERldGFpbHMoKTogQmFza2V0IHtcclxuICAgIGNvbnNvbGUuaW5mbyhcImViYXNrZXQ6IEdldHRpbmcgQmFza2V0IGZvciB0cmFuc2FjdGlvbkRvY3VtZW50XCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCkpO1xyXG5cclxuICAgIGxldCBiYXNrZXQ6IEJhc2tldCA9IHtcclxuICAgICAgc3Vic2lkaWFyeUlkIDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN1YnNpZGlhcnlJZCxcclxuICAgICAgdHJhbnNhY3Rpb25EaXNjb3VudDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50LFxyXG4gICAgICB0cmFuc2FjdGlvblByb21vdGlvbjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbixcclxuICAgICAgdHJhbnNhY3Rpb25JZDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRyYW5zYWN0aW9uSWQsXHJcbiAgICAgIG9mZmxpbmVUcmFuc2FjdGlvbklkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQub2ZmbGluZVRyYW5zYWN0aW9uSWQsXHJcbiAgICAgIHRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCxcclxuICAgICAgYmFza2V0VG90YWw6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsLFxyXG4gICAgICBkaXNjb3VudFRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsLFxyXG4gICAgICBzYWxlVG90YWw6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCxcclxuICAgICAgcmVmdW5kVG90YWw6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnJlZnVuZFRvdGFsLFxyXG4gICAgICBxdWFudGl0eTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyxcclxuICAgICAgcHJvZHVjdHM6IFtdLFxyXG4gICAgICBiYXNlQ3VycmVuY3k6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgIGN1c3RvbWVyOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VzdG9tZXIsXHJcbiAgICB9O1xyXG5cclxuICAgIGJhc2tldC5wcm9kdWN0cyA9IFtdIGFzIFByb2R1Y3RbXTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdDogeyBTS1U6IGFueTsgYmFyQ29kZTogYW55OyBiYXJjb2RlczogYW55OyBkZXNjcmlwdGlvbjogYW55OyBpbWFnZVVybHM6IGFueTsgdG90YWxMaW5lUHJpY2U6IGFueTsgaXRlbUxpbmVJZDogYW55OyBleGNsdWRlUHJvbW90aW9uOiBhbnk7IHByaWNlOiBhbnk7IHF1YW50aXR5OiBhbnk7IHNlbGVjdGVkUlJQUHJpY2U6IGFueTsgZnVsbGZpbG1lbnRJZDogYW55OyBmdWxsZmlsbWVudExvY2F0aW9uTmFtZTogYW55OyBkZWxpdmVyeUdyb3VwOiBzdHJpbmc7IGxlYWRUaW1lOiBhbnk7IGRlbGl2ZXJ5TWV0aG9kOiBhbnk7IGdpZnRDYXJkOiBhbnk7IGdpZnRDYXJkRXhwaXJ5RGF0ZTogYW55OyBnaWZ0Q2FyZE51bWJlcklzc3VlZDogYW55OyBnaWZ0Q2FyZFJlY2lwaWVudEVtYWlsOiBhbnk7IGdpZnRDYXJkUmVjaXBpZW50TmFtZTogYW55OyByZWZ1bmRlZFRvdGFsOiBhbnk7IHJlZnVuZGVkUXVhbnRpdHk6IG51bWJlcjsgcmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbjogYW55OyByZWZ1bmRlZFJlYXNvbjogYW55OyByZWZ1bmRlZFByb21vdGlvbmFsUXVhbnRpdHk6IGFueTsgaXNMYXN0RXhjaGFuZ2VkOiBhbnk7IH0sIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocHJvZHVjdCksIFwiZWJhc2tldDogYmFza2V0IGRldGFpbCB1cGRhdGUgaW4gYmFza2V0XCIpO1xyXG4gICAgICBjb25zdCBwID0ge30gYXMgYW55O1xyXG4gICAgICBwLlNLVSA9IHByb2R1Y3QuU0tVO1xyXG4gICAgICBwLmJhcmNvZGUgPSBwcm9kdWN0LmJhckNvZGU7XHJcbiAgICAgIHAuYmFyY29kZXMgPSBwcm9kdWN0LmJhcmNvZGVzO1xyXG5cclxuICAgICAgcC5kZXNjcmlwdGlvbiA9IHByb2R1Y3QuZGVzY3JpcHRpb247XHJcbiAgICAgIHAuaW1hZ2VVcmxzID0gcHJvZHVjdC5pbWFnZVVybHM7XHJcbiAgICAgIHAuY3VycmVuY3kgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5O1xyXG4gICAgICBwLnRvdGFsTGluZVByaWNlID0gcHJvZHVjdC50b3RhbExpbmVQcmljZTtcclxuICAgICAgcC5pdGVtTGluZUlkID0gTnVtYmVyKHByb2R1Y3QuaXRlbUxpbmVJZCk7XHJcbiAgICAgIHAuZXhjbHVkZVByb21vdGlvbiA9IHByb2R1Y3QuZXhjbHVkZVByb21vdGlvbjtcclxuXHJcbiAgICAgIHAuc2VsZWN0ZWRQcmljZSA9IHByb2R1Y3QucHJpY2U7XHJcbiAgICAgIHAucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICBwLnRvdGFsID0gcHJvZHVjdC50b3RhbExpbmVQcmljZTtcclxuICAgICAgcC5zZWxlY3RlZFJSUFByaWNlID0gcHJvZHVjdC5zZWxlY3RlZFJSUFByaWNlO1xyXG5cclxuICAgICAgcC5mdWxsZmlsbWVudElkID0gcHJvZHVjdC5mdWxsZmlsbWVudElkO1xyXG4gICAgICBwLmZ1bGxmaWxtZW50TG9jYXRpb25OYW1lID0gcHJvZHVjdC5mdWxsZmlsbWVudExvY2F0aW9uTmFtZTtcclxuICAgICAgcC5kZWxpdmVyeUdyb3VwID0gcHJvZHVjdC5kZWxpdmVyeUdyb3VwIHx8IFwiMVwiO1xyXG4gICAgICBwLmxlYWRUaW1lID0gcHJvZHVjdC5sZWFkVGltZTtcclxuICAgICAgcC5kZWxpdmVyeU1ldGhvZCA9IHByb2R1Y3QuZGVsaXZlcnlNZXRob2QgfHwgREVMSVZFUllfTUVUSE9EUy5DT0xMRUNUX0ZST01fU1RPUkUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGlmKHAuZnVsbGZpbG1lbnRJZCAhPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVJZClcclxuICAgICAge1xyXG4gICAgICAgIHAuaXNXZWJPcmRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIFxyXG4gICAgICBwLmdpZnRDYXJkID0gcHJvZHVjdC5naWZ0Q2FyZDtcclxuICAgICAgcC5naWZ0Q2FyZEV4cGlyeURhdGUgPSBwcm9kdWN0LmdpZnRDYXJkRXhwaXJ5RGF0ZTtcclxuICAgICAgcC5naWZ0Q2FyZE51bWJlcklzc3VlZCA9IHByb2R1Y3QuZ2lmdENhcmROdW1iZXJJc3N1ZWQ7XHJcbiAgICAgIHAuZ2lmdENhcmRSZWNpcGllbnRFbWFpbCA9IHByb2R1Y3QuZ2lmdENhcmRSZWNpcGllbnRFbWFpbDtcclxuICAgICAgcC5naWZ0Q2FyZFJlY2lwaWVudE5hbWUgPSBwcm9kdWN0LmdpZnRDYXJkUmVjaXBpZW50TmFtZTtcclxuICAgICAgXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCAmJlxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50Lmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuZm9yRWFjaCgobGluZURpc2NvdW50OiB7IGl0ZW1MaW5lSWQ6IHsgdG9TdHJpbmc6ICgpID0+IGFueTsgfTsgZGlzY291bnRlZExpbmVQcmljZTogYW55OyB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkID09PSBsaW5lRGlzY291bnQuaXRlbUxpbmVJZC50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgIHAubGluZURpc2NvdW50ID0gbGluZURpc2NvdW50O1xyXG4gICAgICAgICAgICBwLnRvdGFsID0gbGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24gJiZcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24uZm9yRWFjaCgobGluZVByb21vdGlvbjogeyBpdGVtTGluZUlkOiB7IHRvU3RyaW5nOiAoKSA9PiBhbnk7IH07IHByb21vdGlvbkxpbmVQcmljZTogYW55OyB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkID09PSBsaW5lUHJvbW90aW9uLml0ZW1MaW5lSWQudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICBwLmxpbmVQcm9tb3Rpb25zID0gbGluZVByb21vdGlvbjtcclxuICAgICAgICAgICAgcC50b3RhbCA9IGxpbmVQcm9tb3Rpb24ucHJvbW90aW9uTGluZVByaWNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24gJiZcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZvckVhY2goKHRheExpbmU6IHsgaXRlbUxpbmVJZDogeyB0b1N0cmluZzogKCkgPT4gYW55OyB9OyBWQVQ6IGFueTsgVkFUQ29kZTogYW55OyB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkICYmIHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gdGF4TGluZS5pdGVtTGluZUlkLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgcC5zZWxlY3RlZFZBVCA9IHRheExpbmUuVkFUO1xyXG4gICAgICAgICAgICBwLnNlbGVjdGVkVkFUQ29kZSA9IHRheExpbmUuVkFUQ29kZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlJFRlVORCkge1xyXG4gICAgICAgIHAudG90YWwgPSBwcm9kdWN0LnJlZnVuZGVkVG90YWw7XHJcbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfUkVGVU5EIHx8IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9FWENIQU5HRSkgJiYgcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ID4gMCkge1xyXG4gICAgICAgIHAucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiA9IHByb2R1Y3QucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbjtcclxuICAgICAgICBwLnJlZnVuZGVkUmVhc29uID0gcHJvZHVjdC5yZWZ1bmRlZFJlYXNvbjtcclxuICAgICAgICBpZiAoIXAucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgcC5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uID0gcC5yZWZ1bmRlZFJlYXNvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcC5yZWZ1bmRlZFF1YW50aXR5ID0gcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5O1xyXG4gICAgICAgIHAucmVmdW5kUHJvbW90aW9uYWxRdWFudGl0eSA9IHByb2R1Y3QucmVmdW5kZWRQcm9tb3Rpb25hbFF1YW50aXR5O1xyXG4gICAgICAgIHAucmVmdW5kZWRUb3RhbCA9IHByb2R1Y3QucmVmdW5kZWRUb3RhbDtcclxuICAgICAgICBwLnRvdGFsIC09IE1hdGguYWJzKHAucmVmdW5kZWRUb3RhbCk7XHJcbiAgICAgICAgcC5pc0xhc3RFeGNoYW5nZWQgPSBwcm9kdWN0LmlzTGFzdEV4Y2hhbmdlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlJFRlVORCkge1xyXG4gICAgICAgIGlmIChwLnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgcC50b3RhbCAqPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJhc2tldC5wcm9kdWN0cy5wdXNoKHApO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGJhc2tldCA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25EaXNjb3VudEFuZFRyYW5zYWN0aW9uUHJvbW90aW9uUG9ydGlvbihiYXNrZXQpO1xyXG4gICAgYmFza2V0LnRvdGFsID0gKGJhc2tldC5iYXNrZXRUb3RhbCB8fCAwKSArIHRoaXMuZ2V0VG90YWxEaXNjb3VudFdpdGhUcmFuc2FjdGlvbkRpc2NvdW50c0FuZFByb21vdGlvbnMoYmFza2V0KTtcclxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX1JFRlVORCkge1xyXG4gICAgICBiYXNrZXQucXVhbnRpdHkgPSB0aGlzLmdldFJlZnVuZGVkVG90YWxXaXRoUXVhbnRpdHkoYmFza2V0KTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuaW5mbyhcImViYXNrZXQ6IEJhc2tldCBjcmVhdGVkIHN1Y2Nlc3NmdWxseVwiLCBKU09OLnN0cmluZ2lmeShiYXNrZXQpKVxyXG4gICAgcmV0dXJuIGJhc2tldDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYmFza2V0IGRldGFpbHNcclxuICAgKiBAcmV0dXJucyByZWZ1bmQgYmFza2V0IGRldGFpbHNcclxuICAgKi9cclxuICAvLyBnZXRSZWZ1bmRCYXNrZXREZXRhaWxzKCk6IEJhc2tldCB7XHJcbiAgLy8gICBsZXQgYmFza2V0OiBCYXNrZXQgPSB7XHJcbiAgLy8gICAgIHN1YnNpZGlhcnlJZCA6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdWJzaWRpYXJ5SWQsXHJcbiAgLy8gICAgIHRyYW5zYWN0aW9uRGlzY291bnQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCxcclxuICAvLyAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24sXHJcbiAgLy8gICAgIHRyYW5zYWN0aW9uSWQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50cmFuc2FjdGlvbklkLFxyXG4gIC8vICAgICB0b3RhbDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwsXHJcbiAgLy8gICAgIGJhc2tldFRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCxcclxuICAvLyAgICAgZGlzY291bnRUb3RhbDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuZGlzY291bnRUb3RhbCxcclxuICAvLyAgICAgc2FsZVRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5zYWxlVG90YWwsXHJcbiAgLy8gICAgIHF1YW50aXR5OiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zLFxyXG4gIC8vICAgICBwcm9kdWN0czogW10sXHJcbiAgLy8gICAgIGJhc2VDdXJyZW5jeTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcclxuICAvLyAgICAgY3VzdG9tZXI6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXN0b21lcixcclxuICAvLyAgIH07XHJcblxyXG4gIC8vICAgYmFza2V0LnByb2R1Y3RzID0gW10gYXMgUHJvZHVjdFtdO1xyXG4gIC8vICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0OiB7IFNLVTogYW55OyBiYXJDb2RlOiBhbnk7IGJhcmNvZGVzOiBhbnk7IGRlc2NyaXB0aW9uOiBhbnk7IGltYWdlVXJsczogYW55OyB0b3RhbExpbmVQcmljZTogYW55OyBpdGVtTGluZUlkOiBhbnk7IGV4Y2x1ZGVQcm9tb3Rpb246IGFueTsgcHJpY2U6IG51bWJlcjsgcXVhbnRpdHk6IGFueTsgc2VsZWN0ZWRSUlBQcmljZTogYW55OyBmdWxsZmlsbWVudElkOiBhbnk7IGZ1bGxmaWxtZW50TG9jYXRpb25OYW1lOiBhbnk7IGRlbGl2ZXJ5R3JvdXA6IHN0cmluZzsgbGVhZFRpbWU6IGFueTsgZGVsaXZlcnlNZXRob2Q6IGFueTsgZ2lmdENhcmQ6IGFueTsgZ2lmdENhcmRFeHBpcnlEYXRlOiBhbnk7IGdpZnRDYXJkTnVtYmVySXNzdWVkOiBhbnk7IGdpZnRDYXJkUmVjaXBpZW50RW1haWw6IGFueTsgZ2lmdENhcmRSZWNpcGllbnROYW1lOiBhbnk7IGl0ZW1EaXNjb3VudHM6IGFueTsgcmVmdW5kZWRQcm9tb3Rpb25hbFF1YW50aXR5OiBhbnk7IHJlZnVuZGVkUXVhbnRpdHk6IG51bWJlcjsgcmVmdW5kZWQ6IGFueTsgaXNMYXN0RXhjaGFuZ2VkOiBhbnk7IGV4Y2hhbmdlOiBhbnk7IHJlZnVuZGVkVG90YWw6IG51bWJlcjsgfSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gIC8vICAgICBjb25zdCBwID0ge30gYXMgUHJvZHVjdDtcclxuICAvLyAgICAgcC5TS1UgPSBwcm9kdWN0LlNLVTtcclxuICAvLyAgICAgcC5iYXJjb2RlID0gcHJvZHVjdC5iYXJDb2RlO1xyXG4gIC8vICAgICBwLmJhcmNvZGVzID0gcHJvZHVjdC5iYXJjb2RlcztcclxuXHJcbiAgLy8gICAgIHAuZGVzY3JpcHRpb24gPSBwcm9kdWN0LmRlc2NyaXB0aW9uO1xyXG4gIC8vICAgICBwLmltYWdlVXJscyA9IHByb2R1Y3QuaW1hZ2VVcmxzO1xyXG4gIC8vICAgICBwLmN1cnJlbmN5ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeTtcclxuICAvLyAgICAgcC50b3RhbExpbmVQcmljZSA9IHByb2R1Y3QudG90YWxMaW5lUHJpY2U7XHJcbiAgLy8gICAgIHAuaXRlbUxpbmVJZCA9IE51bWJlcihwcm9kdWN0Lml0ZW1MaW5lSWQpO1xyXG4gIC8vICAgICBwLmV4Y2x1ZGVQcm9tb3Rpb24gPSBwcm9kdWN0LmV4Y2x1ZGVQcm9tb3Rpb247XHJcblxyXG4gIC8vICAgICBwLnNlbGVjdGVkUHJpY2UgPSBwcm9kdWN0LnByaWNlO1xyXG4gIC8vICAgICBwLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcclxuICAvLyAgICAgcC50b3RhbCA9IHByb2R1Y3QudG90YWxMaW5lUHJpY2U7XHJcbiAgLy8gICAgIHAuc2VsZWN0ZWRSUlBQcmljZSA9IHByb2R1Y3Quc2VsZWN0ZWRSUlBQcmljZTtcclxuXHJcbiAgLy8gICAgIHAuZnVsbGZpbG1lbnRJZCA9IHByb2R1Y3QuZnVsbGZpbG1lbnRJZDtcclxuICAvLyAgICAgcC5mdWxsZmlsbWVudExvY2F0aW9uTmFtZSA9IHByb2R1Y3QuZnVsbGZpbG1lbnRMb2NhdGlvbk5hbWU7XHJcbiAgLy8gICAgIHAuZGVsaXZlcnlHcm91cCA9IHByb2R1Y3QuZGVsaXZlcnlHcm91cCB8fCBcIjFcIjtcclxuICAvLyAgICAgcC5sZWFkVGltZSA9IHByb2R1Y3QubGVhZFRpbWU7XHJcbiAgLy8gICAgIHAuZGVsaXZlcnlNZXRob2QgPSBwcm9kdWN0LmRlbGl2ZXJ5TWV0aG9kIHx8IERFTElWRVJZX01FVEhPRFMuQ09MTEVDVF9GUk9NX1NUT1JFLnRvU3RyaW5nKCk7XHJcblxyXG4gIC8vICAgICBwLmdpZnRDYXJkID0gcHJvZHVjdC5naWZ0Q2FyZDtcclxuICAvLyAgICAgcC5naWZ0Q2FyZEV4cGlyeURhdGUgPSBwcm9kdWN0LmdpZnRDYXJkRXhwaXJ5RGF0ZTtcclxuICAvLyAgICAgcC5naWZ0Q2FyZE51bWJlcklzc3VlZCA9IHByb2R1Y3QuZ2lmdENhcmROdW1iZXJJc3N1ZWQ7XHJcbiAgLy8gICAgIHAuZ2lmdENhcmRSZWNpcGllbnRFbWFpbCA9IHByb2R1Y3QuZ2lmdENhcmRSZWNpcGllbnRFbWFpbDtcclxuICAvLyAgICAgcC5naWZ0Q2FyZFJlY2lwaWVudE5hbWUgPSBwcm9kdWN0LmdpZnRDYXJkUmVjaXBpZW50TmFtZTtcclxuICAgICAgXHJcbiAgICAgIFxyXG4gIC8vICAgICBpZihwLmZ1bGxmaWxtZW50SWQgIT0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQpXHJcbiAgLy8gICAgIHtcclxuICAvLyAgICAgICBwLmlzV2ViT3JkZXIgPSB0cnVlO1xyXG4gIC8vICAgICB9XHJcbiAgICAgIFxyXG4gIC8vICAgICBpZiAocHJvZHVjdC5pdGVtRGlzY291bnRzKSB7XHJcbiAgLy8gICAgICAgcC5pdGVtRGlzY291bnRzID0gcHJvZHVjdC5pdGVtRGlzY291bnRzIGFzIEl0ZW1EaXNjb3VudDtcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgLy8gaWYoIXAuaXRlbURpc2NvdW50cyl7XHJcbiAgLy8gICAgIC8vICAgY29uc29sZS5sb2cocC5pdGVtRGlzY291bnRzKTtcclxuXHJcbiAgLy8gICAgIC8vICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRyYW5zYWN0aW9uRGlzY291bnRBbmRQcm9tb3Rpb25Qcm9kdWN0b3J0aW9uQ2FsY3VsYXRpb24oYmFza2V0KTtcclxuICAvLyAgICAgLy8gfVxyXG4gIC8vICAgICBwLnJlZnVuZFByb21vdGlvbmFsUXVhbnRpdHkgPSBwcm9kdWN0LnJlZnVuZGVkUHJvbW90aW9uYWxRdWFudGl0eSA/IHByb2R1Y3QucmVmdW5kZWRQcm9tb3Rpb25hbFF1YW50aXR5IDogMDtcclxuXHJcbiAgLy8gICAgIGlmIChwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkpIHtcclxuICAvLyAgICAgICBwLnF1YW50aXR5ID0gcC5xdWFudGl0eSAtIHByb2R1Y3QucmVmdW5kZWRRdWFudGl0eTtcclxuICAvLyAgICAgICBwLnRvdGFsTGluZVByaWNlID0gKHAucXVhbnRpdHkgKiBwcm9kdWN0LnByaWNlKTtcclxuICAvLyAgICAgICBwLnRvdGFsID0gcC50b3RhbExpbmVQcmljZTtcclxuICAvLyAgICAgICAvLyBwLnJlZnVuZFByb21vdGlvbmFsUXVhbnRpdHkgPSBwcm9kdWN0LnJlZnVuZGVkUHJvbW90aW9uYWxRdWFudGl0eTtcclxuICAvLyAgICAgICBwLnJlZnVuZGVkID0gcHJvZHVjdC5yZWZ1bmRlZDtcclxuICAvLyAgICAgICBwLmlzTGFzdEV4Y2hhbmdlZCA9IHByb2R1Y3QuaXNMYXN0RXhjaGFuZ2VkO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGlmIChwcm9kdWN0LmV4Y2hhbmdlKSB7XHJcbiAgLy8gICAgICAgcC5leGNoYW5nZSA9IHByb2R1Y3QuZXhjaGFuZ2U7XHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCAmJlxyXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50Lmxlbmd0aCA+IDBcclxuICAvLyAgICAgKSB7XHJcblxyXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmZvckVhY2goKGxpbmVEaXNjb3VudDogeyBpdGVtTGluZUlkOiB7IHRvU3RyaW5nOiAoKSA9PiBhbnk7IH07IGRpc2NvdW50ZWRMaW5lUHJpY2U6IGFueTsgfSkgPT4ge1xyXG5cclxuICAvLyAgICAgICAgIGlmIChwcm9kdWN0Lml0ZW1MaW5lSWQgPT09IGxpbmVEaXNjb3VudC5pdGVtTGluZUlkLnRvU3RyaW5nKCkgJiYgcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ID4gMCkge1xyXG4gIC8vICAgICAgICAgICBwLmxpbmVEaXNjb3VudCA9IE9iamVjdC5hc3NpZ24oe30sIGxpbmVEaXNjb3VudCk7XHJcbiAgLy8gICAgICAgICAgIHAubGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgPSBwLmxpbmVEaXNjb3VudC51bml0UHJpY2UgKiBwLnF1YW50aXR5XHJcbiAgLy8gICAgICAgICAgIHAubGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50ID0gcC50b3RhbCAtIHAubGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2VcclxuICAvLyAgICAgICAgICAgcC50b3RhbCA9IHAubGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2U7XHJcbiAgLy8gICAgICAgICB9IGVsc2UgaWYgKHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gbGluZURpc2NvdW50Lml0ZW1MaW5lSWQudG9TdHJpbmcoKSkge1xyXG4gIC8vICAgICAgICAgICBwLmxpbmVEaXNjb3VudCA9IGxpbmVEaXNjb3VudDtcclxuICAvLyAgICAgICAgICAgcC50b3RhbCA9IGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24gJiZcclxuICAvLyAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMFxyXG4gIC8vICAgICApIHtcclxuICAvLyAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24uZm9yRWFjaCgobGluZVByb21vdGlvbjogeyBpdGVtTGluZUlkOiB7IHRvU3RyaW5nOiAoKSA9PiBhbnk7IH07IHJlZnVuZGVkOiBhbnk7IH0pID0+IHtcclxuICAvLyAgICAgICAgIGlmIChwcm9kdWN0Lml0ZW1MaW5lSWQgPT09IGxpbmVQcm9tb3Rpb24uaXRlbUxpbmVJZC50b1N0cmluZygpICYmICFsaW5lUHJvbW90aW9uLnJlZnVuZGVkKSB7XHJcbiAgLy8gICAgICAgICAgIHAubGluZVByb21vdGlvbnMgPSBsaW5lUHJvbW90aW9uO1xyXG4gIC8vICAgICAgICAgICBwLnRvdGFsID0gcC5saW5lUHJvbW90aW9ucy5wcm9tb3Rpb25MaW5lUHJpY2U7XHJcbiAgLy8gICAgICAgICAgIHAudG90YWwgPSBwLnRvdGFsIC0gKHByb2R1Y3QucmVmdW5kZWRUb3RhbCA/IE1hdGguYWJzKHByb2R1Y3QucmVmdW5kZWRUb3RhbCkgOiAwKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgcC5yZWZ1bmRlZFF1YW50aXR5ID0gMDtcclxuICAvLyAgICAgcC5yZWZ1bmRlZFRvdGFsID0gMDtcclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93biAmJlxyXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmxlbmd0aCA+IDBcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZm9yRWFjaCgodGF4TGluZTogeyBpdGVtTGluZUlkOiB7IHRvU3RyaW5nOiAoKSA9PiBhbnk7IH07IFZBVDogYW55OyBWQVRDb2RlOiBhbnk7IH0pID0+IHtcclxuICAvLyAgICAgICAgIGlmIChwcm9kdWN0Lml0ZW1MaW5lSWQgPT09IHRheExpbmUuaXRlbUxpbmVJZC50b1N0cmluZygpKSB7XHJcbiAgLy8gICAgICAgICAgIHAuc2VsZWN0ZWRWQVQgPSB0YXhMaW5lLlZBVDtcclxuICAvLyAgICAgICAgICAgcC5zZWxlY3RlZFZBVENvZGUgPSB0YXhMaW5lLlZBVENvZGU7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIGlmIChwLnF1YW50aXR5ID4gMCkge1xyXG4gIC8vICAgICAgIGJhc2tldC5wcm9kdWN0cy5wdXNoKHApO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIC8vIHByb2R1Y3QuaXRlbURpc2NvdW50c1xyXG4gIC8vICAgaWYgKCFiYXNrZXQucHJvZHVjdHNbMF0uaGFzT3duUHJvcGVydHkoJ2l0ZW1EaXNjb3VudHMnKSkge1xyXG4gIC8vICAgICBiYXNrZXQgPSB0aGlzLmdldFRyYW5zYWN0aW9uRGlzY291bnRBbmRUcmFuc2FjdGlvblByb21vdGlvblBvcnRpb24oYmFza2V0KTtcclxuXHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgY29uc29sZS5sb2coXCJlYmFza2V0IDogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgIDpuZXcgY3JlYXRlZCByZWZ1bmRlZCBiYXNrZXRcIiwgSlNPTi5zdHJpbmdpZnkoYmFza2V0KSlcclxuICAvLyAgIGJhc2tldC5xdWFudGl0eSA9IGJhc2tldC5wcm9kdWN0cy5yZWR1Y2UoXHJcbiAgLy8gICAgIChuOiBhbnksIHsgcXVhbnRpdHkgfTogYW55KSA9PiBuICsgcXVhbnRpdHksXHJcbiAgLy8gICAgIDBcclxuICAvLyAgICk7XHJcbiAgLy8gICBiYXNrZXQudG90YWwgPSB0aGlzLmdldFRvdGFsV2l0aExpbmVEaXNjb3VudEFuZExpbmVQcm9tb3Rpb25BcHBsaWVkKGJhc2tldCk7XHJcbiAgLy8gICBiYXNrZXQuYmFza2V0VG90YWwgPSBiYXNrZXQudG90YWw7XHJcbiAgLy8gICBiYXNrZXQuYmFza2V0VG90YWwgPSBiYXNrZXQuYmFza2V0VG90YWwgLSB0aGlzLmdldFRvdGFsRGlzY291bnRXaXRoVHJhbnNhY3Rpb25EaXNjb3VudHNBbmRQcm9tb3Rpb25zKGJhc2tldCk7XHJcbiAgLy8gICBjb25zb2xlLmxvZyhcclxuICAvLyAgICAgXCJlYmFza2V0IDogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgOiB1cGRhdGUgQmFza2V0IFRvdGFsOiBhZnRlciBwcm9tb3Rpb24gOmJhc2tldFRvdGFsXCIsXHJcbiAgLy8gICAgIGJhc2tldC5iYXNrZXRUb3RhbFxyXG4gIC8vICAgKTtcclxuXHJcbiAgLy8gICBjb25zb2xlLmxvZyhcclxuICAvLyAgICAgXCJlOmJhc2tldCA6VHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgOiBiYXNrZXREZXRhaWxzIHVwZGF0ZWQgdmFsdWVzXCIsXHJcbiAgLy8gICAgIEpTT04uc3RyaW5naWZ5KGJhc2tldClcclxuICAvLyAgICk7XHJcbiAgLy8gICByZXR1cm4gYmFza2V0O1xyXG4gIC8vIH1cclxuXHJcblxyXG4gIGdldFRyYW5zYWN0aW9uRGlzY291bnRBbmRUcmFuc2FjdGlvblByb21vdGlvblBvcnRpb24oYmFza2V0OmFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCAmJlxyXG4gICAgICBiYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQuZm9yRWFjaCgoZGlzY291bnQ6IHsgaXRlbUxpbmVJZHM6IGFueTsgfSkgPT4ge1xyXG4gICAgICAgIGlmICghZGlzY291bnQuaXRlbUxpbmVJZHMpIHtcclxuICAgICAgICAgIGRpc2NvdW50Lml0ZW1MaW5lSWRzID0gYmFza2V0LnByb2R1Y3RzLm1hcCgocHJvZHVjdDogeyBpdGVtTGluZUlkOiBhbnk7IH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb2R1Y3QuaXRlbUxpbmVJZFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJhc2tldCA9IHRoaXMuYmFza2V0U2VydmljZS50cmFuc2FjdGlvbkRpc2NvdW50UHJvZHVjdFBvcnRpb25DYWxjKGJhc2tldCwgZGlzY291bnQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uICYmXHJcbiAgICAgIGJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLmZvckVhY2goKHRQcm9tb3Rpb246IHsgaXRlbUxpbmVJZHM6IGFueTsgfSkgPT4ge1xyXG4gICAgICAgIGlmICghdFByb21vdGlvbi5pdGVtTGluZUlkcykge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gYmFza2V0LnByb2R1Y3RzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW06IHsgZXhjbHVkZVByb21vdGlvbjogYm9vbGVhbjsgfSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLmV4Y2x1ZGVQcm9tb3Rpb24gPT09IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0UHJvbW90aW9uLml0ZW1MaW5lSWRzID1cclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhLm1hcCgocHJvZHVjdDogeyBpdGVtTGluZUlkOiBhbnk7IH0pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gcHJvZHVjdC5pdGVtTGluZUlkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiYXNrZXQgPSB0aGlzLmJhc2tldFNlcnZpY2UudHJhbnNhY3Rpb25Qcm9tb3Rpb25Qcm9kdWN0UG9ydGlvbkNhbGMoYmFza2V0LCB0UHJvbW90aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJhc2tldDtcclxuICB9XHJcblxyXG5cclxuICBnZXRUb3RhbERpc2NvdW50V2l0aFRyYW5zYWN0aW9uRGlzY291bnRzQW5kUHJvbW90aW9ucyhiYXNrZXREZXRhaWxzOiBhbnkpIHtcclxuXHJcbiAgICBsZXQgZGlzY291bnRUb3RhbCA9IDA7XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldERldGFpbHMudHJhbnNhY3Rpb25Qcm9tb3Rpb24gJiZcclxuICAgICAgYmFza2V0RGV0YWlscy50cmFuc2FjdGlvblByb21vdGlvbi5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgZGlzY291bnRUb3RhbCArPSBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uUHJvbW90aW9uLnJlZHVjZShcclxuICAgICAgICAobjogYW55LCB7IHByb21vdGlvbkFtb3VudCB9OiBhbnkpID0+IG4gKyBwcm9tb3Rpb25BbW91bnQsXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQgJiZcclxuICAgICAgYmFza2V0RGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDBcclxuICAgICkge1xyXG5cclxuICAgICAgZGlzY291bnRUb3RhbCArPSBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQucmVkdWNlKFxyXG4gICAgICAgIChuOiBhbnksIHsgZGlzY291bnRBbW91bnQgfTogYW55KSA9PiBuICsgZGlzY291bnRBbW91bnQsXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG5cclxuXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcImViYXNrZXQgOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciA6IFRyYW5zYWN0aW9uIGRpc2NvdW50IFRvdGFsOlwiLCBkaXNjb3VudFRvdGFsKTtcclxuXHJcbiAgICByZXR1cm4gZGlzY291bnRUb3RhbDtcclxuICB9XHJcblxyXG5cclxuICBhcHBlbmRDdXJyZW5jeVN5bWJvbChjdXJyZW5jeTogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAvLyAgdmFsdWU9dGhpcy5kZWNpbWFscGlwZS50cmFuc2Zvcm0odmFsdWUsJzEuMicpO1xyXG4gICAgaWYgKHZhbHVlID49IDApIHtcclxuICAgICAgY29uc3QgcmV0dXJudmFsID0gY3VycmVuY3kgKyB2YWx1ZTtcclxuICAgICAgY29uc29sZS5sb2cocmV0dXJudmFsLCBcImViYXNrZXQ6IGFkZCBjdXJyZW5jeSB3aXRoIHZhbHVlXCIpO1xyXG4gICAgICByZXR1cm4gcmV0dXJudmFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcmV0dXJudmFsID0gXCItXCIgKyAoY3VycmVuY3kgKyB2YWx1ZSAqIC0xKTtcclxuICAgICAgY29uc29sZS5sb2cocmV0dXJudmFsLCBcIi0oY3VycmVuY3krKHZhbHVlKi0xKSlcIik7XHJcbiAgICAgIHJldHVybiByZXR1cm52YWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAvKipcclxuICAvLyAgKiBVcGRhdGVzIHRvdGFsIHJlZnVuZFxyXG4gIC8vICAqIEByZXR1cm5zIHRvdGFsIHJlZnVuZFxyXG4gIC8vICAqL1xyXG4gIC8vIHVwZGF0ZVRvdGFsUmVmdW5kKCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4ge1xyXG4gIC8vICAgICBwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gIC8vICAgICBwcm9kdWN0LnJlZnVuZGVkVG90YWwgPSBwcm9kdWN0LnRvdGFsTGluZVByaWNlICogLTE7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFxyXG4gIC8vICAgICAgIFwiZWJhc2tldDogVHJhbnNhY3Rpb24gcHJpY2Ugb3ZlcnJpZGUgOlwiLFxyXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50XHJcbiAgLy8gICAgICk7XHJcblxyXG4gIC8vICAgICBpZiAoXHJcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uICYmXHJcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmxlbmd0aCA+IDBcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmZvckVhY2goKGxpbmVQcm9tb3Rpb24pID0+IHtcclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gIC8vICAgICAgICAgICBcIlByb21vdGlvbjogYmFza2V0IGxpbmVQcm9tb3Rpb24gOiBcIixcclxuICAvLyAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uXHJcbiAgLy8gICAgICAgICApO1xyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgLy8gICAgICAgICAgIFwibGluZVByb21vdGlvbi5pdGVtTGluZUlkLnRvU3RyaW5nKCkgOiBcIixcclxuICAvLyAgICAgICAgICAgbGluZVByb21vdGlvbi5pdGVtTGluZUlkLnRvU3RyaW5nKClcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcclxuICAvLyAgICAgICAgICAgXCJjb25kaXRpb24gOiBcIiArXHJcbiAgLy8gICAgICAgICAgIChwcm9kdWN0Lml0ZW1MaW5lSWQgPT09IGxpbmVQcm9tb3Rpb24uaXRlbUxpbmVJZC50b1N0cmluZygpKVxyXG4gIC8vICAgICAgICAgKTtcclxuXHJcbiAgLy8gICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkID09PSBsaW5lUHJvbW90aW9uLml0ZW1MaW5lSWQudG9TdHJpbmcoKSkge1xyXG4gIC8vICAgICAgICAgICBwcm9kdWN0LnJlZnVuZGVkVG90YWwgPVxyXG4gIC8vICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb24ucHJvbW90aW9uTGluZVByaWNlICogLTE7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH0gZWxzZVxyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ICYmXHJcbiAgLy8gICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5sZW5ndGggPiAwXHJcbiAgLy8gICAgICAgKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5mb3JFYWNoKChsaW5lRGlzY291bnQpID0+IHtcclxuICAvLyAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgLy8gICAgICAgICAgICAgXCJwcm9kdWN0Lml0ZW1MaW5lSWQgOiBcIiArXHJcbiAgLy8gICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnRcclxuICAvLyAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgLy8gICAgICAgICAgICAgXCJsaW5lRGlzY291bnQuaXRlbUxpbmVJZC50b1N0cmluZygpIDogXCIgK1xyXG4gIC8vICAgICAgICAgICAgIGxpbmVEaXNjb3VudC5pdGVtTGluZUlkLnRvU3RyaW5nKClcclxuICAvLyAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgLy8gICAgICAgICAgICAgXCJjb25kaXRpb24gOiBcIiArXHJcbiAgLy8gICAgICAgICAgICAgKHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gbGluZURpc2NvdW50Lml0ZW1MaW5lSWQudG9TdHJpbmcoKSlcclxuICAvLyAgICAgICAgICAgKTtcclxuXHJcbiAgLy8gICAgICAgICAgIGlmIChwcm9kdWN0Lml0ZW1MaW5lSWQgPT09IGxpbmVEaXNjb3VudC5pdGVtTGluZUlkLnRvU3RyaW5nKCkpIHtcclxuICAvLyAgICAgICAgICAgICBwcm9kdWN0LnJlZnVuZGVkVG90YWwgPSBsaW5lRGlzY291bnQudW5pdFByaWNlICogcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ICogLTE7XHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgIH1cclxuXHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiUHJvZHVjdCBkZXNjcmlwdGlvbiA6XCIgKyBwcm9kdWN0LmRlc2NyaXB0aW9uKTtcclxuICAvLyAgICAgY29uc29sZS5sb2coXCJQcm9kdWN0IHRvdGFsIDpcIiArIHByb2R1Y3QucmVmdW5kZWRUb3RhbCk7XHJcbiAgLy8gICAgIC8vIHByb2R1Y3QuZGlzcGxheXJlZnVuZGVkYW1vdW50PXRoaXMuYXBwZW5kQ3VycmVuY3lTeW1ib2woQ1VSUkVOQ1lbdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeV0scHJvZHVjdC5yZWZ1bmRlZFRvdGFsKTtcclxuICAvLyAgICAgLy8gY29uc29sZS5sb2cocHJvZHVjdC5kaXNwbGF5cmVmdW5kZWRhbW91bnQsXCJkaXNwbGF5cmVmdW5kZWRhbW91bnRcIik7XHJcbiAgLy8gICAgIHByb2R1Y3QucmVmdW5kZWQgPSB0cnVlO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBjb25zdCBiYXNrZXR0b3RhbCA9ICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCAqPSAtMSk7XHJcbiAgLy8gICAvLyB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5kaXNwbGF5YmFza2V0dG90YWw9dGhpcy5hcHBlbmRDdXJyZW5jeVN5bWJvbChDVVJSRU5DWVt0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5XSwgYmFza2V0dG90YWwpO1xyXG4gIC8vICAgY29uc3Qgc2FsZXRvdGFsID0gKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCAqPSAtMSk7XHJcbiAgLy8gICAvLyB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5kaXNwbGF5c2FsZXRvdGFsID0gdGhpcy5hcHBlbmRDdXJyZW5jeVN5bWJvbChDVVJSRU5DWVt0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5XSwgc2FsZXRvdGFsKTtcclxuICAvLyAgICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCAqPSAtMSk7XHJcbiAgLy8gICByZXR1cm4gdGhpcztcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhbGUgVG90YWxcclxuICAgKiBAcGFyYW0gYmFza2V0RGV0YWlsc1xyXG4gICAqIEByZXR1cm5zIFNhbGUgVG90YWxcclxuICAgKi9cclxuICB1cGRhdGVTYWxlVG90YWwoYmFza2V0RGV0YWlsczogeyBwcm9kdWN0czogYW55W107IH0pIHtcclxuICAgIGNvbnN0IHNhbGVUb3RhbCA9IGJhc2tldERldGFpbHMucHJvZHVjdHMucmVkdWNlKFxyXG4gICAgICAobjogYW55LCB7IHRvdGFsTGluZVByaWNlIH06IGFueSkgPT4gbiArIHRvdGFsTGluZVByaWNlLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHNhbGVUb3RhbFxyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxXaXRoTGluZURpc2NvdW50QW5kTGluZVByb21vdGlvbkFwcGxpZWQoYmFza2V0RGV0YWlsczogeyBwcm9kdWN0czogYW55OyB9KTogbnVtYmVyIHtcclxuICAgIGxldCBzYWxldG90YWw6IG51bWJlciA9IDAuMDtcclxuICAgIGZvciAobGV0IHByb2R1Y3Qgb2YgYmFza2V0RGV0YWlscy5wcm9kdWN0cykge1xyXG4gICAgICAvLyBpZiAocHJvZHVjdC5saW5lUHJvbW90aW9ucykge1xyXG4gICAgICAvLyAgIHNhbGV0b3RhbCArPSBwcm9kdWN0LmxpbmVQcm9tb3Rpb25zLnByb21vdGlvbkxpbmVQcmljZTtcclxuICAgICAgLy8gfSBlbHNlIGlmIChcclxuICAgICAgLy8gICBwcm9kdWN0LmxpbmVEaXNjb3VudCAmJlxyXG4gICAgICAvLyAgICFwcm9kdWN0LmxpbmVQcm9tb3Rpb25zXHJcbiAgICAgIC8vICkge1xyXG4gICAgICAvLyAgIHNhbGV0b3RhbCArPVxyXG4gICAgICAvLyAgICAgcHJvZHVjdC5xdWFudGl0eSAqIE51bWJlcihwcm9kdWN0LmxpbmVEaXNjb3VudC51bml0UHJpY2UudG9GaXhlZCgyKSk7XHJcbiAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgc2FsZXRvdGFsICs9XHJcbiAgICAgIC8vICAgICBwcm9kdWN0LnF1YW50aXR5ICogTnVtYmVyKHByb2R1Y3Quc2VsZWN0ZWRQcmljZS50b0ZpeGVkKDIpKTtcclxuICAgICAgLy8gfVxyXG4gICAgICBzYWxldG90YWwgKz0gcHJvZHVjdC50b3RhbDtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJlLWJhc2tldDp1cGRhdGUgcHJvZHVjdCBUb3RhbDpcIiArIHNhbGV0b3RhbCxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeShwcm9kdWN0KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNhbGV0b3RhbDtcclxuICB9XHJcblxyXG4gIGdldFJlZnVuZGVkVG90YWxXaXRoUXVhbnRpdHkoYmFza2V0RGV0YWlsczogeyBwcm9kdWN0czogc3RyaW5nIHwgYW55W107IH0pOiBudW1iZXIge1xyXG4gICAgbGV0IHF1YW50aXR5ID0gMDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBiYXNrZXREZXRhaWxzLnByb2R1Y3RzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBwcm9kdWN0OiBhbnkgPSBiYXNrZXREZXRhaWxzLnByb2R1Y3RzW2luZGV4XTtcclxuXHJcbiAgICAgIGlmICghcHJvZHVjdC5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uKSB7XHJcblxyXG4gICAgICAgIHF1YW50aXR5ID0gcXVhbnRpdHkgKyBwcm9kdWN0LnF1YW50aXR5O1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBxdWFudGl0eSA9IHF1YW50aXR5ICsgKHByb2R1Y3QucXVhbnRpdHkgLSBwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkpO1xyXG5cclxuICAgICAgICAvLyBiYXNrZXREZXRhaWxzLnRvdGFsID0gYmFza2V0RGV0YWlscy50b3RhbCArIHByb2R1Y3QucmVmdW5kZWRUb3RhbDtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBxdWFudGl0eTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNjb3VudCBUb3RhbFxyXG4gICAqIEByZXR1cm5zIERpc2NvdW50IFRvdGFsXHJcbiAgICovXHJcbiAgdXBkYXRlRGlzY291bnRUb3RhbCgpIHtcclxuICAgIGxldCByZWZ1bmRUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnJlZnVuZFRvdGFsID8gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkucmVmdW5kVG90YWwgOiAwO1xyXG4gICAgY29uc29sZS5pbmZvKFwiZS1iYXNrZXQ6IHRyYW5zYWN0aW9uIGJ1aWxkZXI6IHJlZnVuZFRvdGFsXCIsIEpTT04uc3RyaW5naWZ5KHJlZnVuZFRvdGFsKSxcclxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkpKTtcclxuICAgIGNvbnN0IGRpc2NvdW50VG90YWwgPVxyXG4gICAgICBNYXRoLmFicyhcclxuICAgICAgICBNYXRoLmFicyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5zYWxlVG90YWwpIC1cclxuICAgICAgICAoXHJcbiAgICAgICAgICBNYXRoLmFicyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCkgKyBNYXRoLmFicyhyZWZ1bmRUb3RhbClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICBjb25zb2xlLmxvZyhcImUtYmFza2V0OiB0cmFuc2FjdGlvbiBidWlsZGVyOiBkaXNjb3VudFRvdGFsXCIsIEpTT04uc3RyaW5naWZ5KGRpc2NvdW50VG90YWwpKVxyXG4gICAgcmV0dXJuIE51bWJlcihkaXNjb3VudFRvdGFsLnRvRml4ZWQoMikpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUmVhc29uQ29kZShyZWFzb25Db2RlOiB7XHJcbiAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgfSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5yZWFzb25Db2RlID0gcmVhc29uQ29kZS5jb2RlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnJlYXNvbkRlc2NyaXB0aW9uID0gcmVhc29uQ29kZS5uYW1lO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVNYW5hZ2VyT3ZlcnJpZGUoXHJcbiAgICB1c2Vyb3ZlcnJpZGU6IFVzZXJPdmVycmlkZVxyXG4gICk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vdmVycmlkZSA9IHVzZXJvdmVycmlkZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVXNlcklEKFxyXG4gICAgdXNlcklEOiBzdHJpbmdcclxuICApOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlcklkID0gdXNlcklEO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2VyTmFtZShuYW1lOiBhbnkpIDogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVzZXJOYW1lID0gbmFtZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG5cclxuICB9XHJcbiAgXHJcbiAgYWRkQ3VzdG9tZXJEZXRhaWxzKGN1c3RvbWVyRGV0YWlsOiBDdXN0b21lcik6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXN0b21lciA9IGN1c3RvbWVyRGV0YWlsO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUYXhCcmVha2Rvd24oYmFza2V0RGV0YWlsczogQmFza2V0KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgLy8gbGV0IHRyYW5zYWN0aW9uRGlzY291bnRUb3RhbCA9IDA7XHJcbiAgICBsZXQgdGF4QnJlYWtkb3duOiBUYXhCcmVha2Rvd24gPSB7XHJcbiAgICAgIHRheExpbmVzOiBbXSxcclxuICAgICAgdG90YWxUYXhhYmxlQW1vdW50OiAwLFxyXG4gICAgfTtcclxuXHJcblxyXG5cclxuICAgIC8vIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50LmZvckVhY2goKGRpc2NvdW50KSA9PiB7XHJcbiAgICAvLyAgICAgdHJhbnNhY3Rpb25EaXNjb3VudFRvdGFsICs9IGRpc2NvdW50LmRpc2NvdW50QW1vdW50O1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5mb3JFYWNoKFxyXG4gICAgLy8gICAgIChwcm9tb3Rpb24pID0+IHtcclxuICAgIC8vICAgICAgIHRyYW5zYWN0aW9uRGlzY291bnRUb3RhbCArPSBwcm9tb3Rpb24ucHJvbW90aW9uQW1vdW50O1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBiYXNrZXREZXRhaWxzLnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGF4TGluZTogVGF4TGluZSA9IHtcclxuICAgICAgICBpdGVtTGluZUlkOiBwcm9kdWN0Lml0ZW1MaW5lSWQsXHJcbiAgICAgICAgVkFUOiBwcm9kdWN0LnNlbGVjdGVkVkFUID8gcHJvZHVjdC5zZWxlY3RlZFZBVCA6IDAsXHJcbiAgICAgICAgVkFUQ29kZTogcHJvZHVjdC5zZWxlY3RlZFZBVENvZGUsXHJcbiAgICAgICAgdGF4TGluZVRvdGFsOiAwLFxyXG4gICAgICAgIHRheGFibGVBbW91bnQ6IHByb2R1Y3QudG90YWwsXHJcbiAgICAgICAgUHJlVGF4OiAwXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2R1Y3QgY29udHJpYnV0aW9uIDogaXRlbSBsaW5lIElEIDpcIiwgcHJvZHVjdC5pdGVtTGluZUlkLFxyXG4gICAgICAgIFwidGF4IGxpbmUgOlwiLCBKU09OLnN0cmluZ2lmeSh0YXhMaW5lKSk7XHJcblxyXG4gICAgICAvLyBzdGVwIDFcclxuICAgICAgLy8gaWYgVHJhbnNhY3Rpb24gRGlzY291bnQgYW5kL29yIHByb21vdGlvbiBhcHBsaWVkLCBmaW5kIG5ldCBzZWxsaW5nIHByaWNlIG9mIGVhY2ggcHJvZHVjdCBhcyB0YXhhYmxlYW1vdW50XHJcbiAgICAgIC8vIGlmICh0cmFuc2FjdGlvbkRpc2NvdW50VG90YWwgPiAwKSB7XHJcbiAgICAgIHByb2R1Y3QgPSB0aGlzLmJhc2tldFNlcnZpY2UudmFsaWRhdGVQcm9kdWN0SXRlbURpc2NvdW50KHByb2R1Y3QpO1xyXG5cclxuICAgICAgY29uc3QgcHJvZHVjdENvbnRyaWJ1dGlvbkluVG90YWwgPVxyXG4gICAgICAgIHByb2R1Y3QuaXRlbURpc2NvdW50cy50cm5EaXNjb3VudHNQb3J0aW9uICtcclxuICAgICAgICBwcm9kdWN0Lml0ZW1EaXNjb3VudHMudHJuUHJvbW90aW9uc1BvcnRpb24gLVxyXG4gICAgICAgIHByb2R1Y3QuaXRlbURpc2NvdW50cy5yZWZ1bmRQb3J0aW9uO1xyXG4gICAgICAvLyAgdHArdGQtcnA7XHJcblxyXG4gICAgICBjb25zb2xlLmluZm8oXCJQcm9kdWN0IGNvbnRyaWJ1dGlvbiA6IGl0ZW0gbGluZSBJRCA6XCIsIHByb2R1Y3QuaXRlbUxpbmVJZCxcclxuICAgICAgICBcImNvbnRyaWJ1dGlvbiA6XCIsIEpTT04uc3RyaW5naWZ5KHByb2R1Y3RDb250cmlidXRpb25JblRvdGFsKSk7XHJcbiAgICAgIC8vIGNhbGN1bGF0ZSBuZXQgc2VsbGluZyBwcmljZSBhZnRlciBhcHBseWluZyB0cmFuc2FjdGlvbiBkaXNjb3VudCBhcyBwZXIgcHJvZHVjdCBjb250cmlidXRpb25cclxuICAgICAgdGF4TGluZS50YXhhYmxlQW1vdW50IC09IHByb2R1Y3RDb250cmlidXRpb25JblRvdGFsO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICAvL3N0ZXAgMiAtIGZpbmQgcHJlIHRheFxyXG4gICAgICB0YXhMaW5lLlByZVRheCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKCh0YXhMaW5lLnRheGFibGVBbW91bnQgKiAxMDApIC8gKDEwMCArIHRheExpbmUuVkFUKSk7XHJcblxyXG4gICAgICAvL3N0ZXAgMyAtIFVwZGF0ZSB0YXhicmVha2Rvd25cclxuICAgICAgdGF4QnJlYWtkb3duLnRvdGFsVGF4YWJsZUFtb3VudCArPSB0YXhMaW5lLnRheGFibGVBbW91bnQ7XHJcbiAgICAgIHRheExpbmUudGF4YWJsZUFtb3VudCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRheExpbmUudGF4YWJsZUFtb3VudCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBzdGVwIDQgLSB1cGRhdGUgdGF4IExpbmUgdG90YWxcclxuICAgICAgdGF4TGluZS50YXhMaW5lVG90YWwgPSAgdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGF4TGluZS50YXhhYmxlQW1vdW50IC0gdGF4TGluZS5QcmVUYXgpO1xyXG4gICAgICB0YXhCcmVha2Rvd24udGF4TGluZXMucHVzaCh0YXhMaW5lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRheEJyZWFrZG93bi50b3RhbFRheGFibGVBbW91bnQgPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMih0YXhCcmVha2Rvd24udG90YWxUYXhhYmxlQW1vdW50KTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duID0gdGF4QnJlYWtkb3duO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUb3RhbFRheFN1bW1hcnkoKTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiVG90YWwgVGF4IFN1bW1lcnkgUmVxdWVzdCA6XCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duKSk7XHJcblxyXG5cclxuICAgIGxldCB0b3RhbFRheFN1bW1hcnlBcnJheTogVG90YWxUYXhTdW1tYXJ5W10gPSBbXVxyXG4gICAgbGV0IHRvdGFsVGF4U3VtbWFyeUdyb3VwID0gW11cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlRheCBMaW5lcyBmb3IgVG90YWwgVGF4IFN1bW1lcnkgOlwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcykpO1xyXG5cclxuXHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5mb3JFYWNoKChlbGVtZW50OiB7IFZBVENvZGU6IGFueTsgVkFUOiBhbnk7IFByZVRheDogYW55OyB0YXhMaW5lVG90YWw6IGFueTsgfSkgPT4ge1xyXG4gICAgICBsZXQgVGF4U3VtbWFyeTogVG90YWxUYXhTdW1tYXJ5ID0ge1xyXG4gICAgICAgIFZBVENvZGU6IFwiXCIsXHJcbiAgICAgICAgVkFUOiAtMTIzNDUsXHJcbiAgICAgICAgUHJlVGF4U3VtOiAwLFxyXG4gICAgICAgIFRheFN1bTogMCxcclxuICAgICAgICBUWHJhdGVTdW06IDBcclxuICBcclxuICAgICAgfTtcclxuICAgICAgIFRheFN1bW1hcnkuVkFUQ29kZSA9IGVsZW1lbnQuVkFUQ29kZTtcclxuICAgICAgICBUYXhTdW1tYXJ5LlZBVCA9IGVsZW1lbnQuVkFUOyAgICAgICAgXHJcbiAgICAgICAgVGF4U3VtbWFyeS5QcmVUYXhTdW0gPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMihlbGVtZW50LlByZVRheCk7XHJcbiAgICAgICAgVGF4U3VtbWFyeS5UYXhTdW0gPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMihlbGVtZW50LnRheExpbmVUb3RhbCk7XHJcbiAgICAgICAgVGF4U3VtbWFyeS5UWHJhdGVTdW0gPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMihUYXhTdW1tYXJ5LlByZVRheFN1bSArIFRheFN1bW1hcnkuVGF4U3VtKTsgICAgICBcclxuICAgICAgICB0b3RhbFRheFN1bW1hcnlBcnJheS5wdXNoKFRheFN1bW1hcnkpO1xyXG4gICAgfSlcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIlRvdGFsIFRheCBTdW1tZXJ5ICBXaXRob3V0IEdyb3VwZWQgOiBcIiwgSlNPTi5zdHJpbmdpZnkodG90YWxUYXhTdW1tYXJ5QXJyYXkpKTtcclxuICAgIFxyXG4gICAgdG90YWxUYXhTdW1tYXJ5R3JvdXAgPSB0b3RhbFRheFN1bW1hcnlBcnJheS5yZWR1Y2UoKHByZXBhcmVkQXJyYXk6YW55LGN1cnJlbnRPYmopID0+IHtcclxuXHJcbiAgICAgIGxldCBpbmQgPSBwcmVwYXJlZEFycmF5LmZpbmRJbmRleCgoeDogeyBWQVQ6IGFueTsgfSkgPT4geC5WQVQgPT09IGN1cnJlbnRPYmouVkFUKTtcclxuICAgICAgaWYoaW5kID09PSAtMSl7XHJcbiAgICAgICAgcHJlcGFyZWRBcnJheS5wdXNoKGN1cnJlbnRPYmopXHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVkFUQ29kZSA9IGN1cnJlbnRPYmouVkFUQ29kZTtcclxuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVkFUID0gY3VycmVudE9iai5WQVQ7XHJcbiAgICAgICAgcHJlcGFyZWRBcnJheVtpbmRdLlByZVRheFN1bSArPSBjdXJyZW50T2JqLlByZVRheFN1bTtcclxuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVGF4U3VtICs9IGN1cnJlbnRPYmouVGF4U3VtO1xyXG4gICAgICAgIHByZXBhcmVkQXJyYXlbaW5kXS5UWHJhdGVTdW0gKz0gY3VycmVudE9iai5UWHJhdGVTdW07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByZXBhcmVkQXJyYXk7XHJcbiAgICB9LFtdKVxyXG4gICAgXHJcbiAgICBjb25zb2xlLmxvZyhcIlRvdGFsICBUYXggU3VtbWVyIEdyb3VwIDpcIix0b3RhbFRheFN1bW1hcnlHcm91cCk7XHJcblxyXG5cclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudG90YWxUYXhTdW1tYXJ5ID0gdG90YWxUYXhTdW1tYXJ5R3JvdXA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zYWN0aW9uSWRcclxuICAgKiBAcmV0dXJucyBPcmlnaW5hbFRyYW5zYWN0aW9uSWRcclxuICAgKi9cclxuICBhZGRPcmlnaW5hbFRyYW5zSWQodHJhbkRvYzpUcmFuc2FjdGlvbkRvY3VtZW50KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xyXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlJFRlVORCB8fCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX1JFRlVORCB8fCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX0VYQ0hBTkdFKSB7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcmlnaW5hbFRyYW5zSWQgPSB0cmFuRG9jLnRyYW5zYWN0aW9uSWQ7XHJcbiAgICAgIGlmKHRyYW5Eb2MuYXBpUmVzcG9uc2UgJiYgdHJhbkRvYy5hcGlSZXNwb25zZS5pbnRlcm5hbElkKVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Lm9yaWdpbmFsRXh0ZXJuYWxJZCA9IHRyYW5Eb2MuYXBpUmVzcG9uc2UuaW50ZXJuYWxJZC50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHVucmVmZXJlbmNlZCBSZWZ1bmRcclxuICAgKiBAcmV0dXJucyBib29sZWFuIHZhbHVlXHJcbiAgICovXHJcbiAgYWRkVW5yZWZlcmVuY2VkUmVmdW5kKCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51bnJlZmVyZW5jZWRSZWZ1bmQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXRSZWZ1bmRUb3RhbCgpIHtcclxuICAgIGxldCB0b3RhbFJlZnVuZCA9IDA7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgcHJvZHVjdDogVFByb2R1Y3QgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzW2luZGV4XTtcclxuICAgICAgaWYgKHByb2R1Y3QucmVmdW5kZWRUb3RhbCkge1xyXG4gICAgICAgIHRvdGFsUmVmdW5kID0gdG90YWxSZWZ1bmQgKyBwcm9kdWN0LnJlZnVuZGVkVG90YWw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coXCJlYmFza2V0IDogdHJhbnNhY3Rpb24gU2VydmljZTogdG90YWxSZWZ1bmRcIiArIHRvdGFsUmVmdW5kKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvdGFsUmVmdW5kO1xyXG4gIH1cclxuXHJcbiAgZG9jSWQoZG9jSWQ6IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmlkID0gZG9jSWQ7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcbn1cclxuIl19
|
|
1240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXBwZXItbGlicmFyeS9zcmMvbGliL1RyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBc0QsZ0JBQWdCLEVBQWlHLE1BQU0sd0JBQXdCLENBQUM7QUFDN00sT0FBTyxFQUFFLGdCQUFnQixFQUErRCxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0sT0FBTywwQkFBMEI7SUFLckMsWUFDRSxjQUFvQyxFQUM1QixZQUEyQixFQUMzQixhQUFtQztRQURuQyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFFM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN2RSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxjQUFjLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLEdBQUc7Z0JBQ3pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixvQkFBb0IsRUFBRSxFQUFFO2dCQUN4QixjQUFjLEVBQUUsRUFBRTtnQkFDbEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLEVBQUU7Z0JBQ2Ysa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsZ0JBQWdCLEVBQUcsU0FBUztnQkFDNUIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLEVBQWE7Z0JBQ3JCLGFBQWEsRUFBRSxFQUFtQjtnQkFDbEMsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFO2dCQUNSLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsRUFBRTtnQkFDYixTQUFTLEVBQUUsRUFBRTtnQkFDYixFQUFFLEVBQUUsRUFBRTtnQkFDTix5QkFBeUIsRUFBRSxFQUErQjtnQkFDMUQsU0FBUyxFQUFFLENBQUM7YUFDYixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqRCxRQUFRLENBQUMsRUFBRSxDQUFDO2FBQ1osU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjO1lBQ3JDLFlBQVksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQzVFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3hGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsYUFBcUIsRUFBRSxXQUFvQixJQUFJO1FBQzNELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLGFBQXFCLEVBQUUsUUFBYTtRQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztNQUlFO0lBQ0YsV0FBVyxDQUFDLFdBQW1CO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O0lBSUE7SUFDQSxrQkFBa0IsQ0FBQyxrQkFBMEI7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsT0FBWTtRQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLE9BQVk7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxRQUFhO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRTdDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O1NBSUs7SUFDTCxVQUFVLENBQUMsVUFBZTtRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFNRDs7OztRQUlJO0lBQ0osTUFBTSxDQUFDLFVBQWU7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBSUQ7Ozs7UUFJSTtJQUNKOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsYUFBcUI7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3REFBd0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFckcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFnQixDQUFDO1FBQzVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDMUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDckQsTUFBTSxDQUFDLEdBQUcsRUFBYyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxhQUFhLEdBQUcsRUFBbUIsQ0FBQztZQUN0QyxDQUFDLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDcEIsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5QyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDNUIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxDQUFDLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRixDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDaEMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzVELENBQUMsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNoQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1lBRTlDLGtCQUFrQjtZQUVsQixDQUFDLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBRXZGLENBQUMsQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDNUQsQ0FBQyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUM5QixDQUFDLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFFMUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7WUFDbEQsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztZQUN0RCxDQUFDLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1lBQzFELENBQUMsQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFFeEQsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzlDLENBQUMsQ0FBQywyQkFBMkIsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUM7Z0JBQ2xFLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLHlCQUF5QixHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLENBQUM7b0JBQ2pDLENBQUMsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUNqRCxDQUFDO2dCQUNELENBQUMsQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQzlDLENBQUM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ3hDLENBQUM7WUFDRCxDQUFDLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUE4QixDQUFDO1lBQ3pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXJILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7U0FHSztJQUVMLHlCQUF5QixDQUFDLE1BQWM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvREFBb0QsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsUUFBUSxHQUFHLEVBQWUsQ0FBQztRQUM5RSxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsYUFBYSxHQUFHLEVBQXNCLENBQUM7UUFDMUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFlBQVksR0FBRyxFQUFvQixDQUFDO1FBQ3ZGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDNUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzlFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQzlILENBQU8sSUFBbUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FDMUUsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBd0ssRUFBRSxFQUFFO1lBQy9PLElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2dCQUM1Qyx5RkFBeUY7Z0JBQ3pGLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDdkMsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNsRCxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUM7WUFDRCxtREFBbUQ7WUFDbkQsSUFBSSxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUMvRixDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUM1RixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLGtFQUFrRSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3SSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLGFBQWEsR0FBRyxFQUFtQixDQUFDO1FBRXZGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1FBQzlMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFHOUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNsRyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQztRQUNqSSxzSkFBc0o7UUFFdEosSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLENBQUMsQ0FBQztRQUMvSyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hLLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQXFDLEVBQUUsRUFBRTtvQkFDdkgsYUFBYSxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUM7Z0JBQzNDLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0csQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsNERBQTRELEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1FBQzlJLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUdEOzs7S0FHQztJQUVELDJDQUEyQyxDQUFDLGFBQXFCO1FBQy9ELElBQUksd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksWUFBWSxHQUFpQjtZQUMvQixRQUFRLEVBQUUsRUFBRTtZQUNaLGtCQUFrQixFQUFFLENBQUM7U0FDdEIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEssSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQXFDLEVBQUUsRUFBRTtnQkFDdkgsd0JBQXdCLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUF3TixFQUFFLEVBQUU7Z0JBQy9SLElBQUksT0FBTyxHQUFZO29CQUNyQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7b0JBQzlCLEdBQUcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxPQUFPLEVBQUUsT0FBTyxDQUFDLGVBQWU7b0JBQ2hDLFlBQVksRUFBRSxDQUFDO29CQUNmLGFBQWEsRUFBRSxPQUFPLENBQUMsS0FBSztvQkFDNUIsTUFBTSxFQUFFLENBQUM7aUJBRVYsQ0FBQztnQkFDRixPQUFPLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxFQUM3RSxPQUFPLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBRXhHLFFBQVE7Z0JBQ1IsNEdBQTRHO2dCQUU1Ryx5SUFBeUk7Z0JBQ3pJLElBQUksT0FBTyxDQUFDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFFN0QsT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3hHLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO2dCQUN6SSxDQUFDO2dCQUVELHVCQUF1QjtnQkFDdkIsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFN0csOEJBQThCO2dCQUM5QixZQUFZLENBQUMsa0JBQWtCLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQztnQkFDekQsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFdEYsaUNBQWlDO2dCQUNqQyxPQUFPLENBQUMsWUFBWSxHQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZHLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQy9FLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdk8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2hNLENBQUMsQ0FBTSxFQUFFLEVBQUUsWUFBWSxFQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQ25ELENBQUMsQ0FDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNuRixDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5REFBeUQsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQTtRQUMxSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw4Q0FBOEM7UUFFNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRTVILElBQUksb0JBQW9CLEdBQXNCLEVBQUUsQ0FBQTtRQUNoRCxJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQTtRQUU3QixPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTNJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQW9FLEVBQUUsRUFBRTtZQUN4SixJQUFJLFVBQVUsR0FBb0I7Z0JBQ2hDLE9BQU8sRUFBQyxFQUFFO2dCQUNWLEdBQUcsRUFBRSxDQUFDLEtBQUs7Z0JBQ1gsU0FBUyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxFQUFFLENBQUM7Z0JBQ1QsU0FBUyxFQUFFLENBQUM7YUFDYixDQUFDO1lBQ0EsVUFBVSxDQUFDLE9BQU8sR0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUU3QixVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakYsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFFM0Ysb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBaUIsRUFBQyxVQUFjLEVBQUUsRUFBRTtZQUN0RixJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEYsSUFBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQztnQkFDYixhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2hDLENBQUM7aUJBQUssQ0FBQztnQkFDTCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2hELGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztnQkFDeEMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUNyRCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQy9DLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ0wsd0hBQXdIO1FBRXhILE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztRQUMxRixPQUFPLElBQUksQ0FBQztJQUVkLENBQUM7SUFFRDs7O09BR0c7SUFDSCw0Q0FBNEM7UUFDMUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEwsT0FBTyxDQUFDLEdBQUcsQ0FBQywyRkFBMkYsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoUixNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLEdBQUcsQ0FDTixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQ3BGLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDakgsQ0FBQztRQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkZBQTJGLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDdkgsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O01BR0U7SUFDRiwwQ0FBMEM7UUFDeEMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3hHLE1BQU0sT0FBTyxHQUFZLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLFdBQVcsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywyRUFBMkUsR0FBRyxXQUFXLENBQUMsQ0FBQTtRQUN4RyxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUlEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsYUFBcUI7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdEgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUM1RyxhQUFhLENBQ2QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNFLElBQ0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZO1lBQzVDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUM3QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzVILENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBRzNFLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ25KLENBQUMsQ0FBTSxFQUFFLEVBQUUsWUFBWSxFQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQ25ELENBQUMsQ0FDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6RCxDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQywwREFBMEQsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2pJLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsYUFBcUI7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ25FLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FDaEcsQ0FBQyxHQUFVLEVBQUUsR0FBeUIsRUFBRSxFQUFFO29CQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQXdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEtBQUssR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQzlFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hCLENBQUM7b0JBQ0QsT0FBTyxHQUFHLENBQUM7Z0JBQ2IsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO1lBQ0osQ0FBQztZQUVELGdCQUFnQjtZQUNoQiwrREFBK0Q7WUFDL0QsaURBQWlEO1lBQ2pELEtBQUs7UUFDUCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxhQUFxQjtRQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFJLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBRW5FLE1BQU0sT0FBTyxHQUFRLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUF3QixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDZixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDMUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzFDLElBQUksUUFBUSxHQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTt3QkFDNUUsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0IsQ0FBQztvQkFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnRkFBZ0YsRUFDaEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUN6RCxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O01BSUU7SUFDRixlQUFlLENBQUMsMkJBQWdEO1FBQzlELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqSixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLGFBQXFCO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuRSxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ2hELE9BQU8sQ0FBQyxjQUFjLENBQ3ZCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUNsRyxDQUFDLEdBQVUsRUFBRSxHQUF5QixFQUFFLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBd0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDOUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEIsQ0FBQztvQkFDRCxPQUFPLEdBQUcsQ0FBQztnQkFDYixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0IsQ0FBQyxhQUFxQjtRQUN4QyxJQUFJLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsb0JBQW9CO2dCQUNsRCxhQUFhLENBQUMsb0JBQW9CLENBQUM7WUFDckMscUZBQXFGO1lBQ3JGLHNGQUFzRjtZQUN0RixrSUFBa0k7WUFDbEksK0RBQStEO1lBQy9ELHVCQUF1QjtZQUN2QixRQUFRO1lBQ1Isa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixJQUFJO1lBQ0osT0FBTyxDQUFDLEdBQUcsQ0FDVCw0RkFBNEYsRUFDNUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQ3JFLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsYUFBcUI7UUFDdkMsSUFBSSxhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG1CQUFtQjtnQkFDakQsYUFBYSxDQUFDLG1CQUFtQixDQUFDO1lBRXBDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsNERBQTRELEVBQzVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUNwRSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsY0FBbUI7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyx1REFBdUQsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFckcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBR0Q7Ozs7T0FJRztJQUNGLFlBQVksQ0FBQyxZQUFxQjtRQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFQTs7OztNQUlFO0lBQ0Qsa0JBQWtCLENBQUMsa0JBQTJCO1FBQzVDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLSDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLFFBQWE7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztNQUdFO0lBQ0YsVUFBVSxDQUFDLElBQVM7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FDVCwyRUFBMkUsRUFDM0UsSUFBSSxDQUNMLENBQUM7UUFDRixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNEOzs7Ozs7S0FNQztJQUVELDZFQUE2RTtJQUM3RSx5RUFBeUU7SUFDekUsK0NBQStDO0lBQy9DLG9IQUFvSDtJQUNwSCx1R0FBdUc7SUFDdkcsWUFBWTtJQUNaLGlHQUFpRztJQUNqRyxvRUFBb0U7SUFDcEUsTUFBTTtJQUNOLHFFQUFxRTtJQUNyRSxpQkFBaUI7SUFFakIsSUFBSTtJQUVKOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsQ0FBTTtRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsQ0FBTTtRQUNwQixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7O09BR0c7SUFDSCxzQkFBc0I7UUFDcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBRTFHLElBQUksTUFBTSxHQUFXO1lBQ25CLFlBQVksRUFBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWTtZQUNwRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG1CQUFtQjtZQUN4RSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG9CQUFvQjtZQUMxRSxhQUFhLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWE7WUFDckQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQjtZQUNuRSxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXO1lBQ3pELFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDL0QsYUFBYSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsYUFBYTtZQUNuRSxTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxTQUFTO1lBQzNELFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDL0QsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVTtZQUMzRCxRQUFRLEVBQUUsRUFBRTtZQUNaLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWTtZQUNuRCxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVE7U0FDNUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBZSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQXdrQixFQUFFLEtBQVUsRUFBRSxFQUFFO1lBQ3hvQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUseUNBQXlDLENBQUMsQ0FBQztZQUNoRixNQUFNLENBQUMsR0FBRyxFQUFTLENBQUM7WUFDcEIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUM1QixDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFFOUIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNoQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7WUFDbkQsQ0FBQyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1lBRTlDLENBQUMsQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNoQyxDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDOUIsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFFOUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDNUQsQ0FBQyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDOUIsQ0FBQyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRTVGLElBQUcsQ0FBQyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUN0RCxDQUFDO2dCQUNDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLENBQUM7WUFFRCxDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDOUIsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxDQUFDLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1lBQ3RELENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztZQUV4RCxJQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDdkQsQ0FBQztnQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFpRixFQUFFLEVBQUU7b0JBQ3pJLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQzlELENBQUMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO3dCQUM5QixDQUFDLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztvQkFDN0MsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsYUFBYTtnQkFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDeEQsQ0FBQztnQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFpRixFQUFFLEVBQUU7b0JBQzFJLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7d0JBQy9ELENBQUMsQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO3dCQUNqQyxDQUFDLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDN0MsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2hFLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQTBFLEVBQUUsRUFBRTtvQkFDM0ksSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO3dCQUMvRSxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlELENBQUMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUNsQyxDQUFDO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlJLENBQUMsQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO29CQUNqQyxDQUFDLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQztnQkFDakQsQ0FBQztnQkFDRCxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2dCQUM5QyxDQUFDLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2dCQUNsRSxDQUFDLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM5QyxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM5RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLEdBQUcsSUFBSSxDQUFDLG9EQUFvRCxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkUsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzVFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQ0FBcUM7SUFDckMsMkJBQTJCO0lBQzNCLDREQUE0RDtJQUM1RCxnRkFBZ0Y7SUFDaEYsa0ZBQWtGO0lBQ2xGLDZEQUE2RDtJQUM3RCxpRUFBaUU7SUFDakUsdUVBQXVFO0lBQ3ZFLDJFQUEyRTtJQUMzRSxtRUFBbUU7SUFDbkUsbUVBQW1FO0lBQ25FLG9CQUFvQjtJQUNwQiwyREFBMkQ7SUFDM0QsbURBQW1EO0lBQ25ELE9BQU87SUFFUCx1Q0FBdUM7SUFDdkMsb3BCQUFvcEI7SUFDcHBCLCtCQUErQjtJQUMvQiwyQkFBMkI7SUFDM0IsbUNBQW1DO0lBQ25DLHFDQUFxQztJQUVyQywyQ0FBMkM7SUFDM0MsdUNBQXVDO0lBQ3ZDLDBEQUEwRDtJQUMxRCxpREFBaUQ7SUFDakQsaURBQWlEO0lBQ2pELHFEQUFxRDtJQUVyRCx1Q0FBdUM7SUFDdkMscUNBQXFDO0lBQ3JDLHdDQUF3QztJQUN4QyxxREFBcUQ7SUFFckQsK0NBQStDO0lBQy9DLG1FQUFtRTtJQUNuRSxzREFBc0Q7SUFDdEQscUNBQXFDO0lBQ3JDLG1HQUFtRztJQUVuRyxxQ0FBcUM7SUFDckMseURBQXlEO0lBQ3pELDZEQUE2RDtJQUM3RCxpRUFBaUU7SUFDakUsK0RBQStEO0lBRy9ELDhEQUE4RDtJQUM5RCxRQUFRO0lBQ1IsNkJBQTZCO0lBQzdCLFFBQVE7SUFFUixtQ0FBbUM7SUFDbkMsaUVBQWlFO0lBQ2pFLFFBQVE7SUFFUiwrQkFBK0I7SUFDL0IseUNBQXlDO0lBRXpDLCtGQUErRjtJQUMvRixXQUFXO0lBQ1gsbUhBQW1IO0lBRW5ILHNDQUFzQztJQUN0Qyw0REFBNEQ7SUFDNUQseURBQXlEO0lBQ3pELG9DQUFvQztJQUNwQyw4RUFBOEU7SUFDOUUsdUNBQXVDO0lBQ3ZDLHFEQUFxRDtJQUNyRCxRQUFRO0lBQ1IsOEJBQThCO0lBQzlCLHVDQUF1QztJQUN2QyxRQUFRO0lBRVIsV0FBVztJQUNYLHdEQUF3RDtJQUN4RCxnRUFBZ0U7SUFDaEUsVUFBVTtJQUVWLHNKQUFzSjtJQUV0SiwyR0FBMkc7SUFDM0csOERBQThEO0lBQzlELHVGQUF1RjtJQUN2Rix5RkFBeUY7SUFDekYsMERBQTBEO0lBQzFELGtGQUFrRjtJQUNsRiwyQ0FBMkM7SUFDM0MsdURBQXVEO0lBQ3ZELFlBQVk7SUFDWixZQUFZO0lBQ1osUUFBUTtJQUVSLFdBQVc7SUFDWCx5REFBeUQ7SUFDekQsaUVBQWlFO0lBQ2pFLFVBQVU7SUFDViw2SUFBNkk7SUFDN0ksdUdBQXVHO0lBQ3ZHLDhDQUE4QztJQUM5QywyREFBMkQ7SUFDM0QsK0ZBQStGO0lBQy9GLFlBQVk7SUFDWixZQUFZO0lBQ1osUUFBUTtJQUVSLDhCQUE4QjtJQUM5QiwyQkFBMkI7SUFFM0IsV0FBVztJQUNYLHdEQUF3RDtJQUN4RCx5RUFBeUU7SUFDekUsVUFBVTtJQUNWLHdKQUF3SjtJQUN4SixzRUFBc0U7SUFDdEUseUNBQXlDO0lBQ3pDLGlEQUFpRDtJQUNqRCxZQUFZO0lBQ1osWUFBWTtJQUNaLFFBQVE7SUFFUiw0QkFBNEI7SUFDNUIsaUNBQWlDO0lBQ2pDLFFBQVE7SUFDUixRQUFRO0lBQ1IsNkJBQTZCO0lBQzdCLCtEQUErRDtJQUMvRCxrRkFBa0Y7SUFFbEYsTUFBTTtJQUVOLDhHQUE4RztJQUM5Ryw4Q0FBOEM7SUFDOUMsbURBQW1EO0lBQ25ELFFBQVE7SUFDUixPQUFPO0lBQ1AsaUZBQWlGO0lBQ2pGLHVDQUF1QztJQUN2QyxrSEFBa0g7SUFDbEgsaUJBQWlCO0lBQ2pCLGtHQUFrRztJQUNsRyx5QkFBeUI7SUFDekIsT0FBTztJQUVQLGlCQUFpQjtJQUNqQiw2RUFBNkU7SUFDN0UsNkJBQTZCO0lBQzdCLE9BQU87SUFDUCxtQkFBbUI7SUFDbkIsSUFBSTtJQUdKLG9EQUFvRCxDQUFDLE1BQVU7UUFDN0QsSUFDRSxNQUFNLENBQUMsbUJBQW1CO1lBQzFCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNyQyxDQUFDO1lBQ0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQStCLEVBQUUsRUFBRTtnQkFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDMUIsUUFBUSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQTZCLEVBQUUsRUFBRTt3QkFDM0UsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFBO29CQUMzQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUNFLE1BQU0sQ0FBQyxvQkFBb0I7WUFDM0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3RDLENBQUM7WUFDRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBaUMsRUFBRSxFQUFFO2dCQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM1QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxJQUFvQyxFQUFFLEVBQUU7d0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQztvQkFDekMsQ0FBQyxDQUFDLENBQUM7b0JBRUwsVUFBVSxDQUFDLFdBQVc7d0JBQ3BCLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUE2QixFQUFFLEVBQUU7NEJBQ2pELE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQTt3QkFDM0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDekYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUdELHFEQUFxRCxDQUFDLGFBQWtCO1FBRXRFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUNFLGFBQWEsQ0FBQyxvQkFBb0I7WUFDbEMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzdDLENBQUM7WUFDRCxhQUFhLElBQUksYUFBYSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FDeEQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxlQUFlLEVBQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGVBQWUsRUFDekQsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFDRSxhQUFhLENBQUMsbUJBQW1CO1lBQ2pDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUM1QyxDQUFDO1lBRUQsYUFBYSxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQ3ZELENBQUMsQ0FBTSxFQUFFLEVBQUUsY0FBYyxFQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxjQUFjLEVBQ3ZELENBQUMsQ0FDRixDQUFDO1FBR0osQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0VBQW9FLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFakcsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUdELG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsS0FBYTtRQUNsRCxrREFBa0Q7UUFDbEQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztZQUNqRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07SUFDTiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLE1BQU07SUFDTixvREFBb0Q7SUFDcEQsb0VBQW9FO0lBQ3BFLG1EQUFtRDtJQUNuRCwyREFBMkQ7SUFDM0QsbUJBQW1CO0lBQ25CLGlEQUFpRDtJQUNqRCxxREFBcUQ7SUFDckQsU0FBUztJQUVULFdBQVc7SUFDWCx5REFBeUQ7SUFDekQsaUVBQWlFO0lBQ2pFLFVBQVU7SUFDVixtRkFBbUY7SUFDbkYsdUJBQXVCO0lBQ3ZCLGtEQUFrRDtJQUNsRCwwREFBMEQ7SUFDMUQsYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixzREFBc0Q7SUFDdEQsZ0RBQWdEO0lBQ2hELGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsNkJBQTZCO0lBQzdCLHlFQUF5RTtJQUN6RSxhQUFhO0lBRWIsNEVBQTRFO0lBQzVFLG9DQUFvQztJQUNwQyxxREFBcUQ7SUFDckQsWUFBWTtJQUNaLFlBQVk7SUFDWixhQUFhO0lBQ2IsYUFBYTtJQUNiLDBEQUEwRDtJQUMxRCxrRUFBa0U7SUFDbEUsWUFBWTtJQUNaLG1GQUFtRjtJQUNuRix5QkFBeUI7SUFDekIsd0NBQXdDO0lBQ3hDLDJEQUEyRDtJQUMzRCxlQUFlO0lBQ2YseUJBQXlCO0lBQ3pCLHdEQUF3RDtJQUN4RCxpREFBaUQ7SUFDakQsZUFBZTtJQUNmLHlCQUF5QjtJQUN6QiwrQkFBK0I7SUFDL0IsMEVBQTBFO0lBQzFFLGVBQWU7SUFFZiw2RUFBNkU7SUFDN0UsOEZBQThGO0lBQzlGLGNBQWM7SUFDZCxjQUFjO0lBQ2QsVUFBVTtJQUVWLGtFQUFrRTtJQUNsRSw4REFBOEQ7SUFDOUQseUlBQXlJO0lBQ3pJLDZFQUE2RTtJQUM3RSwrQkFBK0I7SUFDL0IsUUFBUTtJQUNSLG9GQUFvRjtJQUNwRiwwSkFBMEo7SUFDMUosZ0ZBQWdGO0lBQ2hGLHdKQUF3SjtJQUN4Siw2REFBNkQ7SUFDN0QsaUJBQWlCO0lBQ2pCLElBQUk7SUFFSjs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGFBQW1DO1FBQ2pELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUM3QyxDQUFDLENBQU0sRUFBRSxFQUFFLGNBQWMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxFQUN2RCxDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFFRCwrQ0FBK0MsQ0FBQyxhQUFpQztRQUMvRSxJQUFJLFNBQVMsR0FBVyxHQUFHLENBQUM7UUFDNUIsS0FBSyxJQUFJLE9BQU8sSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsZ0NBQWdDO1lBQ2hDLDREQUE0RDtZQUM1RCxjQUFjO1lBQ2QsNEJBQTRCO1lBQzVCLDRCQUE0QjtZQUM1QixNQUFNO1lBQ04saUJBQWlCO1lBQ2pCLDRFQUE0RTtZQUM1RSxXQUFXO1lBQ1gsaUJBQWlCO1lBQ2pCLG1FQUFtRTtZQUNuRSxJQUFJO1lBQ0osU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnQ0FBZ0MsR0FBRyxTQUFTLEVBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQ3hCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELDRCQUE0QixDQUFDLGFBQTRDO1FBQ3ZFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuRSxNQUFNLE9BQU8sR0FBUSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5ELElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFFdkMsUUFBUSxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBRXpDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFFcEUscUVBQXFFO1lBRXZFLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFFbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5SCxPQUFPLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxHQUFHLENBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztZQUMxRCxDQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUNyRixDQUNGLENBQUM7UUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUMxRixPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBR2hCO1FBQ0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3RELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQixDQUNuQixZQUEwQjtRQUUxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLENBQ1YsTUFBYztRQUVkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFTO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBRWQsQ0FBQztJQUVELGtCQUFrQixDQUFDLGNBQXdCO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQixDQUFDLGFBQXFCO1FBQ3RDLG9DQUFvQztRQUNwQyxJQUFJLFlBQVksR0FBaUI7WUFDL0IsUUFBUSxFQUFFLEVBQUU7WUFDWixrQkFBa0IsRUFBRSxDQUFDO1NBQ3RCLENBQUM7UUFJRiwrSEFBK0g7UUFDL0gsZ0ZBQWdGO1FBQ2hGLDJEQUEyRDtRQUMzRCxRQUFRO1FBQ1IsSUFBSTtRQUVKLGlJQUFpSTtRQUNqSSxrRUFBa0U7UUFDbEUsdUJBQXVCO1FBQ3ZCLCtEQUErRDtRQUMvRCxRQUFRO1FBQ1IsT0FBTztRQUNQLElBQUk7UUFFSixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQzlDLElBQUksT0FBTyxHQUFZO2dCQUNyQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQzlCLEdBQUcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQ2hDLFlBQVksRUFBRSxDQUFDO2dCQUNmLGFBQWEsRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDNUIsTUFBTSxFQUFFLENBQUM7YUFDVixDQUFDO1lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUN0RSxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBRXpDLFNBQVM7WUFDVCw0R0FBNEc7WUFDNUcsc0NBQXNDO1lBQ3RDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxFLE1BQU0sMEJBQTBCLEdBQzlCLE9BQU8sQ0FBQyxhQUFhLENBQUMsbUJBQW1CO2dCQUN6QyxPQUFPLENBQUMsYUFBYSxDQUFDLG9CQUFvQjtnQkFDMUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDdEMsYUFBYTtZQUViLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFDdEUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7WUFDaEUsOEZBQThGO1lBQzlGLE9BQU8sQ0FBQyxhQUFhLElBQUksMEJBQTBCLENBQUM7WUFDcEQsSUFBSTtZQUVKLHVCQUF1QjtZQUN2QixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRTdHLDhCQUE4QjtZQUM5QixZQUFZLENBQUMsa0JBQWtCLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN6RCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXRGLGlDQUFpQztZQUNqQyxPQUFPLENBQUMsWUFBWSxHQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxZQUFZLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQscUJBQXFCO1FBRW5CLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFHekcsSUFBSSxvQkFBb0IsR0FBc0IsRUFBRSxDQUFBO1FBQ2hELElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFBO1FBRTdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBR3hILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFvRSxFQUFFLEVBQUU7WUFDckksSUFBSSxVQUFVLEdBQW9CO2dCQUNoQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxHQUFHLEVBQUUsQ0FBQyxLQUFLO2dCQUNYLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sRUFBRSxDQUFDO2dCQUNULFNBQVMsRUFBRSxDQUFDO2FBRWIsQ0FBQztZQUNELFVBQVUsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNwQyxVQUFVLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDN0IsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RSxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pGLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBRTNGLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWlCLEVBQUMsVUFBVSxFQUFFLEVBQUU7WUFFbEYsSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xGLElBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUM7Z0JBQ2IsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUNoQyxDQUFDO2lCQUFLLENBQUM7Z0JBQ0wsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUNoRCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDckQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUMvQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDdkQsQ0FBQztZQUNELE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQTtRQUVMLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUc5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztRQUV2RSxPQUFPLElBQUksQ0FBQztJQUVkLENBQUM7SUFHRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxPQUEyQjtRQUM1QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcE0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ2pFLElBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFDeEQsQ0FBQztnQkFDQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUYsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNyRixNQUFNLE9BQU8sR0FBYSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDMUIsV0FBVyxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3BELENBQUM7WUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxHQUFHLFdBQVcsQ0FBQyxDQUFBO1FBQ3pFLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQVU7UUFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEJhc2tldFN1bW1hcnksIEN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMsIEN1c3RvbWVyLCBERUxJVkVSWV9NRVRIT0RTLCBJdGVtRGlzY291bnRzLCBUYXhCcmVha2Rvd24sIFRheExpbmUsIFRCYXNrZXQsIFRvdGFsVGF4U3VtbWFyeSwgVFByb2R1Y3QsIFRyYW5zYWN0aW9uRG9jdW1lbnQgfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiO1xuaW1wb3J0IHsgVFJBTlNBQ1RJT05fVFlQRSwgQmFza2V0LCBMaW5lRGlzY291bnQsIExpbmVQcm9tb3Rpb25zLCBQcm9kdWN0LCBVc2VyT3ZlcnJpZGUgfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiO1xuaW1wb3J0IHsgQmFza2V0U2VydmljZSB9IGZyb20gXCIuL2Jhc2tldC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOdW1iZXJVdGlsU2VydmljZSB9IGZyb20gXCIuL251bWJlci11dGlsLnNlcnZpY2VcIjtcblxuLyoqXG4gKiBUcmFuc2FjdGlvbiBkb2N1bWVudCBidWlsZGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gIHByaXZhdGUgdHJhbnNhY3Rpb25Eb2N1bWVudDogVHJhbnNhY3Rpb25Eb2N1bWVudDtcbiAgcHJpdmF0ZSBudW1iZXJVdGlsU2VydmljZTogTnVtYmVyVXRpbFNlcnZpY2U7XG4gIHByaXZhdGUgc3RvcmVJbmZvIDogYW55O1xuICBcbiAgY29uc3RydWN0b3IoXG4gICAgdHJhbnNhY3Rpb25Eb2M/OiBUcmFuc2FjdGlvbkRvY3VtZW50LFxuICAgIHByaXZhdGUgY3VycmVuY3lQaXBlPzogQ3VycmVuY3lQaXBlLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZT86IEJhc2tldFNlcnZpY2UgfCBhbnksXG4gICkge1xuICAgIHRoaXMubnVtYmVyVXRpbFNlcnZpY2UgPSBuZXcgTnVtYmVyVXRpbFNlcnZpY2UoY3VycmVuY3lQaXBlKTtcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UgPSBuZXcgQmFza2V0U2VydmljZSh0aGlzLm51bWJlclV0aWxTZXJ2aWNlKTtcbiAgICB0aGlzLnN0b3JlSW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0b3JlSW5mbycpIHx8ICd7fScpO1xuICAgIGlmICh0cmFuc2FjdGlvbkRvYykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50ID0gdHJhbnNhY3Rpb25Eb2M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCA9IHtcbiAgICAgICAgdHJhbnNhY3Rpb25JZDogXCJcIixcbiAgICAgICAgb2ZmbGluZVRyYW5zYWN0aW9uSWQ6IFwiXCIsXG4gICAgICAgIHRyYW5zYWN0aW9uUmVmOiBcIlwiLFxuICAgICAgICBkYXRlVGltZTogXCJcIixcbiAgICAgICAgb3JnQ29kZTogXCJcIixcbiAgICAgICAgc3RvcmVJZDogXCJcIixcbiAgICAgICAgc3RvcmVOb2RlSWQ6IFwiXCIsXG4gICAgICAgIHN0b3JlTm9kZVN0cnVjdHVyZTogXCJcIixcbiAgICAgICAgZGV2aWNlSWQ6IFwiXCIsXG4gICAgICAgIHRlcm1pbmFsSWQ6IFwiXCIsXG4gICAgICAgIHVzZXJJZDogXCJcIixcbiAgICAgICAgaW5pdGlhdGluZ01vZHVsZSA6IFwiZUJhc2tldFwiLFxuICAgICAgICBleHBvcnQ6IGZhbHNlLFxuICAgICAgICBiYXNrZXQ6IHt9IGFzIFRCYXNrZXQsXG4gICAgICAgIGJhc2tldFN1bW1hcnk6IHt9IGFzIEJhc2tldFN1bW1hcnksXG4gICAgICAgIGJhc2VDdXJyZW5jeTogXCJcIixcbiAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgb3BlcmF0aW9uU3RhdHVzOiBcIlwiLFxuICAgICAgICBjcmVhdGVkQXQ6IFwiXCIsXG4gICAgICAgIHVwZGF0ZWRBdDogXCJcIixcbiAgICAgICAgaWQ6IFwiXCIsXG4gICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIEN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMsXG4gICAgICAgIHNhbGVUb3RhbDogMCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zYWN0aW9ucyByZWZcbiAgICogQHJldHVybnMgcmVmXG4gICAqL1xuICB0cmFuc2FjdGlvblJlZigpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgY29uc3Qgc3RvcmVEZXRhaWxzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmVJbmZvJykgfHwgJ3t9Jyk7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgcmFuZG9tID0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKVxuICAgICAgLnRvU3RyaW5nKDE2KVxuICAgICAgLnN1YnN0cmluZygxKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHJhbnNhY3Rpb25SZWYgPVxuICAgICAgc3RvcmVEZXRhaWxzLm9yZ0NvZGUgKyBzdG9yZURldGFpbHMuc3RvcmVJZCArIGRhdGUudG9JU09TdHJpbmcoKSArIHJhbmRvbTtcbiAgICBjb25zb2xlLmxvZyhcImViYXNrZXQ6IHRyYW5zYWN0aW9uIHJlZiBjcmVhdGVkXCIsIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50cmFuc2FjdGlvblJlZilcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2FjdGlvbnMgaWRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uSURcbiAgICogQHJldHVybnMgaWRcbiAgICovXG4gIHRyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JRDogc3RyaW5nLCBpc09ubGluZTogYm9vbGVhbiA9IHRydWUpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgaWYgKGlzT25saW5lKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSUQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zYWN0aW9ucyBpZFxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25JRFxuICAgKiBAcmV0dXJucyBpZFxuICAgKi9cbiAgb2ZmbGluZVRyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JRDogc3RyaW5nLCBpc09ubGluZTogYW55KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIGlmICghaXNPbmxpbmUpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vZmZsaW5lVHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSUQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICogc3RvcmVOb2RlIElkXG4gICogQHBhcmFtIHN0b3JlTm9kZUlkXG4gICogQHJldHVybnMgaWRcbiAgKi9cbiAgc3RvcmVOb2RlSWQoc3RvcmVOb2RlSWQ6IHN0cmluZyk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVOb2RlSWQgPSBzdG9yZU5vZGVJZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuKiBzdG9yZU5vZGUgc3RydWN0dXJlXG4qIEBwYXJhbSBzdG9yZU5vZGVTdHJ1Y3R1cmVcbiogQHJldHVybnMgaWRcbiovXG4gIHN0b3JlTm9kZVN0cnVjdHVyZShzdG9yZU5vZGVTdHJ1Y3R1cmU6IHN0cmluZyk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3RvcmVOb2RlU3RydWN0dXJlID0gc3RvcmVOb2RlU3RydWN0dXJlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9yZ3MgY29kZVxuICAgKiBAcGFyYW0gb3JnQ29kZVxuICAgKiBAcmV0dXJucyBjb2RlXG4gICAqL1xuICBvcmdDb2RlKG9yZ0NvZGU6IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQub3JnQ29kZSA9IG9yZ0NvZGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFN0b3JlcyBpZFxuICAgKiBAcGFyYW0gc3RvcmVJZFxuICAgKiBAcmV0dXJucyBpZFxuICAgKi9cbiAgc3RvcmVJZChzdG9yZUlkOiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQgPSBzdG9yZUlkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBEYXRlcyB0aW1lXG4gICAqIEByZXR1cm5zIHRpbWVcbiAgICovXG4gIGRhdGVUaW1lKCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuZGF0ZVRpbWUgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIERldmljZXMgaWRcbiAgICogQHBhcmFtIGRldmljZUlkXG4gICAqIEByZXR1cm5zIGlkXG4gICAqL1xuICBkZXZpY2VJZChkZXZpY2VJZDogYW55KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5kZXZpY2VJZCA9IGRldmljZUlkO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICAgKiB0ZXJtaW5hbCBpZFxuICAgICAqIEBwYXJhbSB0ZXJtaW5hbElkXG4gICAgICogQHJldHVybnMgaWRcbiAgICAgKi9cbiAgdGVybWluYWxJZCh0ZXJtaW5hbElkOiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRlcm1pbmFsSWQgPSB0ZXJtaW5hbElkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cblxuXG5cblxuICAvKipcbiAgICAqIHNhbGVFeHBvcnRcbiAgICAqIEBwYXJhbSBzYWxlRXhwb3J0XG4gICAgKiBAcmV0dXJucyBpZFxuICAgICovXG4gIGV4cG9ydChzYWxlRXhwb3J0OiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmV4cG9ydCA9IHNhbGVFeHBvcnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuXG5cbiAgLyogIGN1c3RvbWVyKCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICBjb25zdCB1c2VyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlckRldGFpbHMnKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1c3RvbWVyID0gdXNlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfSAqL1xuICAvKipcbiAgICogQmFza2V0cyB0cmFuc2FjdGlvbiBkb2N1bWVudCBidWlsZGVyXG4gICAqIEBwYXJhbSBiYXNrZXREZXRhaWxzXG4gICAqIEByZXR1cm5zIGJhc2tldFxuICAgKi9cbiAgYmFza2V0KGJhc2tldERldGFpbHM6IEJhc2tldCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICBjb25zb2xlLmxvZyhcImViYXNrZXQ6IGJhc2tldCBkZXRhaWxzIHVwZGF0ZSBpbiB0cmFuc2FjdGlvbiBkb2N1bWVudFwiLCBKU09OLnN0cmluZ2lmeShiYXNrZXREZXRhaWxzKSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3Vic2lkaWFyeUlkID0gYmFza2V0RGV0YWlscy5zdWJzaWRpYXJ5SWQgfHwgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJzaWRpYXJ5SWQnKSB8fCAnJyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cyA9IFtdIGFzIFRQcm9kdWN0W107XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24gPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uID0gW107XG4gICAgYmFza2V0RGV0YWlscy5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0OiBhbnksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwID0ge30gYXMgVFByb2R1Y3Q7XG4gICAgICBwLml0ZW1EaXNjb3VudHMgPSB7fSBhcyBJdGVtRGlzY291bnRzO1xuICAgICAgcC5TS1UgPSBwcm9kdWN0LlNLVTtcbiAgICAgIHAuZXhjbHVkZVByb21vdGlvbiA9IHByb2R1Y3QuZXhjbHVkZVByb21vdGlvbjtcbiAgICAgIHAuYmFyQ29kZSA9IHByb2R1Y3QuYmFyY29kZTtcbiAgICAgIHAuYmFyY29kZXMgPSBwcm9kdWN0LmJhcmNvZGVzO1xuICAgICAgcC5kZXNjcmlwdGlvbiA9IHByb2R1Y3QuZGVzY3JpcHRpb247XG4gICAgICBwLml0ZW1MaW5lSWQgPSBwcm9kdWN0Lml0ZW1MaW5lSWQgPyBwcm9kdWN0Lml0ZW1MaW5lSWQudG9TdHJpbmcoKSA6IFwiXCIgKyAoaW5kZXggKyAxKTtcbiAgICAgIHAucHJpY2UgPSBwcm9kdWN0LnNlbGVjdGVkUHJpY2U7XG4gICAgICBwLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcbiAgICAgIHAudG90YWxMaW5lUHJpY2UgPSBwcm9kdWN0LnF1YW50aXR5ICogcHJvZHVjdC5zZWxlY3RlZFByaWNlO1xuICAgICAgcC5pbWFnZVVybHMgPSBwcm9kdWN0LmltYWdlVXJscztcbiAgICAgIHAuc2VsZWN0ZWRSUlBQcmljZSA9IHByb2R1Y3Quc2VsZWN0ZWRSUlBQcmljZTtcblxuICAgICAgLy9pbnZlbnRvcnkgZmllbGRzXG4gICAgICBcbiAgICAgIHAuZnVsbGZpbG1lbnRJZCA9IHByb2R1Y3QuZnVsbGZpbG1lbnRJZD8gcHJvZHVjdC5mdWxsZmlsbWVudElkOiB0aGlzLnN0b3JlSW5mby5zdG9yZUlkO1xuXG4gICAgICBwLmZ1bGxmaWxtZW50TG9jYXRpb25OYW1lID0gcHJvZHVjdC5mdWxsZmlsbWVudExvY2F0aW9uTmFtZTtcbiAgICAgIHAuZGVsaXZlcnlHcm91cCA9IHByb2R1Y3QuZGVsaXZlcnlHcm91cDtcbiAgICAgIHAubGVhZFRpbWUgPSBwcm9kdWN0LmxlYWRUaW1lO1xuICAgICAgcC5kZWxpdmVyeU1ldGhvZCA9IHByb2R1Y3QuZGVsaXZlcnlNZXRob2Q7XG5cbiAgICAgIHAuZ2lmdENhcmQgPSBwcm9kdWN0LmdpZnRDYXJkO1xuICAgICAgcC5naWZ0Q2FyZEV4cGlyeURhdGUgPSBwcm9kdWN0LmdpZnRDYXJkRXhwaXJ5RGF0ZTtcbiAgICAgIHAuZ2lmdENhcmROdW1iZXJJc3N1ZWQgPSBwcm9kdWN0LmdpZnRDYXJkTnVtYmVySXNzdWVkO1xuICAgICAgcC5naWZ0Q2FyZFJlY2lwaWVudEVtYWlsID0gcHJvZHVjdC5naWZ0Q2FyZFJlY2lwaWVudEVtYWlsO1xuICAgICAgcC5naWZ0Q2FyZFJlY2lwaWVudE5hbWUgPSBwcm9kdWN0LmdpZnRDYXJkUmVjaXBpZW50TmFtZTtcblxuICAgICAgaWYgKHByb2R1Y3QucmVmdW5kZWRRdWFudGl0eSA+IDApIHtcbiAgICAgICAgcC5yZWZ1bmRlZFF1YW50aXR5ID0gcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5O1xuICAgICAgICBwLnJlZnVuZGVkUHJvbW90aW9uYWxRdWFudGl0eSA9IHByb2R1Y3QucmVmdW5kUHJvbW90aW9uYWxRdWFudGl0eTtcbiAgICAgICAgcC5yZWZ1bmRlZCA9IHByb2R1Y3QucmVmdW5kZWQ7XG4gICAgICAgIHAucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiA9IHByb2R1Y3QucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbjtcbiAgICAgICAgcC5yZWZ1bmRlZFJlYXNvbiA9IHByb2R1Y3QucmVmdW5kZWRSZWFzb247XG4gICAgICAgIGlmICghcC5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgcC5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uID0gcC5yZWZ1bmRlZFJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgICBwLnJlZnVuZGVkVG90YWwgPSBwcm9kdWN0LnJlZnVuZGVkVG90YWw7XG4gICAgICAgIHAuaXNMYXN0RXhjaGFuZ2VkID0gcHJvZHVjdC5pc0xhc3RFeGNoYW5nZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9kdWN0LmV4Y2hhbmdlKSB7XG4gICAgICAgIHAuZXhjaGFuZ2UgPSBwcm9kdWN0LmV4Y2hhbmdlO1xuICAgICAgfVxuICAgICAgaWYgKHByb2R1Y3QubGluZURpc2NvdW50KSB7XG4gICAgICAgIHAubGluZURpc2NvdW50ID0gcHJvZHVjdC5saW5lRGlzY291bnQ7XG4gICAgICB9XG4gICAgICBwLml0ZW1EaXNjb3VudHMgPSBwcm9kdWN0Lml0ZW1EaXNjb3VudHMgYXMgSXRlbURpc2NvdW50cztcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMucHVzaChwKTtcbiAgICAgIHRoaXMubGluZURpc2NvdW50KGJhc2tldERldGFpbHMpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUuaW5mbyhcImViYXNrZXQ6IHRyYW5zYWN0aW9uZG9jdW1lbnQgYmFza2V0IGRldGFpbHMgdXBkYXRlZFwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0KSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgICAqIGN1cnJlbnQgdHJhbnNhY3Rpb24gRGV0YWlscyBUb3RhbChOZXcgUHJvZHVjdHMpXG4gICAgICogQHJldHVybnMgY3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1xuICAgICAqL1xuXG4gIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMoYmFza2V0OiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgY29uc29sZS5sb2coXCJlYmFza2V0OiBjdXJyZW50IHRyYW5zYWN0aW9uIGRldGFpbHMgZm9yIGV4Y2hhbmdlc1wiLCBiYXNrZXQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzID0gW10gYXMgUHJvZHVjdFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmxpbmVQcm9tb3Rpb24gPSBbXSBhcyBMaW5lUHJvbW90aW9uc1tdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmxpbmVEaXNjb3VudCA9IFtdIGFzIExpbmVEaXNjb3VudFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cyA9IGJhc2tldC5wcm9kdWN0cztcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cyA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzLmZpbHRlcihcbiAgICAgICggICAgICBwcm9qOiB7IHJlZnVuZGVkUXVhbnRpdHk6IG51bWJlcjsgfSkgPT4gcHJvai5yZWZ1bmRlZFF1YW50aXR5ICE9IDBcbiAgICApO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdDogeyByZWZ1bmRlZFF1YW50aXR5OiBhbnk7IHF1YW50aXR5OiBhbnk7IHRvdGFsTGluZVByaWNlOiBudW1iZXI7IHJlZnVuZGVkVG90YWw6IG51bWJlcjsgdG90YWw6IGFueTsgcmVmdW5kZWQ6IGJvb2xlYW47IGxpbmVQcm9tb3Rpb25zOiBhbnk7IGxpbmVEaXNjb3VudDogYW55OyB9KSA9PiB7XG4gICAgICBpZiAocHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5KSB7XG4gICAgICAgIHByb2R1Y3QucXVhbnRpdHkgPSBwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHk7XG4gICAgICAgIC8vIHVwZGF0aW5nIHRvdGFsIGxpbmUgcHJpY2Ugd2l0aCBhY3R1YWwgcHJpY2UgdG8gYmUgcmVmdW5kZWQgaW5jbHVkaW5nIHRoZSByZWZ1bmRpbmcgcXR5XG4gICAgICAgIHByb2R1Y3QudG90YWxMaW5lUHJpY2UgPSBNYXRoLmFicyhwcm9kdWN0LnJlZnVuZGVkVG90YWwpO1xuICAgICAgICBwcm9kdWN0LnRvdGFsID0gcHJvZHVjdC50b3RhbExpbmVQcmljZTtcbiAgICAgICAgaWYgKHByb2R1Y3QucXVhbnRpdHkgPT09IHByb2R1Y3QucmVmdW5kZWRRdWFudGl0eSkge1xuICAgICAgICAgIHByb2R1Y3QucmVmdW5kZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL1VwZGF0aW5nIGxpbmUgcHJvbW90aW9ucyBhbmQgbGluZSBkaXNjb3VudHMgICAgICBcbiAgICAgIGlmIChwcm9kdWN0LmxpbmVQcm9tb3Rpb25zICYmICFwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMubGluZVByb21vdGlvbi5wdXNoKHByb2R1Y3QubGluZVByb21vdGlvbnMpXG4gICAgICB9XG4gICAgICBpZiAocHJvZHVjdC5saW5lRGlzY291bnQgJiYgIXByb2R1Y3QucmVmdW5kZWRRdWFudGl0eSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5saW5lRGlzY291bnQucHVzaChwcm9kdWN0LmxpbmVEaXNjb3VudClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKFwiZWJhc2tldDogY3VycmVudCB0cmFuc2FjdGlvbiBkZXRhaWxzIGFmdGVyIHJlbW92aW5nIG9sZCBwcm9kdWN0c1wiLCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5wcm9kdWN0cyk7XG5cbiAgICBpZiAoYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQgJiYgYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudHJhbnNhY3Rpb25EaXNjb3VudC5wdXNoKC4uLmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50KTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeSA9IHt9IGFzIEJhc2tldFN1bW1hcnk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRoaXMudXBkYXRlU2FsZVRvdGFsKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zID0gYmFza2V0LnF1YW50aXR5O1xuXG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsID0gYmFza2V0LmJhc2tldFRvdGFsO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkucmVmdW5kVG90YWwgPSB0aGlzLnVwZGF0ZUN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNSZWZ1bmRUb3RhbCgpO1xuICAgIC8vIEZvciBwYXJ0aWFsIHJlZnVuZCBkaXNjb3VudCBpcyB1cGRhdGllZCBpbiB0b3RhbCBsaW5lIHByaWNlIHNvIGRpc2NvdW50VG90YWwgd2lsbCBhbHdheXMgYmUgemVybyAmIGluIGNhc2Ugb2YgZXhjaGFuZ2UgZGlzY291bnQgdG90YWwgaXMgY2FsY3VsYXRlZFxuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfRVhDSEFOR0UpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkuZGlzY291bnRUb3RhbCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRoaXMudXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc0Rpc2NvdW50VG90YWwoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50ICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZGlzY291bnRUb3RhbCA9IDA7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQuZm9yRWFjaCgoZGlzY291bnQ6IHsgZGlzY291bnRBbW91bnQ6IG51bWJlcjsgfSkgPT4ge1xuICAgICAgICAgIGRpc2NvdW50VG90YWwgKz0gZGlzY291bnQuZGlzY291bnRBbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LmRpc2NvdW50VG90YWwgPSBNYXRoLmFicyhkaXNjb3VudFRvdGFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkuZGlzY291bnRUb3RhbCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJlYmFza2V0OnRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuXG4gIC8qKlxuICogY3VycmVudCB0cmFuc2FjdGlvbiBUYXggVG90YWxcbiAqIEByZXR1cm5zIFRheCBUb3RhbFxuICovXG5cbiAgdXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1RheEJyZWFrZG93bihiYXNrZXREZXRhaWxzOiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgbGV0IHRyYW5zYWN0aW9uRGlzY291bnRUb3RhbCA9IDA7XG4gICAgbGV0IHRheEJyZWFrZG93bjogVGF4QnJlYWtkb3duID0ge1xuICAgICAgdGF4TGluZXM6IFtdLFxuICAgICAgdG90YWxUYXhhYmxlQW1vdW50OiAwLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudHJhbnNhY3Rpb25EaXNjb3VudCAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQuZm9yRWFjaCgoZGlzY291bnQ6IHsgZGlzY291bnRBbW91bnQ6IG51bWJlcjsgfSkgPT4ge1xuICAgICAgICB0cmFuc2FjdGlvbkRpc2NvdW50VG90YWwgKz0gZGlzY291bnQuZGlzY291bnRBbW91bnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMucHJvZHVjdHMgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMucHJvZHVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdDogeyBpdGVtTGluZUlkOiBhbnk7IHNlbGVjdGVkVkFUOiBhbnk7IHNlbGVjdGVkVkFUQ29kZTogYW55OyB0b3RhbDogYW55OyByZWZ1bmRlZFF1YW50aXR5OiBudW1iZXI7IGl0ZW1EaXNjb3VudHM6IHsgY3VycmVudFJlZnVuZFBvcnRpb246IG51bWJlcjsgdHJuRGlzY291bnRzUG9ydGlvbjogbnVtYmVyOyB0cm5Qcm9tb3Rpb25zUG9ydGlvbjogbnVtYmVyOyB9OyB9KSA9PiB7XG4gICAgICAgIGxldCB0YXhMaW5lOiBUYXhMaW5lID0ge1xuICAgICAgICAgIGl0ZW1MaW5lSWQ6IHByb2R1Y3QuaXRlbUxpbmVJZCxcbiAgICAgICAgICBWQVQ6IHByb2R1Y3Quc2VsZWN0ZWRWQVQgPyBwcm9kdWN0LnNlbGVjdGVkVkFUIDogMCxcbiAgICAgICAgICBWQVRDb2RlOiBwcm9kdWN0LnNlbGVjdGVkVkFUQ29kZSxcbiAgICAgICAgICB0YXhMaW5lVG90YWw6IDAsXG4gICAgICAgICAgdGF4YWJsZUFtb3VudDogcHJvZHVjdC50b3RhbCxcbiAgICAgICAgICBQcmVUYXg6IDBcblxuICAgICAgICB9O1xuICAgICAgICBjb25zb2xlLmluZm8oXCJQcm9kdWN0IGNvbnRyaWJ1dGlvbiA6IGl0ZW0gbGluZSBJRCA6Y3VycmVudCB0cmFuc2FjdGlvbiBEZXRhaWxzXCIsXG4gICAgICAgICAgcHJvZHVjdC5pdGVtTGluZUlkLCBcInRheCBsaW5lIDpcIiwgSlNPTi5zdHJpbmdpZnkodGF4TGluZSksIEpTT04uc3RyaW5naWZ5KGJhc2tldERldGFpbHMuYmFza2V0VG90YWwpKTtcblxuICAgICAgICAvL3N0ZXAgMVxuICAgICAgICAvLyBpZiBUcmFuc2FjdGlvbiBEaXNjb3VudCBhbmQvb3IgcHJvbW90aW9uIGFwcGxpZWQsIGZpbmQgbmV0IHNlbGxpbmcgcHJpY2Ugb2YgZWFjaCBwcm9kdWN0IGFzIHRheGFibGVhbW91bnRcblxuICAgICAgICAvL0lmIHRyYW5zYWN0aW9uIGRpc2NvdW50L3Byb21vdGlvbiBpcyBhcHBsaWVkIHRheGFibGUgYW1vdW50IHNob3VsZCBiZSBkZWR1Y3RpbmcgdHJhbnNhY3Rpb24gcHJvbW90aW9uIGFuZCB0cmFuc2FjdGlvbiBkaXNhY291bnQgcG9ydGlvblxuICAgICAgICBpZiAocHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ICYmIHByb2R1Y3QucmVmdW5kZWRRdWFudGl0eSA+IDApIHtcblxuICAgICAgICAgIHRheExpbmUudGF4YWJsZUFtb3VudCA9IC1NYXRoLmFicyh0YXhMaW5lLnRheGFibGVBbW91bnQgLSBwcm9kdWN0Lml0ZW1EaXNjb3VudHMuY3VycmVudFJlZnVuZFBvcnRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRheExpbmUudGF4YWJsZUFtb3VudCA9IHRheExpbmUudGF4YWJsZUFtb3VudCAtIHByb2R1Y3QuaXRlbURpc2NvdW50cy50cm5EaXNjb3VudHNQb3J0aW9uIC0gcHJvZHVjdC5pdGVtRGlzY291bnRzLnRyblByb21vdGlvbnNQb3J0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zdGVwIDIgLSBmaW5kIHByZSB0YXhcbiAgICAgICAgdGF4TGluZS5QcmVUYXggPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMigodGF4TGluZS50YXhhYmxlQW1vdW50ICogMTAwKSAvICgxMDAgKyB0YXhMaW5lLlZBVCkpO1xuXG4gICAgICAgIC8vc3RlcCAzIC0gVXBkYXRlIHRheGJyZWFrZG93blxuICAgICAgICB0YXhCcmVha2Rvd24udG90YWxUYXhhYmxlQW1vdW50ICs9IHRheExpbmUudGF4YWJsZUFtb3VudDtcbiAgICAgICAgdGF4TGluZS50YXhhYmxlQW1vdW50ID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGF4TGluZS50YXhhYmxlQW1vdW50KTtcbiAgICAgICAgXG4gICAgICAgIC8vIHN0ZXAgNCAtIHVwZGF0ZSB0YXggTGluZSB0b3RhbFxuICAgICAgICB0YXhMaW5lLnRheExpbmVUb3RhbCA9ICB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMih0YXhMaW5lLnRheGFibGVBbW91bnQgLSB0YXhMaW5lLlByZVRheCk7XG4gICAgICAgIHRheEJyZWFrZG93bi50YXhMaW5lcy5wdXNoKHRheExpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGF4QnJlYWtkb3duLnRvdGFsVGF4YWJsZUFtb3VudCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRheEJyZWFrZG93bi50b3RhbFRheGFibGVBbW91bnQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93biA9IHRheEJyZWFrZG93bjtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudGF4QnJlYWtkb3duICYmIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93bi50YXhMaW5lcyAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy50YXhCcmVha2Rvd24udGF4TGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93bi50YXhMaW5lcy5yZWR1Y2UoXG4gICAgICAgIChuOiBhbnksIHsgdGF4TGluZVRvdGFsIH06IGFueSkgPT4gbiArIHRheExpbmVUb3RhbCxcbiAgICAgICAgMFxuICAgICAgKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCA9IDAuMDA7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJlQmFza2V0OmFmdGVyIGNhbGN1bGF0aW5nIHRheCBjdXJyZW50dHJhbnNhY3Rpb25EZXRhaWxzXCIsIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzKVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1RvdGFsVGF4U3VtbWFyeSgpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gIFxuICAgIGNvbnNvbGUubG9nKFwiVG90YWwgVGF4IFN1bW1lcnkgUmVxdWVzdCA6XCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93bikpO1xuXG4gICAgbGV0IHRvdGFsVGF4U3VtbWFyeUFycmF5OiBUb3RhbFRheFN1bW1hcnlbXSA9IFtdXG4gICAgbGV0IHRvdGFsVGF4U3VtbWFyeUdyb3VwID0gW11cblxuICAgIGNvbnNvbGUubG9nKFwiVGF4IExpbmVzIGZvciBUb3RhbCBUYXggU3VtbWVyeSA6XCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnRheEJyZWFrZG93bi50YXhMaW5lcykpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudGF4QnJlYWtkb3duLnRheExpbmVzLmZvckVhY2goKGVsZW1lbnQ6IHsgVkFUQ29kZTogYW55OyBWQVQ6IGFueTsgUHJlVGF4OiBhbnk7IHRheExpbmVUb3RhbDogYW55OyB9KSA9PiB7XG4gICAgICBsZXQgVGF4U3VtbWFyeTogVG90YWxUYXhTdW1tYXJ5ID0ge1xuICAgICAgICBWQVRDb2RlOlwiXCIsXG4gICAgICAgIFZBVDogLTEyMzQ1LFxuICAgICAgICBQcmVUYXhTdW06IDAsXG4gICAgICAgIFRheFN1bTogMCxcbiAgICAgICAgVFhyYXRlU3VtOiAwXG4gICAgICB9O1xuICAgICAgICBUYXhTdW1tYXJ5LlZBVENvZGU9ZWxlbWVudC5WQVRDb2RlO1xuICAgICAgICBUYXhTdW1tYXJ5LlZBVCA9IGVsZW1lbnQuVkFUOyAgICAgICAgXG4gICAgICAgXG4gICAgICAgIFRheFN1bW1hcnkuUHJlVGF4U3VtID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIoZWxlbWVudC5QcmVUYXgpOyAgICAgICAgXG4gICAgICAgIFRheFN1bW1hcnkuVGF4U3VtID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIoZWxlbWVudC50YXhMaW5lVG90YWwpO1xuICAgICAgICBUYXhTdW1tYXJ5LlRYcmF0ZVN1bSA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKFRheFN1bW1hcnkuUHJlVGF4U3VtICsgVGF4U3VtbWFyeS5UYXhTdW0pOyAgICAgXG4gICAgICAgIHRvdGFsVGF4U3VtbWFyeUFycmF5LnB1c2goVGF4U3VtbWFyeSk7XG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKFwiVG90YWwgVGF4IFN1bW1lcnkgIFdpdGhvdXQgR3JvdXBlZCA6IFwiLCBKU09OLnN0cmluZ2lmeSh0b3RhbFRheFN1bW1hcnlBcnJheSkpO1xuICAgIFxuICAgIHRvdGFsVGF4U3VtbWFyeUdyb3VwID0gdG90YWxUYXhTdW1tYXJ5QXJyYXkucmVkdWNlKChwcmVwYXJlZEFycmF5OmFueSxjdXJyZW50T2JqOmFueSkgPT4ge1xuICAgICAgbGV0IGluZCA9IHByZXBhcmVkQXJyYXkuZmluZEluZGV4KCh4OiB7IFZBVDogYW55OyB9KSA9PiB4LlZBVCA9PT0gY3VycmVudE9iai5WQVQpO1xuICAgICAgaWYoaW5kID09PSAtMSl7XG4gICAgICAgIHByZXBhcmVkQXJyYXkucHVzaChjdXJyZW50T2JqKVxuICAgICAgfWVsc2Uge1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVkFUQ29kZSA9IGN1cnJlbnRPYmouVkFUQ29kZTtcbiAgICAgICAgcHJlcGFyZWRBcnJheVtpbmRdLlZBVCA9IGN1cnJlbnRPYmouVkFUO1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uUHJlVGF4U3VtICs9IGN1cnJlbnRPYmouUHJlVGF4U3VtO1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVGF4U3VtICs9IGN1cnJlbnRPYmouVGF4U3VtO1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVFhyYXRlU3VtICs9IGN1cnJlbnRPYmouVFhyYXRlU3VtO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXBhcmVkQXJyYXk7XG4gICAgfSxbXSlcbiAgICAvLyBsaXN0T2ZUYWdzLm1hcCh4ID0+IHVuaXF1ZS5maWx0ZXIoYSA9PiBhLmxhYmVsID09IHgubGFiZWwgJiYgYS5jb2xvciA9PSB4LmNvbG9yKS5sZW5ndGggPiAwID8gbnVsbCA6IHVuaXF1ZS5wdXNoKHgpKTtcblxuICAgIGNvbnNvbGUubG9nKFwiVG90YWwgIFRheCBTdW1tZXIgR3JvdXAgOlwiLCBKU09OLnN0cmluZ2lmeSh0b3RhbFRheFN1bW1hcnlHcm91cCkpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMudG90YWxUYXhTdW1tYXJ5ID0gdG90YWxUYXhTdW1tYXJ5R3JvdXA7XG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBjdXJyZW50IHRyYW5zYWN0aW9uIERpc29jdW50IFRvdGFsXG4gICAqIEByZXR1cm5zIERpc2NvdW50IFRvdGFsXG4gICAqL1xuICB1cGRhdGVDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzRGlzY291bnRUb3RhbCgpIHtcbiAgICBsZXQgcmVmdW5kVG90YWwgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LnJlZnVuZFRvdGFsID8gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5yZWZ1bmRUb3RhbCA6IDA7XG5cbiAgICBjb25zb2xlLmxvZyhcImUtYmFza2V0OiB0cmFuc2FjdGlvbiBidWlsZGVyIHVwZGF0ZUN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNEaXNjb3VudFRvdGFsOiBkaXNjb3VudFRvdGFsXCIsIHJlZnVuZFRvdGFsLCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsLCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscy5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCk7XG4gICAgY29uc3QgZGlzY291bnRUb3RhbCA9XG4gICAgICBNYXRoLmFicyhcbiAgICAgICAgTWF0aC5hYnModGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMuYmFza2V0U3VtbWFyeS5zYWxlVG90YWwpIC1cbiAgICAgICAgKE1hdGguYWJzKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwpICsgTWF0aC5hYnMocmVmdW5kVG90YWwpKVxuICAgICAgKTtcbiAgICBjb25zb2xlLmxvZyhcImUtYmFza2V0OiB0cmFuc2FjdGlvbiBidWlsZGVyIHVwZGF0ZUN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNEaXNjb3VudFRvdGFsOiBkaXNjb3VudFRvdGFsXCIsIGRpc2NvdW50VG90YWwpXG4gICAgcmV0dXJuIE51bWJlcihkaXNjb3VudFRvdGFsLnRvRml4ZWQoMikpO1xuICB9XG5cbiAgLyoqXG4gICogY3VycmVudCB0cmFuc2FjdGlvbiBSZWZ1bmQgVG90YWxcbiAgKiBAcmV0dXJucyBSZWZ1bmQgVG90YWxcbiAgKi9cbiAgdXBkYXRlQ3VycmVudFRyYW5zYWN0aW9uRGV0YWlsc1JlZnVuZFRvdGFsKCkge1xuICAgIGxldCB0b3RhbFJlZnVuZCA9IDA7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgcHJvZHVjdDogUHJvZHVjdCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLnByb2R1Y3RzW2luZGV4XTtcbiAgICAgIGlmIChwcm9kdWN0LnJlZnVuZGVkVG90YWwpIHtcbiAgICAgICAgdG90YWxSZWZ1bmQgPSB0b3RhbFJlZnVuZCArIHByb2R1Y3QucmVmdW5kZWRUb3RhbDtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKFwiZWJhc2tldCA6IHRyYW5zYWN0aW9uIFNlcnZpY2U6IHRvdGFsUmVmdW5kIGZvciBDdXJyZW50IFRyYW5zYWN0aW9uRGV0YWlsc1wiICsgdG90YWxSZWZ1bmQpXG4gICAgfVxuICAgIHJldHVybiB0b3RhbFJlZnVuZDtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQmFza2V0cyBzdW1tYXJ5XG4gICAqIEBwYXJhbSBiYXNrZXREZXRhaWxzXG4gICAqIEByZXR1cm5zIHN1bW1hcnlcbiAgICovXG4gIGJhc2tldFN1bW1hcnkoYmFza2V0RGV0YWlsczogQmFza2V0KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbChiYXNrZXREZXRhaWxzLmJhc2tldFRvdGFsKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRoaXMudXBkYXRlU2FsZVRvdGFsKFxuICAgICAgYmFza2V0RGV0YWlsc1xuICAgICkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnJlZnVuZFRvdGFsID0gdGhpcy5nZXRSZWZ1bmRUb3RhbCgpO1xuICAgIGlmIChcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50IHx8XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb25cbiAgICApIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmRpc2NvdW50VG90YWwgPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMih0aGlzLnVwZGF0ZURpc2NvdW50VG90YWwoKSk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMgPSBiYXNrZXREZXRhaWxzLnF1YW50aXR5O1xuXG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24pIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMucmVkdWNlKFxuICAgICAgICAobjogYW55LCB7IHRheExpbmVUb3RhbCB9OiBhbnkpID0+IG4gKyB0YXhMaW5lVG90YWwsXG4gICAgICAgIDBcbiAgICAgICkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LlZBVFRvdGFsID0gMC4wMDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmluZm8oXCJlYmFza2V0OiBiYXNrZXRzdW1tYXJ5IHVwZGF0ZWQgaW4gdHJhbnNhY3Rpb24gZG9jdW1lbnQ6IFwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbmUgRGlzY291bnRcbiAgICogQHBhcmFtIGJhc2tldERldGFpbHNcbiAgICogQHJldHVybnMgbGluZSBEaXNjb3VudFxuICAgKi9cbiAgbGluZURpc2NvdW50KGJhc2tldERldGFpbHM6IEJhc2tldCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCA9IFtdO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBiYXNrZXREZXRhaWxzLnByb2R1Y3RzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGJhc2tldERldGFpbHMucHJvZHVjdHNbaW5kZXhdO1xuICAgICAgaWYgKGVsZW1lbnQubGluZURpc2NvdW50KSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LnB1c2goZWxlbWVudC5saW5lRGlzY291bnQpO1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBhbnlbXSwgdmFsOiB7IGl0ZW1MaW5lSWQ6IGFueTsgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhY2MuZmluZCgoZWw6IHsgaXRlbUxpbmVJZDogYW55OyB9KSA9PiBlbC5pdGVtTGluZUlkID09PSB2YWwuaXRlbUxpbmVJZCkpIHtcbiAgICAgICAgICAgICAgYWNjLnB1c2godmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25zb2xlLmluZm8oXG4gICAgICAvLyAgIFwiZS1iYXNrZXQgOmxpbmUgZGlzY291bnQgdXBkYXRlZCBpbiB0cmFuc2FjdGlvbiBkb2N1bWVudFwiLFxuICAgICAgLy8gICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudFxuICAgICAgLy8gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZXhjaGFuZ2VcbiAgICogQHBhcmFtIGJhc2tldERldGFpbHNcbiAgICogQHJldHVybnMgZXhjaGFuZ2UgXG4gICAqL1xuICBleGNoYW5nZShiYXNrZXREZXRhaWxzOiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5leGNoYW5nZSA9IGJhc2tldERldGFpbHMuZXhjaGFuZ2UgJiYgYmFza2V0RGV0YWlscy5leGNoYW5nZS5sZW5ndGggPiAwID8gWy4uLmJhc2tldERldGFpbHMuZXhjaGFuZ2VdIDogW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJhc2tldERldGFpbHMucHJvZHVjdHMubGVuZ3RoOyBpbmRleCsrKSB7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGJhc2tldERldGFpbHMucHJvZHVjdHNbaW5kZXhdO1xuICAgICAgaWYgKGVsZW1lbnQuZXhjaGFuZ2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGlzUHJlc2VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQuZXhjaGFuZ2Uuc29tZSgoZWw6IHsgZXhjaGFuZ2VJZDogYW55OyB9KSA9PiBlbC5leGNoYW5nZUlkID09PSBlbGVtZW50LmV4Y2hhbmdlLmV4Y2hhbmdlSWQpO1xuICAgICAgICBpZiAoIWlzUHJlc2VudCkge1xuICAgICAgICAgIGxldCBleGNoYW5nZUl0ZW1zID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50LmV4Y2hhbmdlLm5ld0l0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZWxlbWVudC5leGNoYW5nZS5uZXdJdGVtc1tqXTtcbiAgICAgICAgICAgIGxldCBuZXdJdGVtczogYW55ID0geyBsaW5lSXRlbUlkOiBpdGVtLml0ZW1MaW5lSWQsIFF1YW50aXR5OiBpdGVtLnF1YW50aXR5IH1cbiAgICAgICAgICAgIGV4Y2hhbmdlSXRlbXMucHVzaChuZXdJdGVtcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZW1lbnQuZXhjaGFuZ2UubmV3SXRlbXMgPSBbLi4uZXhjaGFuZ2VJdGVtc107XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5leGNoYW5nZS5wdXNoKGVsZW1lbnQuZXhjaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJlLWJhc2tldCA6VHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXI6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQgZXhjaGFuZ2VcIixcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5leGNoYW5nZSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgKiBhZGQgcHJldmlvdXMgZXhjaGFuZ2UgZGF0YVxuICAqIEBwYXJhbSBvcmlnaW5hbFRyYW5zYWN0aW9uRG9jdW1lbnRcbiAgKiBAcmV0dXJucyBsaW5lIFByb21vdGlvbnNcbiAgKi9cbiAgYWRkRXhjaGFuZ2VEYXRhKG9yaWdpbmFsVHJhbnNhY3Rpb25Eb2N1bWVudDogVHJhbnNhY3Rpb25Eb2N1bWVudCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmV4Y2hhbmdlID0gb3JpZ2luYWxUcmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5leGNoYW5nZSA/IFsuLi5vcmlnaW5hbFRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmV4Y2hhbmdlXSA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogbGluZSBQcm9tb3Rpb25zXG4gICAqIEBwYXJhbSBiYXNrZXREZXRhaWxzXG4gICAqIEByZXR1cm5zIGxpbmUgUHJvbW90aW9uc1xuICAgKi9cbiAgbGluZVByb21vdGlvbihiYXNrZXREZXRhaWxzOiBCYXNrZXQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uID0gW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJhc2tldERldGFpbHMucHJvZHVjdHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gYmFza2V0RGV0YWlscy5wcm9kdWN0c1tpbmRleF07XG4gICAgICBpZiAoZWxlbWVudC5saW5lUHJvbW90aW9ucykge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ucHVzaChcbiAgICAgICAgICBlbGVtZW50LmxpbmVQcm9tb3Rpb25zXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbiA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbi5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYW55W10sIHZhbDogeyBpdGVtTGluZUlkOiBhbnk7IH0pID0+IHtcbiAgICAgICAgICAgIGlmICghYWNjLmZpbmQoKGVsOiB7IGl0ZW1MaW5lSWQ6IGFueTsgfSkgPT4gZWwuaXRlbUxpbmVJZCA9PT0gdmFsLml0ZW1MaW5lSWQpKSB7XG4gICAgICAgICAgICAgIGFjYy5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogdHJhbnNhY3Rpb24gUHJvbW90aW9uXG4gICAqIEBwYXJhbSBiYXNrZXREZXRhaWxzXG4gICAqIEByZXR1cm5zIHRyYW5zYWN0aW9uIFByb21vdGlvblxuICAgKi9cbiAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24oYmFza2V0RGV0YWlsczogQmFza2V0KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIGlmIChiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uUHJvbW90aW9uKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uID1cbiAgICAgICAgYmFza2V0RGV0YWlscy50cmFuc2FjdGlvblByb21vdGlvbjtcbiAgICAgIC8vICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJhc2tldERldGFpbHMuVHJhbnNhY3Rpb25EaXNjb3VudC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIC8vICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5wdXNoKGVsZW1lbnQubGluZVByb21vdGlvbnMpXG4gICAgICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9ucy5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XG4gICAgICAvLyAgICAgaWYgKCFhY2MuZmluZChlbCA9PiBlbC5pdGVtTGluZUlkID09PSB2YWwuaXRlbUxpbmVJZCkpIHtcbiAgICAgIC8vICAgICAgIGFjYy5wdXNoKHZhbCk7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICAgIHJldHVybiBhY2M7XG4gICAgICAvLyAgIH0sIFtdKTtcbiAgICAgIC8vIH1cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcImUtYmFza2V0IDpUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcjogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvblwiLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0cmFuc2FjdGlvbkRpc2NvdW50KGJhc2tldERldGFpbHM6IEJhc2tldCk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICBpZiAoYmFza2V0RGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50KSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQgPVxuICAgICAgICBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQ7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcImUtYmFza2V0IDpUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcjogdHJhbnNhY3Rpb24gRGlzY291bnRcIixcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGF5bWVudHMgZGV0YWlsc1xuICAgKiBAcGFyYW0gcGF5bWVudERldGFpbHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHBheW1lbnREZXRhaWxzKHBheW1lbnREZXRhaWxzOiBhbnkpIHtcbiAgICBjb25zb2xlLmluZm8oXCJlYmFza2V0IDogcGF5bWVudCBkZXRhaWxzIGFmdGVyIHRyYW5zYWN0aW9uIGNvbXBsZXRlZFwiLEpTT04uc3RyaW5naWZ5KHBheW1lbnREZXRhaWxzKSk7XG4gICAgXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzID0gcGF5bWVudERldGFpbHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBQYXltZW50cyBkZXRhaWxzXG4gICAqIEBwYXJhbSBwYXltZW50RGV0YWlsc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgIHNwbGl0UGF5bWVudChzcGxpdFBheW1lbnQ6IGJvb2xlYW4pIHsgICAgXG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnNwbGl0UGF5bWVudCA9IHNwbGl0UGF5bWVudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBcblxuICAgLyoqXG4gICAqIFBheW1lbnRzIGRldGFpbHNcbiAgICogQHBhcmFtIHBheW1lbnREZXRhaWxzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICAgIGlzUGF5bWVudENvbXBsZXRlZChpc1BheW1lbnRDb21wbGV0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5pc1BheW1lbnRDb21wbGV0ZWQgPSBpc1BheW1lbnRDb21wbGV0ZWQ7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IFxuICBcblxuXG5cbiAgLyoqXG4gICAqIEJhc2VzIGN1cnJlbmN5XG4gICAqIEBwYXJhbSBjdXJyZW5jeVxuICAgKiBAcmV0dXJucyBjdXJyZW5jeVxuICAgKi9cbiAgYmFzZUN1cnJlbmN5KGN1cnJlbmN5OiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSA9IGN1cnJlbmN5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICogZ2lmdCBvcHRpb24gYXRcbiAgKiBAcmV0dXJucyBhdFxuICAqL1xuICBnaWZ0T3B0aW9uKGdpZnQ6IGFueSk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiZS1iYXNrZXQgOlRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuZ2lmdG9wdGlvblwiLFxuICAgICAgZ2lmdFxuICAgICk7XG4gICAgaWYgKGdpZnQpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5naWZ0ZWRSZWNlaXB0ID0gZ2lmdDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG5cbi8qKlxuICogbWFudWFsIERpc2NvdW50XG4gKiBAcGFyYW0gZGlzY291bnREYXRhXG4gKiBAcmV0dXJuc1xuICovXG5cbiAgLy8gbWFudWFsRGlzY291bnQoZGlzY291bnREYXRhIDogYmFza2V0RGlzY291bnQpOlRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgLy8gICBsZXQgc2FsZVRvdGFsID0gIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsO1xuICAvLyAgIGlmKGRpc2NvdW50RGF0YS5kaXNjb3VudFR5cGUgPT0nUGVyY2VudCcpe1xuICAvLyAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPSBzYWxlVG90YWwtKHNhbGVUb3RhbCooZGlzY291bnREYXRhLmRpc2NvdW50QW1vdW50LzEwMCkpO1xuICAvLyAgICAgZGlzY291bnREYXRhLmRpc2NvdW50QW1vdW50ID0gLTEqKHNhbGVUb3RhbC10aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5iYXNrZXRUb3RhbCk7XG4gIC8vICAgfWVsc2Uge1xuICAvLyAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPXNhbGVUb3RhbC1kaXNjb3VudERhdGEuZGlzY291bnRBbW91bnQ7XG4gIC8vICAgICBkaXNjb3VudERhdGEuZGlzY291bnRBbW91bnQgPSAtMSpkaXNjb3VudERhdGEuZGlzY291bnRBbW91bnQ7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50cmFuc2FjdGlvbkRpc2NvdW50LnB1c2goZGlzY291bnREYXRhKTtcbiAgLy8gICByZXR1cm4gdGhpcztcblxuICAvLyB9XG5cbiAgLyoqXG4gICAqIFR5cGVzIHRyYW5zYWN0aW9uIGRvY3VtZW50IGJ1aWxkZXJcbiAgICogQHBhcmFtIHRcbiAgICogQHJldHVybnMgdHlwZVxuICAgKi9cbiAgdHlwZSh0OiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPSB0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBPcGVyYXRpb25zIHN0YXR1c1xuICAgKiBAcGFyYW0gb1xuICAgKiBAcmV0dXJucyBzdGF0dXNcbiAgICovXG4gIG9wZXJhdGlvblN0YXR1cyhvOiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Lm9wZXJhdGlvblN0YXR1cyA9IG87XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZWQgYXRcbiAgICogQHJldHVybnMgYXRcbiAgICovXG4gIGNyZWF0ZWRBdCgpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdCA9IGRhdGUudG9JU09TdHJpbmcoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0ID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGVkIGF0XG4gICAqIEByZXR1cm5zIGF0XG4gICAqL1xuICB1cGRhdGVkQXQoKTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIHRyYW5zc2FjdGlvbiBjb21wbGV0aW9uIGF0XG4gICAqIEByZXR1cm5zIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gZGF0ZVxuICAgKi9cbiAgdHJhbnNhY3Rpb25Db21wbGV0ZWRBdCgpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRyYW5zQ29tcGxldGVkQXQgPSBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEJ1aWxkcyB0cmFuc2FjdGlvbiBkb2N1bWVudCBidWlsZGVyXG4gICAqIEByZXR1cm5zIGJ1aWxkXG4gICAqL1xuICBidWlsZCgpOiBUcmFuc2FjdGlvbkRvY3VtZW50IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbGVzIHRvdGFsIGluIHJlZnVuZFxuICAgKiBAcGFyYW0gc2FsZVRvdGFsXG4gICAqIEByZXR1cm5zIHRvdGFsIGluIHJlZnVuZFxuICAgKi9cbiAgc2FsZVRvdGFsSW5SZWZ1bmQoc2FsZVRvdGFsOiBudW1iZXIpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnNhbGVUb3RhbCA9IHNhbGVUb3RhbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGJhc2tldCBkZXRhaWxzXG4gICAqIEByZXR1cm5zIGJhc2tldCBkZXRhaWxzXG4gICAqL1xuICBnZXRCYXNrZXREZXRhaWxzKCk6IEJhc2tldCB7XG4gICAgY29uc29sZS5pbmZvKFwiZWJhc2tldDogR2V0dGluZyBCYXNrZXQgZm9yIHRyYW5zYWN0aW9uRG9jdW1lbnRcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50KSk7XG5cbiAgICBsZXQgYmFza2V0OiBCYXNrZXQgPSB7XG4gICAgICBzdWJzaWRpYXJ5SWQgOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuc3Vic2lkaWFyeUlkLFxuICAgICAgdHJhbnNhY3Rpb25EaXNjb3VudDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50LFxuICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24sXG4gICAgICB0cmFuc2FjdGlvbklkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHJhbnNhY3Rpb25JZCxcbiAgICAgIG9mZmxpbmVUcmFuc2FjdGlvbklkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQub2ZmbGluZVRyYW5zYWN0aW9uSWQsXG4gICAgICB0b3RhbDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwsXG4gICAgICBiYXNrZXRUb3RhbDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwsXG4gICAgICBkaXNjb3VudFRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsLFxuICAgICAgc2FsZVRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5zYWxlVG90YWwsXG4gICAgICByZWZ1bmRUb3RhbDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkucmVmdW5kVG90YWwsXG4gICAgICBxdWFudGl0eTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyxcbiAgICAgIHByb2R1Y3RzOiBbXSxcbiAgICAgIGJhc2VDdXJyZW5jeTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcbiAgICAgIGN1c3RvbWVyOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VzdG9tZXIsXG4gICAgfTtcblxuICAgIGJhc2tldC5wcm9kdWN0cyA9IFtdIGFzIFByb2R1Y3RbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3Q6IHsgU0tVOiBhbnk7IGJhckNvZGU6IGFueTsgYmFyY29kZXM6IGFueTsgZGVzY3JpcHRpb246IGFueTsgaW1hZ2VVcmxzOiBhbnk7IHRvdGFsTGluZVByaWNlOiBhbnk7IGl0ZW1MaW5lSWQ6IGFueTsgZXhjbHVkZVByb21vdGlvbjogYW55OyBwcmljZTogYW55OyBxdWFudGl0eTogYW55OyBzZWxlY3RlZFJSUFByaWNlOiBhbnk7IGZ1bGxmaWxtZW50SWQ6IGFueTsgZnVsbGZpbG1lbnRMb2NhdGlvbk5hbWU6IGFueTsgZGVsaXZlcnlHcm91cDogc3RyaW5nOyBsZWFkVGltZTogYW55OyBkZWxpdmVyeU1ldGhvZDogYW55OyBnaWZ0Q2FyZDogYW55OyBnaWZ0Q2FyZEV4cGlyeURhdGU6IGFueTsgZ2lmdENhcmROdW1iZXJJc3N1ZWQ6IGFueTsgZ2lmdENhcmRSZWNpcGllbnRFbWFpbDogYW55OyBnaWZ0Q2FyZFJlY2lwaWVudE5hbWU6IGFueTsgcmVmdW5kZWRUb3RhbDogYW55OyByZWZ1bmRlZFF1YW50aXR5OiBudW1iZXI7IHJlZnVuZGVkUmVhc29uRGVzY3JpcHRpb246IGFueTsgcmVmdW5kZWRSZWFzb246IGFueTsgcmVmdW5kZWRQcm9tb3Rpb25hbFF1YW50aXR5OiBhbnk7IGlzTGFzdEV4Y2hhbmdlZDogYW55OyB9LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwcm9kdWN0KSwgXCJlYmFza2V0OiBiYXNrZXQgZGV0YWlsIHVwZGF0ZSBpbiBiYXNrZXRcIik7XG4gICAgICBjb25zdCBwID0ge30gYXMgYW55O1xuICAgICAgcC5TS1UgPSBwcm9kdWN0LlNLVTtcbiAgICAgIHAuYmFyY29kZSA9IHByb2R1Y3QuYmFyQ29kZTtcbiAgICAgIHAuYmFyY29kZXMgPSBwcm9kdWN0LmJhcmNvZGVzO1xuXG4gICAgICBwLmRlc2NyaXB0aW9uID0gcHJvZHVjdC5kZXNjcmlwdGlvbjtcbiAgICAgIHAuaW1hZ2VVcmxzID0gcHJvZHVjdC5pbWFnZVVybHM7XG4gICAgICBwLmN1cnJlbmN5ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeTtcbiAgICAgIHAudG90YWxMaW5lUHJpY2UgPSBwcm9kdWN0LnRvdGFsTGluZVByaWNlO1xuICAgICAgcC5pdGVtTGluZUlkID0gTnVtYmVyKHByb2R1Y3QuaXRlbUxpbmVJZCk7XG4gICAgICBwLmV4Y2x1ZGVQcm9tb3Rpb24gPSBwcm9kdWN0LmV4Y2x1ZGVQcm9tb3Rpb247XG5cbiAgICAgIHAuc2VsZWN0ZWRQcmljZSA9IHByb2R1Y3QucHJpY2U7XG4gICAgICBwLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcbiAgICAgIHAudG90YWwgPSBwcm9kdWN0LnRvdGFsTGluZVByaWNlO1xuICAgICAgcC5zZWxlY3RlZFJSUFByaWNlID0gcHJvZHVjdC5zZWxlY3RlZFJSUFByaWNlO1xuXG4gICAgICBwLmZ1bGxmaWxtZW50SWQgPSBwcm9kdWN0LmZ1bGxmaWxtZW50SWQ7XG4gICAgICBwLmZ1bGxmaWxtZW50TG9jYXRpb25OYW1lID0gcHJvZHVjdC5mdWxsZmlsbWVudExvY2F0aW9uTmFtZTtcbiAgICAgIHAuZGVsaXZlcnlHcm91cCA9IHByb2R1Y3QuZGVsaXZlcnlHcm91cCB8fCBcIjFcIjtcbiAgICAgIHAubGVhZFRpbWUgPSBwcm9kdWN0LmxlYWRUaW1lO1xuICAgICAgcC5kZWxpdmVyeU1ldGhvZCA9IHByb2R1Y3QuZGVsaXZlcnlNZXRob2QgfHwgREVMSVZFUllfTUVUSE9EUy5DT0xMRUNUX0ZST01fU1RPUkUudG9TdHJpbmcoKTtcblxuICAgICAgaWYocC5mdWxsZmlsbWVudElkICE9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkKVxuICAgICAge1xuICAgICAgICBwLmlzV2ViT3JkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIFxuICAgICAgcC5naWZ0Q2FyZCA9IHByb2R1Y3QuZ2lmdENhcmQ7XG4gICAgICBwLmdpZnRDYXJkRXhwaXJ5RGF0ZSA9IHByb2R1Y3QuZ2lmdENhcmRFeHBpcnlEYXRlO1xuICAgICAgcC5naWZ0Q2FyZE51bWJlcklzc3VlZCA9IHByb2R1Y3QuZ2lmdENhcmROdW1iZXJJc3N1ZWQ7XG4gICAgICBwLmdpZnRDYXJkUmVjaXBpZW50RW1haWwgPSBwcm9kdWN0LmdpZnRDYXJkUmVjaXBpZW50RW1haWw7XG4gICAgICBwLmdpZnRDYXJkUmVjaXBpZW50TmFtZSA9IHByb2R1Y3QuZ2lmdENhcmRSZWNpcGllbnROYW1lO1xuICAgICAgXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ICYmXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5mb3JFYWNoKChsaW5lRGlzY291bnQ6IHsgaXRlbUxpbmVJZDogeyB0b1N0cmluZzogKCkgPT4gYW55OyB9OyBkaXNjb3VudGVkTGluZVByaWNlOiBhbnk7IH0pID0+IHtcbiAgICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkID09PSBsaW5lRGlzY291bnQuaXRlbUxpbmVJZC50b1N0cmluZygpKSB7XG4gICAgICAgICAgICBwLmxpbmVEaXNjb3VudCA9IGxpbmVEaXNjb3VudDtcbiAgICAgICAgICAgIHAudG90YWwgPSBsaW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbiAmJlxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbi5mb3JFYWNoKChsaW5lUHJvbW90aW9uOiB7IGl0ZW1MaW5lSWQ6IHsgdG9TdHJpbmc6ICgpID0+IGFueTsgfTsgcHJvbW90aW9uTGluZVByaWNlOiBhbnk7IH0pID0+IHtcbiAgICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkID09PSBsaW5lUHJvbW90aW9uLml0ZW1MaW5lSWQudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgcC5saW5lUHJvbW90aW9ucyA9IGxpbmVQcm9tb3Rpb247XG4gICAgICAgICAgICBwLnRvdGFsID0gbGluZVByb21vdGlvbi5wcm9tb3Rpb25MaW5lUHJpY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93biAmJlxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRheEJyZWFrZG93bi50YXhMaW5lcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZm9yRWFjaCgodGF4TGluZTogeyBpdGVtTGluZUlkOiB7IHRvU3RyaW5nOiAoKSA9PiBhbnk7IH07IFZBVDogYW55OyBWQVRDb2RlOiBhbnk7IH0pID0+IHtcbiAgICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkICYmIHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gdGF4TGluZS5pdGVtTGluZUlkLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHAuc2VsZWN0ZWRWQVQgPSB0YXhMaW5lLlZBVDtcbiAgICAgICAgICAgIHAuc2VsZWN0ZWRWQVRDb2RlID0gdGF4TGluZS5WQVRDb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5SRUZVTkQpIHtcbiAgICAgICAgcC50b3RhbCA9IHByb2R1Y3QucmVmdW5kZWRUb3RhbDtcbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlNBTEVfUkVGVU5EIHx8IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9FWENIQU5HRSkgJiYgcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ID4gMCkge1xuICAgICAgICBwLnJlZnVuZGVkUmVhc29uRGVzY3JpcHRpb24gPSBwcm9kdWN0LnJlZnVuZGVkUmVhc29uRGVzY3JpcHRpb247XG4gICAgICAgIHAucmVmdW5kZWRSZWFzb24gPSBwcm9kdWN0LnJlZnVuZGVkUmVhc29uO1xuICAgICAgICBpZiAoIXAucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbikge1xuICAgICAgICAgIHAucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiA9IHAucmVmdW5kZWRSZWFzb247XG4gICAgICAgIH1cbiAgICAgICAgcC5yZWZ1bmRlZFF1YW50aXR5ID0gcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5O1xuICAgICAgICBwLnJlZnVuZFByb21vdGlvbmFsUXVhbnRpdHkgPSBwcm9kdWN0LnJlZnVuZGVkUHJvbW90aW9uYWxRdWFudGl0eTtcbiAgICAgICAgcC5yZWZ1bmRlZFRvdGFsID0gcHJvZHVjdC5yZWZ1bmRlZFRvdGFsO1xuICAgICAgICBwLnRvdGFsIC09IE1hdGguYWJzKHAucmVmdW5kZWRUb3RhbCk7XG4gICAgICAgIHAuaXNMYXN0RXhjaGFuZ2VkID0gcHJvZHVjdC5pc0xhc3RFeGNoYW5nZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5SRUZVTkQpIHtcbiAgICAgICAgaWYgKHAudG90YWwgPiAwKSB7XG4gICAgICAgICAgcC50b3RhbCAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBiYXNrZXQucHJvZHVjdHMucHVzaChwKTtcblxuICAgIH0pO1xuXG4gICAgYmFza2V0ID0gdGhpcy5nZXRUcmFuc2FjdGlvbkRpc2NvdW50QW5kVHJhbnNhY3Rpb25Qcm9tb3Rpb25Qb3J0aW9uKGJhc2tldCk7XG4gICAgYmFza2V0LnRvdGFsID0gKGJhc2tldC5iYXNrZXRUb3RhbCB8fCAwKSArIHRoaXMuZ2V0VG90YWxEaXNjb3VudFdpdGhUcmFuc2FjdGlvbkRpc2NvdW50c0FuZFByb21vdGlvbnMoYmFza2V0KTtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9SRUZVTkQpIHtcbiAgICAgIGJhc2tldC5xdWFudGl0eSA9IHRoaXMuZ2V0UmVmdW5kZWRUb3RhbFdpdGhRdWFudGl0eShiYXNrZXQpO1xuICAgIH1cbiAgICBjb25zb2xlLmluZm8oXCJlYmFza2V0OiBCYXNrZXQgY3JlYXRlZCBzdWNjZXNzZnVsbHlcIiwgSlNPTi5zdHJpbmdpZnkoYmFza2V0KSlcbiAgICByZXR1cm4gYmFza2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYmFza2V0IGRldGFpbHNcbiAgICogQHJldHVybnMgcmVmdW5kIGJhc2tldCBkZXRhaWxzXG4gICAqL1xuICAvLyBnZXRSZWZ1bmRCYXNrZXREZXRhaWxzKCk6IEJhc2tldCB7XG4gIC8vICAgbGV0IGJhc2tldDogQmFza2V0ID0ge1xuICAvLyAgICAgc3Vic2lkaWFyeUlkIDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN1YnNpZGlhcnlJZCxcbiAgLy8gICAgIHRyYW5zYWN0aW9uRGlzY291bnQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCxcbiAgLy8gICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLFxuICAvLyAgICAgdHJhbnNhY3Rpb25JZDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRyYW5zYWN0aW9uSWQsXG4gIC8vICAgICB0b3RhbDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwsXG4gIC8vICAgICBiYXNrZXRUb3RhbDogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwsXG4gIC8vICAgICBkaXNjb3VudFRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsLFxuICAvLyAgICAgc2FsZVRvdGFsOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5zYWxlVG90YWwsXG4gIC8vICAgICBxdWFudGl0eTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyxcbiAgLy8gICAgIHByb2R1Y3RzOiBbXSxcbiAgLy8gICAgIGJhc2VDdXJyZW5jeTogdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2VDdXJyZW5jeSxcbiAgLy8gICAgIGN1c3RvbWVyOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VzdG9tZXIsXG4gIC8vICAgfTtcblxuICAvLyAgIGJhc2tldC5wcm9kdWN0cyA9IFtdIGFzIFByb2R1Y3RbXTtcbiAgLy8gICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3Q6IHsgU0tVOiBhbnk7IGJhckNvZGU6IGFueTsgYmFyY29kZXM6IGFueTsgZGVzY3JpcHRpb246IGFueTsgaW1hZ2VVcmxzOiBhbnk7IHRvdGFsTGluZVByaWNlOiBhbnk7IGl0ZW1MaW5lSWQ6IGFueTsgZXhjbHVkZVByb21vdGlvbjogYW55OyBwcmljZTogbnVtYmVyOyBxdWFudGl0eTogYW55OyBzZWxlY3RlZFJSUFByaWNlOiBhbnk7IGZ1bGxmaWxtZW50SWQ6IGFueTsgZnVsbGZpbG1lbnRMb2NhdGlvbk5hbWU6IGFueTsgZGVsaXZlcnlHcm91cDogc3RyaW5nOyBsZWFkVGltZTogYW55OyBkZWxpdmVyeU1ldGhvZDogYW55OyBnaWZ0Q2FyZDogYW55OyBnaWZ0Q2FyZEV4cGlyeURhdGU6IGFueTsgZ2lmdENhcmROdW1iZXJJc3N1ZWQ6IGFueTsgZ2lmdENhcmRSZWNpcGllbnRFbWFpbDogYW55OyBnaWZ0Q2FyZFJlY2lwaWVudE5hbWU6IGFueTsgaXRlbURpc2NvdW50czogYW55OyByZWZ1bmRlZFByb21vdGlvbmFsUXVhbnRpdHk6IGFueTsgcmVmdW5kZWRRdWFudGl0eTogbnVtYmVyOyByZWZ1bmRlZDogYW55OyBpc0xhc3RFeGNoYW5nZWQ6IGFueTsgZXhjaGFuZ2U6IGFueTsgcmVmdW5kZWRUb3RhbDogbnVtYmVyOyB9LCBpbmRleDogYW55KSA9PiB7XG4gIC8vICAgICBjb25zdCBwID0ge30gYXMgUHJvZHVjdDtcbiAgLy8gICAgIHAuU0tVID0gcHJvZHVjdC5TS1U7XG4gIC8vICAgICBwLmJhcmNvZGUgPSBwcm9kdWN0LmJhckNvZGU7XG4gIC8vICAgICBwLmJhcmNvZGVzID0gcHJvZHVjdC5iYXJjb2RlcztcblxuICAvLyAgICAgcC5kZXNjcmlwdGlvbiA9IHByb2R1Y3QuZGVzY3JpcHRpb247XG4gIC8vICAgICBwLmltYWdlVXJscyA9IHByb2R1Y3QuaW1hZ2VVcmxzO1xuICAvLyAgICAgcC5jdXJyZW5jeSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3k7XG4gIC8vICAgICBwLnRvdGFsTGluZVByaWNlID0gcHJvZHVjdC50b3RhbExpbmVQcmljZTtcbiAgLy8gICAgIHAuaXRlbUxpbmVJZCA9IE51bWJlcihwcm9kdWN0Lml0ZW1MaW5lSWQpO1xuICAvLyAgICAgcC5leGNsdWRlUHJvbW90aW9uID0gcHJvZHVjdC5leGNsdWRlUHJvbW90aW9uO1xuXG4gIC8vICAgICBwLnNlbGVjdGVkUHJpY2UgPSBwcm9kdWN0LnByaWNlO1xuICAvLyAgICAgcC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XG4gIC8vICAgICBwLnRvdGFsID0gcHJvZHVjdC50b3RhbExpbmVQcmljZTtcbiAgLy8gICAgIHAuc2VsZWN0ZWRSUlBQcmljZSA9IHByb2R1Y3Quc2VsZWN0ZWRSUlBQcmljZTtcblxuICAvLyAgICAgcC5mdWxsZmlsbWVudElkID0gcHJvZHVjdC5mdWxsZmlsbWVudElkO1xuICAvLyAgICAgcC5mdWxsZmlsbWVudExvY2F0aW9uTmFtZSA9IHByb2R1Y3QuZnVsbGZpbG1lbnRMb2NhdGlvbk5hbWU7XG4gIC8vICAgICBwLmRlbGl2ZXJ5R3JvdXAgPSBwcm9kdWN0LmRlbGl2ZXJ5R3JvdXAgfHwgXCIxXCI7XG4gIC8vICAgICBwLmxlYWRUaW1lID0gcHJvZHVjdC5sZWFkVGltZTtcbiAgLy8gICAgIHAuZGVsaXZlcnlNZXRob2QgPSBwcm9kdWN0LmRlbGl2ZXJ5TWV0aG9kIHx8IERFTElWRVJZX01FVEhPRFMuQ09MTEVDVF9GUk9NX1NUT1JFLnRvU3RyaW5nKCk7XG5cbiAgLy8gICAgIHAuZ2lmdENhcmQgPSBwcm9kdWN0LmdpZnRDYXJkO1xuICAvLyAgICAgcC5naWZ0Q2FyZEV4cGlyeURhdGUgPSBwcm9kdWN0LmdpZnRDYXJkRXhwaXJ5RGF0ZTtcbiAgLy8gICAgIHAuZ2lmdENhcmROdW1iZXJJc3N1ZWQgPSBwcm9kdWN0LmdpZnRDYXJkTnVtYmVySXNzdWVkO1xuICAvLyAgICAgcC5naWZ0Q2FyZFJlY2lwaWVudEVtYWlsID0gcHJvZHVjdC5naWZ0Q2FyZFJlY2lwaWVudEVtYWlsO1xuICAvLyAgICAgcC5naWZ0Q2FyZFJlY2lwaWVudE5hbWUgPSBwcm9kdWN0LmdpZnRDYXJkUmVjaXBpZW50TmFtZTtcbiAgICAgIFxuICAgICAgXG4gIC8vICAgICBpZihwLmZ1bGxmaWxtZW50SWQgIT0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQpXG4gIC8vICAgICB7XG4gIC8vICAgICAgIHAuaXNXZWJPcmRlciA9IHRydWU7XG4gIC8vICAgICB9XG4gICAgICBcbiAgLy8gICAgIGlmIChwcm9kdWN0Lml0ZW1EaXNjb3VudHMpIHtcbiAgLy8gICAgICAgcC5pdGVtRGlzY291bnRzID0gcHJvZHVjdC5pdGVtRGlzY291bnRzIGFzIEl0ZW1EaXNjb3VudDtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgLy8gaWYoIXAuaXRlbURpc2NvdW50cyl7XG4gIC8vICAgICAvLyAgIGNvbnNvbGUubG9nKHAuaXRlbURpc2NvdW50cyk7XG5cbiAgLy8gICAgIC8vICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRyYW5zYWN0aW9uRGlzY291bnRBbmRQcm9tb3Rpb25Qcm9kdWN0b3J0aW9uQ2FsY3VsYXRpb24oYmFza2V0KTtcbiAgLy8gICAgIC8vIH1cbiAgLy8gICAgIHAucmVmdW5kUHJvbW90aW9uYWxRdWFudGl0eSA9IHByb2R1Y3QucmVmdW5kZWRQcm9tb3Rpb25hbFF1YW50aXR5ID8gcHJvZHVjdC5yZWZ1bmRlZFByb21vdGlvbmFsUXVhbnRpdHkgOiAwO1xuXG4gIC8vICAgICBpZiAocHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5KSB7XG4gIC8vICAgICAgIHAucXVhbnRpdHkgPSBwLnF1YW50aXR5IC0gcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5O1xuICAvLyAgICAgICBwLnRvdGFsTGluZVByaWNlID0gKHAucXVhbnRpdHkgKiBwcm9kdWN0LnByaWNlKTtcbiAgLy8gICAgICAgcC50b3RhbCA9IHAudG90YWxMaW5lUHJpY2U7XG4gIC8vICAgICAgIC8vIHAucmVmdW5kUHJvbW90aW9uYWxRdWFudGl0eSA9IHByb2R1Y3QucmVmdW5kZWRQcm9tb3Rpb25hbFF1YW50aXR5O1xuICAvLyAgICAgICBwLnJlZnVuZGVkID0gcHJvZHVjdC5yZWZ1bmRlZDtcbiAgLy8gICAgICAgcC5pc0xhc3RFeGNoYW5nZWQgPSBwcm9kdWN0LmlzTGFzdEV4Y2hhbmdlZDtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGlmIChwcm9kdWN0LmV4Y2hhbmdlKSB7XG4gIC8vICAgICAgIHAuZXhjaGFuZ2UgPSBwcm9kdWN0LmV4Y2hhbmdlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ICYmXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50Lmxlbmd0aCA+IDBcbiAgLy8gICAgICkge1xuXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmZvckVhY2goKGxpbmVEaXNjb3VudDogeyBpdGVtTGluZUlkOiB7IHRvU3RyaW5nOiAoKSA9PiBhbnk7IH07IGRpc2NvdW50ZWRMaW5lUHJpY2U6IGFueTsgfSkgPT4ge1xuXG4gIC8vICAgICAgICAgaWYgKHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gbGluZURpc2NvdW50Lml0ZW1MaW5lSWQudG9TdHJpbmcoKSAmJiBwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkgPiAwKSB7XG4gIC8vICAgICAgICAgICBwLmxpbmVEaXNjb3VudCA9IE9iamVjdC5hc3NpZ24oe30sIGxpbmVEaXNjb3VudCk7XG4gIC8vICAgICAgICAgICBwLmxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlID0gcC5saW5lRGlzY291bnQudW5pdFByaWNlICogcC5xdWFudGl0eVxuICAvLyAgICAgICAgICAgcC5saW5lRGlzY291bnQuZGlzY291bnRBbW91bnQgPSBwLnRvdGFsIC0gcC5saW5lRGlzY291bnQuZGlzY291bnRlZExpbmVQcmljZVxuICAvLyAgICAgICAgICAgcC50b3RhbCA9IHAubGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2U7XG4gIC8vICAgICAgICAgfSBlbHNlIGlmIChwcm9kdWN0Lml0ZW1MaW5lSWQgPT09IGxpbmVEaXNjb3VudC5pdGVtTGluZUlkLnRvU3RyaW5nKCkpIHtcbiAgLy8gICAgICAgICAgIHAubGluZURpc2NvdW50ID0gbGluZURpc2NvdW50O1xuICAvLyAgICAgICAgICAgcC50b3RhbCA9IGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlXG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24gJiZcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmxlbmd0aCA+IDBcbiAgLy8gICAgICkge1xuICAvLyAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24uZm9yRWFjaCgobGluZVByb21vdGlvbjogeyBpdGVtTGluZUlkOiB7IHRvU3RyaW5nOiAoKSA9PiBhbnk7IH07IHJlZnVuZGVkOiBhbnk7IH0pID0+IHtcbiAgLy8gICAgICAgICBpZiAocHJvZHVjdC5pdGVtTGluZUlkID09PSBsaW5lUHJvbW90aW9uLml0ZW1MaW5lSWQudG9TdHJpbmcoKSAmJiAhbGluZVByb21vdGlvbi5yZWZ1bmRlZCkge1xuICAvLyAgICAgICAgICAgcC5saW5lUHJvbW90aW9ucyA9IGxpbmVQcm9tb3Rpb247XG4gIC8vICAgICAgICAgICBwLnRvdGFsID0gcC5saW5lUHJvbW90aW9ucy5wcm9tb3Rpb25MaW5lUHJpY2U7XG4gIC8vICAgICAgICAgICBwLnRvdGFsID0gcC50b3RhbCAtIChwcm9kdWN0LnJlZnVuZGVkVG90YWwgPyBNYXRoLmFicyhwcm9kdWN0LnJlZnVuZGVkVG90YWwpIDogMCk7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgcC5yZWZ1bmRlZFF1YW50aXR5ID0gMDtcbiAgLy8gICAgIHAucmVmdW5kZWRUb3RhbCA9IDA7XG5cbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24gJiZcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMubGVuZ3RoID4gMFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZvckVhY2goKHRheExpbmU6IHsgaXRlbUxpbmVJZDogeyB0b1N0cmluZzogKCkgPT4gYW55OyB9OyBWQVQ6IGFueTsgVkFUQ29kZTogYW55OyB9KSA9PiB7XG4gIC8vICAgICAgICAgaWYgKHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gdGF4TGluZS5pdGVtTGluZUlkLnRvU3RyaW5nKCkpIHtcbiAgLy8gICAgICAgICAgIHAuc2VsZWN0ZWRWQVQgPSB0YXhMaW5lLlZBVDtcbiAgLy8gICAgICAgICAgIHAuc2VsZWN0ZWRWQVRDb2RlID0gdGF4TGluZS5WQVRDb2RlO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGlmIChwLnF1YW50aXR5ID4gMCkge1xuICAvLyAgICAgICBiYXNrZXQucHJvZHVjdHMucHVzaChwKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KTtcbiAgLy8gICAvLyBwcm9kdWN0Lml0ZW1EaXNjb3VudHNcbiAgLy8gICBpZiAoIWJhc2tldC5wcm9kdWN0c1swXS5oYXNPd25Qcm9wZXJ0eSgnaXRlbURpc2NvdW50cycpKSB7XG4gIC8vICAgICBiYXNrZXQgPSB0aGlzLmdldFRyYW5zYWN0aW9uRGlzY291bnRBbmRUcmFuc2FjdGlvblByb21vdGlvblBvcnRpb24oYmFza2V0KTtcblxuICAvLyAgIH1cblxuICAvLyAgIGNvbnNvbGUubG9nKFwiZWJhc2tldCA6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyICA6bmV3IGNyZWF0ZWQgcmVmdW5kZWQgYmFza2V0XCIsIEpTT04uc3RyaW5naWZ5KGJhc2tldCkpXG4gIC8vICAgYmFza2V0LnF1YW50aXR5ID0gYmFza2V0LnByb2R1Y3RzLnJlZHVjZShcbiAgLy8gICAgIChuOiBhbnksIHsgcXVhbnRpdHkgfTogYW55KSA9PiBuICsgcXVhbnRpdHksXG4gIC8vICAgICAwXG4gIC8vICAgKTtcbiAgLy8gICBiYXNrZXQudG90YWwgPSB0aGlzLmdldFRvdGFsV2l0aExpbmVEaXNjb3VudEFuZExpbmVQcm9tb3Rpb25BcHBsaWVkKGJhc2tldCk7XG4gIC8vICAgYmFza2V0LmJhc2tldFRvdGFsID0gYmFza2V0LnRvdGFsO1xuICAvLyAgIGJhc2tldC5iYXNrZXRUb3RhbCA9IGJhc2tldC5iYXNrZXRUb3RhbCAtIHRoaXMuZ2V0VG90YWxEaXNjb3VudFdpdGhUcmFuc2FjdGlvbkRpc2NvdW50c0FuZFByb21vdGlvbnMoYmFza2V0KTtcbiAgLy8gICBjb25zb2xlLmxvZyhcbiAgLy8gICAgIFwiZWJhc2tldCA6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIDogdXBkYXRlIEJhc2tldCBUb3RhbDogYWZ0ZXIgcHJvbW90aW9uIDpiYXNrZXRUb3RhbFwiLFxuICAvLyAgICAgYmFza2V0LmJhc2tldFRvdGFsXG4gIC8vICAgKTtcblxuICAvLyAgIGNvbnNvbGUubG9nKFxuICAvLyAgICAgXCJlOmJhc2tldCA6VHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgOiBiYXNrZXREZXRhaWxzIHVwZGF0ZWQgdmFsdWVzXCIsXG4gIC8vICAgICBKU09OLnN0cmluZ2lmeShiYXNrZXQpXG4gIC8vICAgKTtcbiAgLy8gICByZXR1cm4gYmFza2V0O1xuICAvLyB9XG5cblxuICBnZXRUcmFuc2FjdGlvbkRpc2NvdW50QW5kVHJhbnNhY3Rpb25Qcm9tb3Rpb25Qb3J0aW9uKGJhc2tldDphbnkpIHtcbiAgICBpZiAoXG4gICAgICBiYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudCAmJlxuICAgICAgYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQuZm9yRWFjaCgoZGlzY291bnQ6IHsgaXRlbUxpbmVJZHM6IGFueTsgfSkgPT4ge1xuICAgICAgICBpZiAoIWRpc2NvdW50Lml0ZW1MaW5lSWRzKSB7XG4gICAgICAgICAgZGlzY291bnQuaXRlbUxpbmVJZHMgPSBiYXNrZXQucHJvZHVjdHMubWFwKChwcm9kdWN0OiB7IGl0ZW1MaW5lSWQ6IGFueTsgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByb2R1Y3QuaXRlbUxpbmVJZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJhc2tldCA9IHRoaXMuYmFza2V0U2VydmljZS50cmFuc2FjdGlvbkRpc2NvdW50UHJvZHVjdFBvcnRpb25DYWxjKGJhc2tldCwgZGlzY291bnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiAmJlxuICAgICAgYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5mb3JFYWNoKCh0UHJvbW90aW9uOiB7IGl0ZW1MaW5lSWRzOiBhbnk7IH0pID0+IHtcbiAgICAgICAgaWYgKCF0UHJvbW90aW9uLml0ZW1MaW5lSWRzKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gYmFza2V0LnByb2R1Y3RzLmZpbHRlcihcbiAgICAgICAgICAgIChpdGVtOiB7IGV4Y2x1ZGVQcm9tb3Rpb246IGJvb2xlYW47IH0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXhjbHVkZVByb21vdGlvbiA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRQcm9tb3Rpb24uaXRlbUxpbmVJZHMgPVxuICAgICAgICAgICAgZmlsdGVyZWREYXRhLm1hcCgocHJvZHVjdDogeyBpdGVtTGluZUlkOiBhbnk7IH0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2R1Y3QuaXRlbUxpbmVJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYmFza2V0ID0gdGhpcy5iYXNrZXRTZXJ2aWNlLnRyYW5zYWN0aW9uUHJvbW90aW9uUHJvZHVjdFBvcnRpb25DYWxjKGJhc2tldCwgdFByb21vdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFza2V0O1xuICB9XG5cblxuICBnZXRUb3RhbERpc2NvdW50V2l0aFRyYW5zYWN0aW9uRGlzY291bnRzQW5kUHJvbW90aW9ucyhiYXNrZXREZXRhaWxzOiBhbnkpIHtcblxuICAgIGxldCBkaXNjb3VudFRvdGFsID0gMDtcbiAgICBpZiAoXG4gICAgICBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uUHJvbW90aW9uICYmXG4gICAgICBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uUHJvbW90aW9uLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGRpc2NvdW50VG90YWwgKz0gYmFza2V0RGV0YWlscy50cmFuc2FjdGlvblByb21vdGlvbi5yZWR1Y2UoXG4gICAgICAgIChuOiBhbnksIHsgcHJvbW90aW9uQW1vdW50IH06IGFueSkgPT4gbiArIHByb21vdGlvbkFtb3VudCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYmFza2V0RGV0YWlscy50cmFuc2FjdGlvbkRpc2NvdW50ICYmXG4gICAgICBiYXNrZXREZXRhaWxzLnRyYW5zYWN0aW9uRGlzY291bnQubGVuZ3RoID4gMFxuICAgICkge1xuXG4gICAgICBkaXNjb3VudFRvdGFsICs9IGJhc2tldERldGFpbHMudHJhbnNhY3Rpb25EaXNjb3VudC5yZWR1Y2UoXG4gICAgICAgIChuOiBhbnksIHsgZGlzY291bnRBbW91bnQgfTogYW55KSA9PiBuICsgZGlzY291bnRBbW91bnQsXG4gICAgICAgIDBcbiAgICAgICk7XG5cblxuICAgIH1cbiAgICBjb25zb2xlLmxvZyhcImViYXNrZXQgOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciA6IFRyYW5zYWN0aW9uIGRpc2NvdW50IFRvdGFsOlwiLCBkaXNjb3VudFRvdGFsKTtcblxuICAgIHJldHVybiBkaXNjb3VudFRvdGFsO1xuICB9XG5cblxuICBhcHBlbmRDdXJyZW5jeVN5bWJvbChjdXJyZW5jeTogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgLy8gIHZhbHVlPXRoaXMuZGVjaW1hbHBpcGUudHJhbnNmb3JtKHZhbHVlLCcxLjInKTtcbiAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgY29uc3QgcmV0dXJudmFsID0gY3VycmVuY3kgKyB2YWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKHJldHVybnZhbCwgXCJlYmFza2V0OiBhZGQgY3VycmVuY3kgd2l0aCB2YWx1ZVwiKTtcbiAgICAgIHJldHVybiByZXR1cm52YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJldHVybnZhbCA9IFwiLVwiICsgKGN1cnJlbmN5ICsgdmFsdWUgKiAtMSk7XG4gICAgICBjb25zb2xlLmxvZyhyZXR1cm52YWwsIFwiLShjdXJyZW5jeSsodmFsdWUqLTEpKVwiKTtcbiAgICAgIHJldHVybiByZXR1cm52YWw7XG4gICAgfVxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFVwZGF0ZXMgdG90YWwgcmVmdW5kXG4gIC8vICAqIEByZXR1cm5zIHRvdGFsIHJlZnVuZFxuICAvLyAgKi9cbiAgLy8gdXBkYXRlVG90YWxSZWZ1bmQoKTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4ge1xuICAvLyAgICAgcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcbiAgLy8gICAgIHByb2R1Y3QucmVmdW5kZWRUb3RhbCA9IHByb2R1Y3QudG90YWxMaW5lUHJpY2UgKiAtMTtcbiAgLy8gICAgIGNvbnNvbGUubG9nKFxuICAvLyAgICAgICBcImViYXNrZXQ6IFRyYW5zYWN0aW9uIHByaWNlIG92ZXJyaWRlIDpcIixcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnRcbiAgLy8gICAgICk7XG5cbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uICYmXG4gIC8vICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZVByb21vdGlvbi5sZW5ndGggPiAwXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uLmZvckVhY2goKGxpbmVQcm9tb3Rpb24pID0+IHtcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcbiAgLy8gICAgICAgICAgIFwiUHJvbW90aW9uOiBiYXNrZXQgbGluZVByb21vdGlvbiA6IFwiLFxuICAvLyAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lUHJvbW90aW9uXG4gIC8vICAgICAgICAgKTtcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcbiAgLy8gICAgICAgICAgIFwibGluZVByb21vdGlvbi5pdGVtTGluZUlkLnRvU3RyaW5nKCkgOiBcIixcbiAgLy8gICAgICAgICAgIGxpbmVQcm9tb3Rpb24uaXRlbUxpbmVJZC50b1N0cmluZygpXG4gIC8vICAgICAgICAgKTtcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcbiAgLy8gICAgICAgICAgIFwiY29uZGl0aW9uIDogXCIgK1xuICAvLyAgICAgICAgICAgKHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gbGluZVByb21vdGlvbi5pdGVtTGluZUlkLnRvU3RyaW5nKCkpXG4gIC8vICAgICAgICAgKTtcblxuICAvLyAgICAgICAgIGlmIChwcm9kdWN0Lml0ZW1MaW5lSWQgPT09IGxpbmVQcm9tb3Rpb24uaXRlbUxpbmVJZC50b1N0cmluZygpKSB7XG4gIC8vICAgICAgICAgICBwcm9kdWN0LnJlZnVuZGVkVG90YWwgPVxuICAvLyAgICAgICAgICAgICBsaW5lUHJvbW90aW9uLnByb21vdGlvbkxpbmVQcmljZSAqIC0xO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9IGVsc2VcbiAgLy8gICAgICAgaWYgKFxuICAvLyAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50ICYmXG4gIC8vICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQubGVuZ3RoID4gMFxuICAvLyAgICAgICApIHtcbiAgLy8gICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVEaXNjb3VudC5mb3JFYWNoKChsaW5lRGlzY291bnQpID0+IHtcbiAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAvLyAgICAgICAgICAgICBcInByb2R1Y3QuaXRlbUxpbmVJZCA6IFwiICtcbiAgLy8gICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnRcbiAgLy8gICAgICAgICAgICk7XG4gIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgLy8gICAgICAgICAgICAgXCJsaW5lRGlzY291bnQuaXRlbUxpbmVJZC50b1N0cmluZygpIDogXCIgK1xuICAvLyAgICAgICAgICAgICBsaW5lRGlzY291bnQuaXRlbUxpbmVJZC50b1N0cmluZygpXG4gIC8vICAgICAgICAgICApO1xuICAvLyAgICAgICAgICAgY29uc29sZS5sb2coXG4gIC8vICAgICAgICAgICAgIFwiY29uZGl0aW9uIDogXCIgK1xuICAvLyAgICAgICAgICAgICAocHJvZHVjdC5pdGVtTGluZUlkID09PSBsaW5lRGlzY291bnQuaXRlbUxpbmVJZC50b1N0cmluZygpKVxuICAvLyAgICAgICAgICAgKTtcblxuICAvLyAgICAgICAgICAgaWYgKHByb2R1Y3QuaXRlbUxpbmVJZCA9PT0gbGluZURpc2NvdW50Lml0ZW1MaW5lSWQudG9TdHJpbmcoKSkge1xuICAvLyAgICAgICAgICAgICBwcm9kdWN0LnJlZnVuZGVkVG90YWwgPSBsaW5lRGlzY291bnQudW5pdFByaWNlICogcHJvZHVjdC5yZWZ1bmRlZFF1YW50aXR5ICogLTE7XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfSk7XG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgY29uc29sZS5sb2coXCJQcm9kdWN0IGRlc2NyaXB0aW9uIDpcIiArIHByb2R1Y3QuZGVzY3JpcHRpb24pO1xuICAvLyAgICAgY29uc29sZS5sb2coXCJQcm9kdWN0IHRvdGFsIDpcIiArIHByb2R1Y3QucmVmdW5kZWRUb3RhbCk7XG4gIC8vICAgICAvLyBwcm9kdWN0LmRpc3BsYXlyZWZ1bmRlZGFtb3VudD10aGlzLmFwcGVuZEN1cnJlbmN5U3ltYm9sKENVUlJFTkNZW3RoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ldLHByb2R1Y3QucmVmdW5kZWRUb3RhbCk7XG4gIC8vICAgICAvLyBjb25zb2xlLmxvZyhwcm9kdWN0LmRpc3BsYXlyZWZ1bmRlZGFtb3VudCxcImRpc3BsYXlyZWZ1bmRlZGFtb3VudFwiKTtcbiAgLy8gICAgIHByb2R1Y3QucmVmdW5kZWQgPSB0cnVlO1xuICAvLyAgIH0pO1xuICAvLyAgIGNvbnN0IGJhc2tldHRvdGFsID0gKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsICo9IC0xKTtcbiAgLy8gICAvLyB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5kaXNwbGF5YmFza2V0dG90YWw9dGhpcy5hcHBlbmRDdXJyZW5jeVN5bWJvbChDVVJSRU5DWVt0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5XSwgYmFza2V0dG90YWwpO1xuICAvLyAgIGNvbnN0IHNhbGV0b3RhbCA9ICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5zYWxlVG90YWwgKj0gLTEpO1xuICAvLyAgIC8vIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LmRpc3BsYXlzYWxldG90YWwgPSB0aGlzLmFwcGVuZEN1cnJlbmN5U3ltYm9sKENVUlJFTkNZW3RoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ldLCBzYWxldG90YWwpO1xuICAvLyAgICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS5WQVRUb3RhbCAqPSAtMSk7XG4gIC8vICAgcmV0dXJuIHRoaXM7XG4gIC8vIH1cblxuICAvKipcbiAgICogU2FsZSBUb3RhbFxuICAgKiBAcGFyYW0gYmFza2V0RGV0YWlsc1xuICAgKiBAcmV0dXJucyBTYWxlIFRvdGFsXG4gICAqL1xuICB1cGRhdGVTYWxlVG90YWwoYmFza2V0RGV0YWlsczogeyBwcm9kdWN0czogYW55W107IH0pIHtcbiAgICBjb25zdCBzYWxlVG90YWwgPSBiYXNrZXREZXRhaWxzLnByb2R1Y3RzLnJlZHVjZShcbiAgICAgIChuOiBhbnksIHsgdG90YWxMaW5lUHJpY2UgfTogYW55KSA9PiBuICsgdG90YWxMaW5lUHJpY2UsXG4gICAgICAwXG4gICAgKTtcbiAgICByZXR1cm4gc2FsZVRvdGFsXG4gIH1cblxuICBnZXRUb3RhbFdpdGhMaW5lRGlzY291bnRBbmRMaW5lUHJvbW90aW9uQXBwbGllZChiYXNrZXREZXRhaWxzOiB7IHByb2R1Y3RzOiBhbnk7IH0pOiBudW1iZXIge1xuICAgIGxldCBzYWxldG90YWw6IG51bWJlciA9IDAuMDtcbiAgICBmb3IgKGxldCBwcm9kdWN0IG9mIGJhc2tldERldGFpbHMucHJvZHVjdHMpIHtcbiAgICAgIC8vIGlmIChwcm9kdWN0LmxpbmVQcm9tb3Rpb25zKSB7XG4gICAgICAvLyAgIHNhbGV0b3RhbCArPSBwcm9kdWN0LmxpbmVQcm9tb3Rpb25zLnByb21vdGlvbkxpbmVQcmljZTtcbiAgICAgIC8vIH0gZWxzZSBpZiAoXG4gICAgICAvLyAgIHByb2R1Y3QubGluZURpc2NvdW50ICYmXG4gICAgICAvLyAgICFwcm9kdWN0LmxpbmVQcm9tb3Rpb25zXG4gICAgICAvLyApIHtcbiAgICAgIC8vICAgc2FsZXRvdGFsICs9XG4gICAgICAvLyAgICAgcHJvZHVjdC5xdWFudGl0eSAqIE51bWJlcihwcm9kdWN0LmxpbmVEaXNjb3VudC51bml0UHJpY2UudG9GaXhlZCgyKSk7XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICBzYWxldG90YWwgKz1cbiAgICAgIC8vICAgICBwcm9kdWN0LnF1YW50aXR5ICogTnVtYmVyKHByb2R1Y3Quc2VsZWN0ZWRQcmljZS50b0ZpeGVkKDIpKTtcbiAgICAgIC8vIH1cbiAgICAgIHNhbGV0b3RhbCArPSBwcm9kdWN0LnRvdGFsO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiZS1iYXNrZXQ6dXBkYXRlIHByb2R1Y3QgVG90YWw6XCIgKyBzYWxldG90YWwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHByb2R1Y3QpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc2FsZXRvdGFsO1xuICB9XG5cbiAgZ2V0UmVmdW5kZWRUb3RhbFdpdGhRdWFudGl0eShiYXNrZXREZXRhaWxzOiB7IHByb2R1Y3RzOiBzdHJpbmcgfCBhbnlbXTsgfSk6IG51bWJlciB7XG4gICAgbGV0IHF1YW50aXR5ID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYmFza2V0RGV0YWlscy5wcm9kdWN0cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHByb2R1Y3Q6IGFueSA9IGJhc2tldERldGFpbHMucHJvZHVjdHNbaW5kZXhdO1xuXG4gICAgICBpZiAoIXByb2R1Y3QucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbikge1xuXG4gICAgICAgIHF1YW50aXR5ID0gcXVhbnRpdHkgKyBwcm9kdWN0LnF1YW50aXR5O1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWFudGl0eSA9IHF1YW50aXR5ICsgKHByb2R1Y3QucXVhbnRpdHkgLSBwcm9kdWN0LnJlZnVuZGVkUXVhbnRpdHkpO1xuXG4gICAgICAgIC8vIGJhc2tldERldGFpbHMudG90YWwgPSBiYXNrZXREZXRhaWxzLnRvdGFsICsgcHJvZHVjdC5yZWZ1bmRlZFRvdGFsO1xuXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWFudGl0eTtcblxuICB9XG5cbiAgLyoqXG4gICAqIERpc2NvdW50IFRvdGFsXG4gICAqIEByZXR1cm5zIERpc2NvdW50IFRvdGFsXG4gICAqL1xuICB1cGRhdGVEaXNjb3VudFRvdGFsKCkge1xuICAgIGxldCByZWZ1bmRUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnJlZnVuZFRvdGFsID8gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkucmVmdW5kVG90YWwgOiAwO1xuICAgIGNvbnNvbGUuaW5mbyhcImUtYmFza2V0OiB0cmFuc2FjdGlvbiBidWlsZGVyOiByZWZ1bmRUb3RhbFwiLCBKU09OLnN0cmluZ2lmeShyZWZ1bmRUb3RhbCksXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeSkpO1xuICAgIGNvbnN0IGRpc2NvdW50VG90YWwgPVxuICAgICAgTWF0aC5hYnMoXG4gICAgICAgIE1hdGguYWJzKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCkgLVxuICAgICAgICAoXG4gICAgICAgICAgTWF0aC5hYnModGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwpICsgTWF0aC5hYnMocmVmdW5kVG90YWwpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgY29uc29sZS5sb2coXCJlLWJhc2tldDogdHJhbnNhY3Rpb24gYnVpbGRlcjogZGlzY291bnRUb3RhbFwiLCBKU09OLnN0cmluZ2lmeShkaXNjb3VudFRvdGFsKSlcbiAgICByZXR1cm4gTnVtYmVyKGRpc2NvdW50VG90YWwudG9GaXhlZCgyKSk7XG4gIH1cblxuICB1cGRhdGVSZWFzb25Db2RlKHJlYXNvbkNvZGU6IHtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5yZWFzb25Db2RlID0gcmVhc29uQ29kZS5jb2RlO1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5yZWFzb25EZXNjcmlwdGlvbiA9IHJlYXNvbkNvZGUubmFtZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZU1hbmFnZXJPdmVycmlkZShcbiAgICB1c2Vyb3ZlcnJpZGU6IFVzZXJPdmVycmlkZVxuICApOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50Lm92ZXJyaWRlID0gdXNlcm92ZXJyaWRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlVXNlcklEKFxuICAgIHVzZXJJRDogc3RyaW5nXG4gICk6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlcklkID0gdXNlcklEO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlVXNlck5hbWUobmFtZTogYW55KSA6IFRyYW5zYWN0aW9uRG9jdW1lbnRCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlck5hbWUgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuXG4gIH1cbiAgXG4gIGFkZEN1c3RvbWVyRGV0YWlscyhjdXN0b21lckRldGFpbDogQ3VzdG9tZXIpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1c3RvbWVyID0gY3VzdG9tZXJEZXRhaWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVUYXhCcmVha2Rvd24oYmFza2V0RGV0YWlsczogQmFza2V0KTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIC8vIGxldCB0cmFuc2FjdGlvbkRpc2NvdW50VG90YWwgPSAwO1xuICAgIGxldCB0YXhCcmVha2Rvd246IFRheEJyZWFrZG93biA9IHtcbiAgICAgIHRheExpbmVzOiBbXSxcbiAgICAgIHRvdGFsVGF4YWJsZUFtb3VudDogMCxcbiAgICB9O1xuXG5cblxuICAgIC8vIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uRGlzY291bnQgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50Lmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25EaXNjb3VudC5mb3JFYWNoKChkaXNjb3VudCkgPT4ge1xuICAgIC8vICAgICB0cmFuc2FjdGlvbkRpc2NvdW50VG90YWwgKz0gZGlzY291bnQuZGlzY291bnRBbW91bnQ7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiAmJiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24uZm9yRWFjaChcbiAgICAvLyAgICAgKHByb21vdGlvbikgPT4ge1xuICAgIC8vICAgICAgIHRyYW5zYWN0aW9uRGlzY291bnRUb3RhbCArPSBwcm9tb3Rpb24ucHJvbW90aW9uQW1vdW50O1xuICAgIC8vICAgICB9XG4gICAgLy8gICApO1xuICAgIC8vIH1cblxuICAgIGJhc2tldERldGFpbHMucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdDogYW55KSA9PiB7XG4gICAgICBsZXQgdGF4TGluZTogVGF4TGluZSA9IHtcbiAgICAgICAgaXRlbUxpbmVJZDogcHJvZHVjdC5pdGVtTGluZUlkLFxuICAgICAgICBWQVQ6IHByb2R1Y3Quc2VsZWN0ZWRWQVQgPyBwcm9kdWN0LnNlbGVjdGVkVkFUIDogMCxcbiAgICAgICAgVkFUQ29kZTogcHJvZHVjdC5zZWxlY3RlZFZBVENvZGUsXG4gICAgICAgIHRheExpbmVUb3RhbDogMCxcbiAgICAgICAgdGF4YWJsZUFtb3VudDogcHJvZHVjdC50b3RhbCxcbiAgICAgICAgUHJlVGF4OiAwXG4gICAgICB9O1xuICAgICAgY29uc29sZS5pbmZvKFwiUHJvZHVjdCBjb250cmlidXRpb24gOiBpdGVtIGxpbmUgSUQgOlwiLCBwcm9kdWN0Lml0ZW1MaW5lSWQsXG4gICAgICAgIFwidGF4IGxpbmUgOlwiLCBKU09OLnN0cmluZ2lmeSh0YXhMaW5lKSk7XG5cbiAgICAgIC8vIHN0ZXAgMVxuICAgICAgLy8gaWYgVHJhbnNhY3Rpb24gRGlzY291bnQgYW5kL29yIHByb21vdGlvbiBhcHBsaWVkLCBmaW5kIG5ldCBzZWxsaW5nIHByaWNlIG9mIGVhY2ggcHJvZHVjdCBhcyB0YXhhYmxlYW1vdW50XG4gICAgICAvLyBpZiAodHJhbnNhY3Rpb25EaXNjb3VudFRvdGFsID4gMCkge1xuICAgICAgcHJvZHVjdCA9IHRoaXMuYmFza2V0U2VydmljZS52YWxpZGF0ZVByb2R1Y3RJdGVtRGlzY291bnQocHJvZHVjdCk7XG5cbiAgICAgIGNvbnN0IHByb2R1Y3RDb250cmlidXRpb25JblRvdGFsID1cbiAgICAgICAgcHJvZHVjdC5pdGVtRGlzY291bnRzLnRybkRpc2NvdW50c1BvcnRpb24gK1xuICAgICAgICBwcm9kdWN0Lml0ZW1EaXNjb3VudHMudHJuUHJvbW90aW9uc1BvcnRpb24gLVxuICAgICAgICBwcm9kdWN0Lml0ZW1EaXNjb3VudHMucmVmdW5kUG9ydGlvbjtcbiAgICAgIC8vICB0cCt0ZC1ycDtcblxuICAgICAgY29uc29sZS5pbmZvKFwiUHJvZHVjdCBjb250cmlidXRpb24gOiBpdGVtIGxpbmUgSUQgOlwiLCBwcm9kdWN0Lml0ZW1MaW5lSWQsXG4gICAgICAgIFwiY29udHJpYnV0aW9uIDpcIiwgSlNPTi5zdHJpbmdpZnkocHJvZHVjdENvbnRyaWJ1dGlvbkluVG90YWwpKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBuZXQgc2VsbGluZyBwcmljZSBhZnRlciBhcHBseWluZyB0cmFuc2FjdGlvbiBkaXNjb3VudCBhcyBwZXIgcHJvZHVjdCBjb250cmlidXRpb25cbiAgICAgIHRheExpbmUudGF4YWJsZUFtb3VudCAtPSBwcm9kdWN0Q29udHJpYnV0aW9uSW5Ub3RhbDtcbiAgICAgIC8vIH1cblxuICAgICAgLy9zdGVwIDIgLSBmaW5kIHByZSB0YXhcbiAgICAgIHRheExpbmUuUHJlVGF4ID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIoKHRheExpbmUudGF4YWJsZUFtb3VudCAqIDEwMCkgLyAoMTAwICsgdGF4TGluZS5WQVQpKTtcblxuICAgICAgLy9zdGVwIDMgLSBVcGRhdGUgdGF4YnJlYWtkb3duXG4gICAgICB0YXhCcmVha2Rvd24udG90YWxUYXhhYmxlQW1vdW50ICs9IHRheExpbmUudGF4YWJsZUFtb3VudDtcbiAgICAgIHRheExpbmUudGF4YWJsZUFtb3VudCA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRheExpbmUudGF4YWJsZUFtb3VudCk7XG4gICAgICBcbiAgICAgIC8vIHN0ZXAgNCAtIHVwZGF0ZSB0YXggTGluZSB0b3RhbFxuICAgICAgdGF4TGluZS50YXhMaW5lVG90YWwgPSAgdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGF4TGluZS50YXhhYmxlQW1vdW50IC0gdGF4TGluZS5QcmVUYXgpO1xuICAgICAgdGF4QnJlYWtkb3duLnRheExpbmVzLnB1c2godGF4TGluZSk7XG4gICAgfSk7XG5cbiAgICB0YXhCcmVha2Rvd24udG90YWxUYXhhYmxlQW1vdW50ID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIodGF4QnJlYWtkb3duLnRvdGFsVGF4YWJsZUFtb3VudCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24gPSB0YXhCcmVha2Rvd247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVUb3RhbFRheFN1bW1hcnkoKTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuXG4gICAgY29uc29sZS5sb2coXCJUb3RhbCBUYXggU3VtbWVyeSBSZXF1ZXN0IDpcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24pKTtcblxuXG4gICAgbGV0IHRvdGFsVGF4U3VtbWFyeUFycmF5OiBUb3RhbFRheFN1bW1hcnlbXSA9IFtdXG4gICAgbGV0IHRvdGFsVGF4U3VtbWFyeUdyb3VwID0gW11cblxuICAgIGNvbnNvbGUubG9nKFwiVGF4IExpbmVzIGZvciBUb3RhbCBUYXggU3VtbWVyeSA6XCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzKSk7XG5cblxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZvckVhY2goKGVsZW1lbnQ6IHsgVkFUQ29kZTogYW55OyBWQVQ6IGFueTsgUHJlVGF4OiBhbnk7IHRheExpbmVUb3RhbDogYW55OyB9KSA9PiB7XG4gICAgICBsZXQgVGF4U3VtbWFyeTogVG90YWxUYXhTdW1tYXJ5ID0ge1xuICAgICAgICBWQVRDb2RlOiBcIlwiLFxuICAgICAgICBWQVQ6IC0xMjM0NSxcbiAgICAgICAgUHJlVGF4U3VtOiAwLFxuICAgICAgICBUYXhTdW06IDAsXG4gICAgICAgIFRYcmF0ZVN1bTogMFxuICBcbiAgICAgIH07XG4gICAgICAgVGF4U3VtbWFyeS5WQVRDb2RlID0gZWxlbWVudC5WQVRDb2RlO1xuICAgICAgICBUYXhTdW1tYXJ5LlZBVCA9IGVsZW1lbnQuVkFUOyAgICAgICAgXG4gICAgICAgIFRheFN1bW1hcnkuUHJlVGF4U3VtID0gdGhpcy5udW1iZXJVdGlsU2VydmljZS50cmltVG8yRGVjaW1hbDIoZWxlbWVudC5QcmVUYXgpO1xuICAgICAgICBUYXhTdW1tYXJ5LlRheFN1bSA9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKGVsZW1lbnQudGF4TGluZVRvdGFsKTtcbiAgICAgICAgVGF4U3VtbWFyeS5UWHJhdGVTdW0gPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMihUYXhTdW1tYXJ5LlByZVRheFN1bSArIFRheFN1bW1hcnkuVGF4U3VtKTsgICAgICBcbiAgICAgICAgdG90YWxUYXhTdW1tYXJ5QXJyYXkucHVzaChUYXhTdW1tYXJ5KTtcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coXCJUb3RhbCBUYXggU3VtbWVyeSAgV2l0aG91dCBHcm91cGVkIDogXCIsIEpTT04uc3RyaW5naWZ5KHRvdGFsVGF4U3VtbWFyeUFycmF5KSk7XG4gICAgXG4gICAgdG90YWxUYXhTdW1tYXJ5R3JvdXAgPSB0b3RhbFRheFN1bW1hcnlBcnJheS5yZWR1Y2UoKHByZXBhcmVkQXJyYXk6YW55LGN1cnJlbnRPYmopID0+IHtcblxuICAgICAgbGV0IGluZCA9IHByZXBhcmVkQXJyYXkuZmluZEluZGV4KCh4OiB7IFZBVDogYW55OyB9KSA9PiB4LlZBVCA9PT0gY3VycmVudE9iai5WQVQpO1xuICAgICAgaWYoaW5kID09PSAtMSl7XG4gICAgICAgIHByZXBhcmVkQXJyYXkucHVzaChjdXJyZW50T2JqKVxuICAgICAgfWVsc2Uge1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVkFUQ29kZSA9IGN1cnJlbnRPYmouVkFUQ29kZTtcbiAgICAgICAgcHJlcGFyZWRBcnJheVtpbmRdLlZBVCA9IGN1cnJlbnRPYmouVkFUO1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uUHJlVGF4U3VtICs9IGN1cnJlbnRPYmouUHJlVGF4U3VtO1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVGF4U3VtICs9IGN1cnJlbnRPYmouVGF4U3VtO1xuICAgICAgICBwcmVwYXJlZEFycmF5W2luZF0uVFhyYXRlU3VtICs9IGN1cnJlbnRPYmouVFhyYXRlU3VtO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXBhcmVkQXJyYXk7XG4gICAgfSxbXSlcbiAgICBcbiAgICBjb25zb2xlLmxvZyhcIlRvdGFsICBUYXggU3VtbWVyIEdyb3VwIDpcIix0b3RhbFRheFN1bW1hcnlHcm91cCk7XG5cblxuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudG90YWxUYXhTdW1tYXJ5ID0gdG90YWxUYXhTdW1tYXJ5R3JvdXA7XG5cbiAgICByZXR1cm4gdGhpcztcblxuICB9XG5cblxuICAvKipcbiAgICogVHJhbnNhY3Rpb25JZFxuICAgKiBAcmV0dXJucyBPcmlnaW5hbFRyYW5zYWN0aW9uSWRcbiAgICovXG4gIGFkZE9yaWdpbmFsVHJhbnNJZCh0cmFuRG9jOlRyYW5zYWN0aW9uRG9jdW1lbnQpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC50eXBlID09PSBUUkFOU0FDVElPTl9UWVBFLlJFRlVORCB8fCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX1JFRlVORCB8fCB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFX0VYQ0hBTkdFKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQub3JpZ2luYWxUcmFuc0lkID0gdHJhbkRvYy50cmFuc2FjdGlvbklkO1xuICAgICAgaWYodHJhbkRvYy5hcGlSZXNwb25zZSAmJiB0cmFuRG9jLmFwaVJlc3BvbnNlLmludGVybmFsSWQpXG4gICAgICB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcmlnaW5hbEV4dGVybmFsSWQgPSB0cmFuRG9jLmFwaVJlc3BvbnNlLmludGVybmFsSWQudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogdW5yZWZlcmVuY2VkIFJlZnVuZFxuICAgKiBAcmV0dXJucyBib29sZWFuIHZhbHVlXG4gICAqL1xuICBhZGRVbnJlZmVyZW5jZWRSZWZ1bmQoKTogVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51bnJlZmVyZW5jZWRSZWZ1bmQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0UmVmdW5kVG90YWwoKSB7XG4gICAgbGV0IHRvdGFsUmVmdW5kID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHByb2R1Y3Q6IFRQcm9kdWN0ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5wcm9kdWN0c1tpbmRleF07XG4gICAgICBpZiAocHJvZHVjdC5yZWZ1bmRlZFRvdGFsKSB7XG4gICAgICAgIHRvdGFsUmVmdW5kID0gdG90YWxSZWZ1bmQgKyBwcm9kdWN0LnJlZnVuZGVkVG90YWw7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZyhcImViYXNrZXQgOiB0cmFuc2FjdGlvbiBTZXJ2aWNlOiB0b3RhbFJlZnVuZFwiICsgdG90YWxSZWZ1bmQpXG4gICAgfVxuICAgIHJldHVybiB0b3RhbFJlZnVuZDtcbiAgfVxuXG4gIGRvY0lkKGRvY0lkOiBhbnkpOiBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlciB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuaWQgPSBkb2NJZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIl19
|