@datagrok/helm 1.0.9 → 2.0.1
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/dist/package-test.js +62 -84
- package/dist/package.js +6 -1
- package/package.json +5 -5
- package/src/package.ts +5 -0
- package/src/tests/helm-tests.ts +16 -14
- package/test-Helm-4f0c8bae6479-f91b2147.html +246 -0
- package/dockerfiles/Dockerfile +0 -13
package/dist/package-test.js
CHANGED
|
@@ -212,51 +212,6 @@ function delay(ms) {
|
|
|
212
212
|
}
|
|
213
213
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBS2QsRUFBRSxDQUFDO0FBRVAsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQU10QjtBQU5ELFdBQWlCLE1BQU07SUFFckIsU0FBZ0IsT0FBTyxDQUFDLEtBQVUsRUFBRSxJQUFhO1FBQy9DLElBQUksS0FBSyxJQUFJLElBQUk7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFIZSxjQUFPLFVBR3RCLENBQUE7QUFDSCxDQUFDLEVBTmdCLE1BQU0sS0FBTixNQUFNLFFBTXRCO0FBT0QsTUFBTSxPQUFPLElBQUk7SUFNZixZQUFZLFFBQWdCLEVBQUUsSUFBWSxFQUFFLElBQXdCLEVBQUUsT0FBcUI7O1FBQ3pGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxJQUFQLE9BQU8sR0FBSyxFQUFFLEVBQUM7UUFDZixNQUFBLE9BQU8sQ0FBQyxPQUFPLG9DQUFmLE9BQU8sQ0FBQyxPQUFPLEdBQUssS0FBSyxFQUFDO1FBQzFCLE1BQUEsT0FBTyxDQUFDLHlCQUF5QixvQ0FBakMsT0FBTyxDQUFDLHlCQUF5QixHQUFLLElBQUksRUFBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQXVCLEVBQUU7WUFDbkMsT0FBTyxJQUFJLE9B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QWdCLEtBQUssQ0FBQyxFQUFVOztRQUNwQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5cbmV4cG9ydCBjb25zdCB0ZXN0czoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgdGVzdHM/OiBUZXN0W10sIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD4sIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBiZWZvcmVTdGF0dXM/OiBzdHJpbmcsIGFmdGVyU3RhdHVzPzogc3RyaW5nXG4gIH1cbn0gPSB7fTtcblxuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZztcblxuZXhwb3J0IG5hbWVzcGFjZSBhc3N1cmUge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBub3ROdWxsKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgb3B0aW9ucz86IFRlc3RPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBvcHRpb25zID8/PSB7fTtcbiAgICBvcHRpb25zLnRpbWVvdXQgPz89IDMwMDAwO1xuICAgIG9wdGlvbnMudW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dCA/Pz0gMjAwMDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudGVzdCA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGVzdCgpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoYXdhaXQgYXNzZXJ0Tm9FcnJvcihvcHRpb25zIS51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0ISkpKVxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nIHRlc3Q6ICR7Z3Jvay5zaGVsbC5sYXN0RXJyb3J9YCkpO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyoqIEF3YWl0cyBmb3IgYSB3aGlsZSBjaGVja2luZyB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBwbGF0Zm9ybSAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydE5vRXJyb3IobXM6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1zIC8gNTAwOyArK2kpIHtcbiAgICBhd2FpdCBkZWxheSg1MDApO1xuICAgIGlmIChncm9rLnNoZWxsLmxhc3RFcnJvci5sZW5ndGggIT09IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSk6IHZvaWQge1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSk6IHZvaWQge1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgaWYgKCFhcmVFcXVhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRWYWx1ZX0gZm9yIGtleSAke2V4cGVjdGVkS2V5fSwgZ290ICR7YWN0dWFsVmFsdWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogYW55W10sIGV4cGVjdGVkOiBhbnlbXSkge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZywgdGVzdHM6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzKCk7XG59XG5cbi8qKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmUoYmVmb3JlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuXG4vKiogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnM/OiB7IGNhdGVnb3J5Pzogc3RyaW5nLCB0ZXN0Pzogc3RyaW5nIH0pIHtcbiAgY29uc3QgcmVzdWx0czogeyBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcgfVtdID0gW107XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgaWYgKG9wdGlvbnM/LmNhdGVnb3J5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgIGF3YWl0IHZhbHVlLmJlZm9yZSgpO1xuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBjb25zdCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKVxuICAgICAgcmVzLnB1c2goYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCkpO1xuXG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgYXdhaXQgdmFsdWUuYWZ0ZXIoKTtcbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2V9KTtcbiAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgZGF0YS5wdXNoKHtjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZX0pO1xuICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjVGVzdCh0OiBUZXN0LCBwcmVkaWNhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBsZXQgcjogeyBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcgfTtcbiAgdHJ5IHtcbiAgICBpZiAocHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKSlcbiAgICAgIHIgPSB7c3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAnc2tpcHBlZCd9O1xuICAgIGVsc2VcbiAgICAgIHIgPSB7c3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBhd2FpdCB0LnRlc3QoKSA/PyAnT0snfTtcbiAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgciA9IHtzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCl9O1xuICB9XG4gIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICByLm5hbWUgPSB0Lm5hbWU7XG4gIHJldHVybiByO1xufVxuXG4vKiogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG4iXX0=
|
|
214
214
|
|
|
215
|
-
/***/ }),
|
|
216
|
-
|
|
217
|
-
/***/ "./src/package-test.ts":
|
|
218
|
-
/*!*****************************!*\
|
|
219
|
-
!*** ./src/package-test.ts ***!
|
|
220
|
-
\*****************************/
|
|
221
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
222
|
-
|
|
223
|
-
__webpack_require__.r(__webpack_exports__);
|
|
224
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
225
|
-
/* harmony export */ "_package": () => (/* binding */ _package),
|
|
226
|
-
/* harmony export */ "test": () => (/* binding */ test),
|
|
227
|
-
/* harmony export */ "tests": () => (/* reexport safe */ _datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_1__.tests)
|
|
228
|
-
/* harmony export */ });
|
|
229
|
-
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! datagrok-api/dg */ "datagrok-api/dg");
|
|
230
|
-
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__);
|
|
231
|
-
/* harmony import */ var _datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @datagrok-libraries/utils/src/test */ "./node_modules/@datagrok-libraries/utils/src/test.js");
|
|
232
|
-
/* harmony import */ var _tests_helm_tests_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tests/helm-tests.ts */ "./src/tests/helm-tests.ts");
|
|
233
|
-
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
234
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
235
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
236
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
237
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
238
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
239
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
240
|
-
});
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const _package = new datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__.Package();
|
|
246
|
-
|
|
247
|
-
//name: test
|
|
248
|
-
//input: string category {optional: true}
|
|
249
|
-
//input: string test {optional: true}
|
|
250
|
-
//output: dataframe result
|
|
251
|
-
//top-menu: Tools | Dev | JS API Tests
|
|
252
|
-
function test(category, test) {
|
|
253
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
254
|
-
const data = yield (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_1__.runTests)({ category, test });
|
|
255
|
-
return datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__.DataFrame.fromObjects(data);
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
|
|
260
215
|
/***/ }),
|
|
261
216
|
|
|
262
217
|
/***/ "./src/tests/helm-tests.ts":
|
|
@@ -267,23 +222,6 @@ function test(category, test) {
|
|
|
267
222
|
|
|
268
223
|
__webpack_require__.r(__webpack_exports__);
|
|
269
224
|
/* harmony import */ var _datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @datagrok-libraries/utils/src/test */ "./node_modules/@datagrok-libraries/utils/src/test.js");
|
|
270
|
-
/* harmony import */ var _package_test__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../package-test */ "./src/package-test.ts");
|
|
271
|
-
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! datagrok-api/dg */ "datagrok-api/dg");
|
|
272
|
-
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_2__);
|
|
273
|
-
/* harmony import */ var datagrok_api_grok__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! datagrok-api/grok */ "datagrok-api/grok");
|
|
274
|
-
/* harmony import */ var datagrok_api_grok__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_grok__WEBPACK_IMPORTED_MODULE_3__);
|
|
275
|
-
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
276
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
277
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
278
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
279
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
280
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
281
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
282
|
-
});
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
225
|
|
|
288
226
|
(0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.category)('Helm', () => {
|
|
289
227
|
// These tests require webservice that is not present on test stand
|
|
@@ -306,20 +244,22 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
|
|
|
306
244
|
// // eslint-disable-next-line max-len
|
|
307
245
|
// expect(await helmToPeptide('PEPTIDE1{A.R.C.A.A.K.T.C.D.A}$PEPTIDE1,PEPTIDE1,8:R3-3:R3$$$'), 'ARCAAKTCDA');
|
|
308
246
|
// });
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
247
|
+
// detectMacromolecule is a function of Bio package
|
|
248
|
+
// test('detectMacromolecule', async () => {
|
|
249
|
+
// const file = await _package.files.readAsText('tests/test.csv');
|
|
250
|
+
// const df = DG.DataFrame.fromCsv(file);
|
|
251
|
+
// const col = df.columns.byName('HELM string');
|
|
252
|
+
// await grok.data.detectSemanticTypes(df);
|
|
253
|
+
// expect(col.semType, DG.SEMTYPE.MACROMOLECULE);
|
|
254
|
+
// });
|
|
255
|
+
// semType and units tags are detecting by Bio package function detectMacromolecule
|
|
256
|
+
// test('detectHelm', async () => {
|
|
257
|
+
// const file = await _package.files.readAsText('tests/test.csv');
|
|
258
|
+
// const df = DG.DataFrame.fromCsv(file);
|
|
259
|
+
// const col = df.columns.byName('HELM string');
|
|
260
|
+
// await grok.data.detectSemanticTypes(df);
|
|
261
|
+
// expect(col.tags[DG.TAGS.UNITS], 'HELM');
|
|
262
|
+
// });
|
|
323
263
|
});
|
|
324
264
|
|
|
325
265
|
|
|
@@ -413,13 +353,51 @@ module.exports = grok;
|
|
|
413
353
|
/******/ })();
|
|
414
354
|
/******/
|
|
415
355
|
/************************************************************************/
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
356
|
+
var __webpack_exports__ = {};
|
|
357
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
358
|
+
(() => {
|
|
359
|
+
/*!*****************************!*\
|
|
360
|
+
!*** ./src/package-test.ts ***!
|
|
361
|
+
\*****************************/
|
|
362
|
+
__webpack_require__.r(__webpack_exports__);
|
|
363
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
364
|
+
/* harmony export */ "_package": () => (/* binding */ _package),
|
|
365
|
+
/* harmony export */ "test": () => (/* binding */ test),
|
|
366
|
+
/* harmony export */ "tests": () => (/* reexport safe */ _datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_1__.tests)
|
|
367
|
+
/* harmony export */ });
|
|
368
|
+
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! datagrok-api/dg */ "datagrok-api/dg");
|
|
369
|
+
/* harmony import */ var datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__);
|
|
370
|
+
/* harmony import */ var _datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @datagrok-libraries/utils/src/test */ "./node_modules/@datagrok-libraries/utils/src/test.js");
|
|
371
|
+
/* harmony import */ var _tests_helm_tests_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tests/helm-tests.ts */ "./src/tests/helm-tests.ts");
|
|
372
|
+
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
373
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
374
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
375
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
376
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
377
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
378
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
379
|
+
});
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
const _package = new datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__.Package();
|
|
385
|
+
|
|
386
|
+
//name: test
|
|
387
|
+
//input: string category {optional: true}
|
|
388
|
+
//input: string test {optional: true}
|
|
389
|
+
//output: dataframe result
|
|
390
|
+
//top-menu: Tools | Dev | JS API Tests
|
|
391
|
+
function test(category, test) {
|
|
392
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
393
|
+
const data = yield (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_1__.runTests)({ category, test });
|
|
394
|
+
return datagrok_api_dg__WEBPACK_IMPORTED_MODULE_0__.DataFrame.fromObjects(data);
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
})();
|
|
399
|
+
|
|
400
|
+
helm_test = __webpack_exports__;
|
|
423
401
|
/******/ })()
|
|
424
402
|
;
|
|
425
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFdBQVc7V0FDNUM7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7VUVOQTtVQUNBO1VBQ0E7VUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2hlbG0vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdC5qcyIsIndlYnBhY2s6Ly9oZWxtLy4vc3JjL3BhY2thZ2UtdGVzdC50cyIsIndlYnBhY2s6Ly9oZWxtLy4vc3JjL3Rlc3RzL2hlbG0tdGVzdHMudHMiLCJ3ZWJwYWNrOi8vaGVsbS9leHRlcm5hbCB2YXIgXCJER1wiIiwid2VicGFjazovL2hlbG0vZXh0ZXJuYWwgdmFyIFwiZ3Jva1wiIiwid2VicGFjazovL2hlbG0vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vaGVsbS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9oZWxtL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9oZWxtL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vaGVsbS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2hlbG0vd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly9oZWxtL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly9oZWxtL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTtcbmV4cG9ydCB2YXIgYXNzdXJlO1xuKGZ1bmN0aW9uIChhc3N1cmUpIHtcbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBhc3N1cmUubm90TnVsbCA9IG5vdE51bGw7XG59KShhc3N1cmUgfHwgKGFzc3VyZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gICAgY29uc3RydWN0b3IoY2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9hID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAob3B0aW9ucy50aW1lb3V0ID0gMzAwMDApO1xuICAgICAgICAoX2IgPSBvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQgPSAyMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHlpZWxkIGFzc2VydE5vRXJyb3Iob3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0KSkpXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nIHRlc3Q6ICR7Z3Jvay5zaGVsbC5sYXN0RXJyb3J9YCkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cbi8qKiBBd2FpdHMgZm9yIGEgd2hpbGUgY2hlY2tpbmcgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgcGxhdGZvcm0gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb0Vycm9yKG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtcyAvIDUwMDsgKytpKSB7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSg1MDApO1xuICAgICAgICAgICAgaWYgKGdyb2suc2hlbGwubGFzdEVycm9yLmxlbmd0aCAhPT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG4vKiogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWwsIGV4cGVjdGVkLCB0b2xlcmFuY2UgPSAwLjAwMSkge1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGlmICghYXJlRXF1YWwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICAgICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICAgICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFZhbHVlfSBmb3Iga2V5ICR7ZXhwZWN0ZWRLZXl9LCBnb3QgJHthY3R1YWxWYWx1ZX1gKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyoqIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5LCB0ZXN0cykge1xuICAgIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRlc3RzKCk7XG59XG4vKiogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZSkge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuLyoqIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZS5iZWZvcmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdCA9IChfYSA9IHZhbHVlLnRlc3RzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHlpZWxkIGV4ZWNUZXN0KHRbaV0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50ZXN0KSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gKHlpZWxkIFByb21pc2UuYWxsKHJlcykpLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZS5hZnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5hZnRlclN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlclN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYWZ0ZXJTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlIH0pO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGV4ZWNUZXN0KHQsIHByZWRpY2F0ZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICghdC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSkpKVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogJ3NraXBwZWQnIH07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAoX2EgPSB5aWVsZCB0LnRlc3QoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ09LJyB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCkgfTtcbiAgICAgICAgfVxuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qKiBXYWl0cyBbbXNdIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhOUVVGTkxFTkJRVU1zVFVGQlRTeExRVUZMTEVkQlMyUXNSVUZCUlN4RFFVRkRPMEZCUlZBc1RVRkJUU3hEUVVGRExFbEJRVWtzWlVGQmRVSXNRMEZCUXp0QlFVVnVReXhOUVVGTkxFdEJRVmNzVFVGQlRTeERRVTEwUWp0QlFVNUVMRmRCUVdsQ0xFMUJRVTA3U1VGRmNrSXNVMEZCWjBJc1QwRkJUeXhEUVVGRExFdEJRVlVzUlVGQlJTeEpRVUZoTzFGQlF5OURMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWs3V1VGRFppeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxHTkJRV01zUTBGQlF5eERRVUZETzBsQlEzQkZMRU5CUVVNN1NVRklaU3hqUVVGUExGVkJSM1JDTEVOQlFVRTdRVUZEU0N4RFFVRkRMRVZCVG1kQ0xFMUJRVTBzUzBGQlRpeE5RVUZOTEZGQlRYUkNPMEZCVDBRc1RVRkJUU3hQUVVGUExFbEJRVWs3U1VGTlppeFpRVUZaTEZGQlFXZENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN08xRkJRM3BHTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4TlFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExHOURRVUZtTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVzc1MwRkJTeXhGUVVGRE8xRkJRekZDTEUxQlFVRXNUMEZCVHl4RFFVRkRMSGxDUVVGNVFpeHZRMEZCYWtNc1QwRkJUeXhEUVVGRExIbENRVUY1UWl4SFFVRkxMRWxCUVVrc1JVRkJRenRSUVVNelF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJRenRSUVVOMlFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVhWQ0xFVkJRVVU3V1VGRGJrTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGUExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0blFrRkRNME1zU1VGQlNTeE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMmRDUVVOb1FpeEpRVUZKTzI5Q1FVTkdMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXp0dlFrRkRNVUlzVFVGQlRTeEhRVUZITEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRM1pDTzJkQ1FVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yOUNRVU5tTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRFdEdG5Ra0ZEUkN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxHRkJRV0VzUTBGQlF5eFBRVUZSTEVOQlFVTXNlVUpCUVRCQ0xFTkJRVU1zUTBGQlF6dHZRa0ZETjBRc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEc5RFFVRnZReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFFWXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMnhDTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNN1VVRkRUQ3hEUVVGRExFTkJRVUVzUTBGQlF6dEpRVU5LTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hKUVVGSkxFTkJRVU1zU1VGQldTeEZRVUZGTEVsQlFYZENMRVZCUVVVc1QwRkJjVUk3U1VGRGFFWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzVTBGQlV6dFJRVU55UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlF6bENMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEV0QlFVc3NTVUZCU1N4VFFVRlRPMUZCUXpORExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRM0JETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRja1lzUTBGQlF6dEJRVVZFTEcxRlFVRnRSVHRCUVVOdVJTeE5RVUZOTEZWQlFXZENMR0ZCUVdFc1EwRkJReXhGUVVGVk96dFJRVU0xUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU5xUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU5xUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRPMmRDUVVOdVF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0VFFVTm9RanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0RFFVRkJPMEZCUlVRc2FVWkJRV2xHTzBGQlEycEdMRTFCUVUwc1ZVRkJWU3hOUVVGTkxFTkJRVU1zVFVGQlZ5eEZRVUZGTEZGQlFXRTdTVUZETDBNc1NVRkJTU3hOUVVGTkxFdEJRVXNzVVVGQlVUdFJRVU55UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExHRkJRV0VzVVVGQlVTeFhRVUZYTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRMMFFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1RVRkJZeXhGUVVGRkxGRkJRV2RDTEVWQlFVVXNVMEZCVXl4SFFVRkhMRXRCUVVzN1NVRkROMFVzVFVGQlRTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzVVVGQlVTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRPMGxCUTNwRUxFbEJRVWtzUTBGQlF5eFJRVUZSTzFGQlExZ3NUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhaUVVGWkxGRkJRVkVzVTBGQlV5eE5RVUZOTEdsQ1FVRnBRaXhUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzUkdMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzV1VGQldTeERRVUZETEUxQlFUaENMRVZCUVVVc1VVRkJaME03U1VGRE0wWXNTMEZCU3l4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxHRkJRV0VzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVU3VVVGRGJrVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zVjBGQlZ5eERRVUZETzFsQlEzSkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zYzBKQlFYTkNMRmRCUVZjc1lVRkJZU3hEUVVGRExFTkJRVU03VVVGRmJFVXNUVUZCVFN4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlEzaERMRWxCUVVrc1YwRkJWeXhaUVVGWkxFdEJRVXNzU1VGQlNTeGhRVUZoTEZsQlFWa3NTMEZCU3p0WlFVTm9SU3hYUVVGWExFTkJRVU1zVjBGQlZ5eEZRVUZGTEdGQlFXRXNRMEZCUXl4RFFVRkRPMkZCUTNKRExFbEJRVWtzVjBGQlZ5eFpRVUZaTEUxQlFVMHNTVUZCU1N4aFFVRmhMRmxCUVZrc1RVRkJUVHRaUVVOMlJTeFpRVUZaTEVOQlFVTXNWMEZCVnl4RlFVRkZMR0ZCUVdFc1EwRkJReXhEUVVGRE8yRkJRM1JETEVsQlFVa3NWMEZCVnl4SlFVRkpMR0ZCUVdFN1dVRkRia01zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4WlFVRlpMR0ZCUVdFc1dVRkJXU3hYUVVGWExGTkJRVk1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTXpSanRCUVVOSUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdFc1JVRkJSU3hSUVVGbE8wbEJRM2hFTEUxQlFVMHNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGJrTXNUVUZCVFN4alFVRmpMRWRCUVVjc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVVYyUXl4SlFVRkpMRmxCUVZrc1NVRkJTU3hqUVVGakxFVkJRVVU3VVVGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXd3UkVGQk1FUXNXVUZCV1N4SFFVRkhPMWxCUTNaR0xHZERRVUZuUXl4alFVRmpMRVZCUVVVc1EwRkJReXhEUVVGRE8wdEJRM0pFTzBsQlJVUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZsQlFWa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOeVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRXRCUVVzN1dVRkROVVFzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTnFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5MRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEUxQlFVMDdXVUZEYmtVc1dVRkJXU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5zUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXk5Q0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNXVUZCV1N4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRk5CUVZNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTnFSanRCUVVOSUxFTkJRVU03UVVGRlJDdzBRa0ZCTkVJN1FVRkROVUlzVFVGQlRTeFZRVUZWTEZGQlFWRXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxFdEJRV2xDTzBsQlF6RkVMR1ZCUVdVc1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRE0wSXNTMEZCU3l4RlFVRkZMRU5CUVVNN1FVRkRWaXhEUVVGRE8wRkJSVVFzZDBaQlFYZEdPMEZCUTNoR0xFMUJRVTBzVlVGQlZTeE5RVUZOTEVOQlFVTXNUVUZCTWtJN1NVRkRhRVFzU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzBGQlEzcERMRU5CUVVNN1FVRkZSQ3gxUmtGQmRVWTdRVUZEZGtZc1RVRkJUU3hWUVVGVkxFdEJRVXNzUTBGQlF5eExRVUV3UWp0SlFVTTVReXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNTVUZCU1N4VFFVRlRPMUZCUTNKRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRPVUlzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGRrTXNRMEZCUXp0QlFVZEVMRTFCUVUwc1ZVRkJaMElzVVVGQlVTeERRVUZETEU5QlFUaERPenM3VVVGRE0wVXNUVUZCVFN4UFFVRlBMRWRCUVRaRkxFVkJRVVVzUTBGQlF6dFJRVVUzUml4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdFpRVU5vUkN4SlFVRkpMRU5CUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRkZCUVZFc1MwRkJTU3hUUVVGVExFVkJRVVU3WjBKQlEyeERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4UlFVRlJMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03YjBKQlEyaEZMRk5CUVZNN1lVRkRXanRaUVVORUxFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZEZEVZc1NVRkJTU3hMUVVGTExFTkJRVU1zV1VGQldUdG5Ra0ZEY0VJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRmxCUVZrc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjJSaXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkRka0k3VVVGRlJDeFBRVUZQTEU5QlFVOHNRMEZCUXpzN1EwRkRhRUk3UVVGRlJDeFRRVUZsTEZGQlFWRXNRMEZCUXl4RFFVRlBMRVZCUVVVc1UwRkJOa0k3T3p0UlFVTTFSQ3hKUVVGSkxFTkJRWGxGTEVOQlFVTTdVVUZET1VVc1NVRkJTVHRaUVVOR0xFbEJRVWtzVTBGQlV5eEpRVUZKTEZOQlFWTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNaR0xFTkJRVU1zUjBGQlJ5eEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlF5eERRVUZET3p0blFrRkZka01zUTBGQlF5eEhRVUZITEVWQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlFTeE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc2JVTkJRVWtzU1VGQlNTeEZRVUZETEVOQlFVTTdVMEZEZGtRN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJReXhEUVVGRE8xTkJRelZETzFGQlEwUXNRMEZCUXl4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETzFGQlEzaENMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTm9RaXhQUVVGUExFTkJRVU1zUTBGQlF6czdRMEZEVmp0QlFVVkVMRGhDUVVFNFFqdEJRVU01UWl4TlFVRk5MRlZCUVdkQ0xFdEJRVXNzUTBGQlF5eEZRVUZWT3p0UlFVTndReXhOUVVGTkxFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRPVU1zUTBGQlF6dERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0IwWlhOMGN6b2dlMXh1SUNCYmEyVjVPaUJ6ZEhKcGJtZGRPaUI3WEc0Z0lDQWdkR1Z6ZEhNL09pQlVaWE4wVzEwc0lHSmxabTl5WlQ4NklDZ3BJRDArSUZCeWIyMXBjMlU4ZG05cFpENHNJR0ZtZEdWeVB6b2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaXhjYmlBZ0lDQmlaV1p2Y21WVGRHRjBkWE0vT2lCemRISnBibWNzSUdGbWRHVnlVM1JoZEhWelB6b2djM1J5YVc1blhHNGdJSDFjYm4wZ1BTQjdmVHRjYmx4dVpYaHdiM0owSUd4bGRDQmpkWEp5Wlc1MFEyRjBaV2R2Y25rNklITjBjbWx1Wnp0Y2JseHVaWGh3YjNKMElHNWhiV1Z6Y0dGalpTQmhjM04xY21VZ2UxeHVYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZSbGMzUWdlMXh1SUNCMFpYTjBPaUFvS1NBOVBpQlFjbTl0YVhObFBHRnVlVDQ3WEc0Z0lHNWhiV1U2SUhOMGNtbHVaenRjYmlBZ1kyRjBaV2R2Y25rNklITjBjbWx1Wnp0Y2JpQWdiM0IwYVc5dWN6ODZJRlJsYzNSUGNIUnBiMjV6TzF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0dOaGRHVm5iM0o1T2lCemRISnBibWNzSUc1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wSUh0Y2JpQWdJQ0IwYUdsekxtTmhkR1ZuYjNKNUlEMGdZMkYwWldkdmNuazdYRzRnSUNBZ2RHaHBjeTV1WVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnSUNCdmNIUnBiMjV6TG5ScGJXVnZkWFFnUHo4OUlETXdNREF3TzF4dUlDQWdJRzl3ZEdsdmJuTXVkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWRDQS9QejBnTWpBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJR2R5YjJzdWMyaGxiR3d1YkdGemRFVnljbTl5SUQwZ0p5YzdYRzRnSUNBZ0lDQWdJQ0FnY21WemRXeDBJRDBnWVhkaGFYUWdkR1Z6ZENncE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxPaUJoYm5rcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WldwbFkzUW9aU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLQ0VvWVhkaGFYUWdZWE56WlhKMFRtOUZjbkp2Y2lodmNIUnBiMjV6SVM1MWJtaGhibVJzWldSRmVHTmxjSFJwYjI1VWFXMWxiM1YwSVNrcEtWeHVJQ0FnSUNBZ0lDQWdJSEpsYW1WamRDaHVaWGNnUlhKeWIzSW9ZRlZ1YUdGdVpHeGxaQ0JsZUdObGNIUnBiMjRnWkhWeWFXNW5JSFJsYzNRNklDUjdaM0p2YXk1emFHVnNiQzVzWVhOMFJYSnliM0o5WUNrcE8xeHVJQ0FnSUNBZ0lDQnlaWE52YkhabEtISmxjM1ZzZENrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOU8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvcUlFRjNZV2wwY3lCbWIzSWdZU0IzYUdsc1pTQmphR1ZqYTJsdVp5QjBhR1VnWlhKeWIzSWdjM1JoZEhWeklHOW1JSFJvWlNCd2JHRjBabTl5YlNBcUwxeHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUdGemMyVnlkRTV2UlhKeWIzSW9iWE02SUc1MWJXSmxjaWs2SUZCeWIyMXBjMlU4WW05dmJHVmhiajRnZTF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzF6SUM4Z05UQXdPeUFySzJrcElIdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZzFNREFwTzF4dUlDQWdJR2xtSUNobmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpNXNaVzVuZEdnZ0lUMDlJREFwWEc0Z0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUhSeWRXVTdYRzU5WEc1Y2JpOHFLaUJVWlhOMGN5QjBkMjhnYjJKcVpXTjBjeUJtYjNJZ1pYRjFZV3hwZEhrc0lIUm9jbTkzY3lCaGJpQmxlR05sY0hScGIyNGdhV1lnZEdobGVTQmhjbVVnYm05MElHVnhkV0ZzTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZENoaFkzUjFZV3c2SUdGdWVTd2daWGh3WldOMFpXUTZJR0Z1ZVNrNklIWnZhV1FnZTF4dUlDQnBaaUFvWVdOMGRXRnNJQ0U5UFNCbGVIQmxZM1JsWkNsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJRndpSkh0bGVIQmxZM1JsWkgxY0lpd2daMjkwSUZ3aUpIdGhZM1IxWVd4OVhDSmdLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVac2IyRjBLR0ZqZEhWaGJEb2diblZ0WW1WeUxDQmxlSEJsWTNSbFpEb2diblZ0WW1WeUxDQjBiMnhsY21GdVkyVWdQU0F3TGpBd01TazZJSFp2YVdRZ2UxeHVJQ0JqYjI1emRDQmhjbVZGY1hWaGJDQTlJRTFoZEdndVlXSnpLR0ZqZEhWaGJDQXRJR1Y0Y0dWamRHVmtLU0E4SUhSdmJHVnlZVzVqWlR0Y2JpQWdhV1lnS0NGaGNtVkZjWFZoYkNsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1I5TENCbmIzUWdKSHRoWTNSMVlXeDlJQ2gwYjJ4bGNtRnVZMlVnUFNBa2UzUnZiR1Z5WVc1alpYMHBZQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1JXWVd4MVpYMGdabTl5SUd0bGVTQWtlMlY0Y0dWamRHVmtTMlY1ZlN3Z1oyOTBJQ1I3WVdOMGRXRnNWbUZzZFdWOVlDazdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRG9nWVc1NVcxMHNJR1Y0Y0dWamRHVmtPaUJoYm5sYlhTa2dlMXh1SUNCamIyNXpkQ0JoWTNSMVlXeE1aVzVuZEdnZ1BTQmhZM1IxWVd3dWJHVnVaM1JvTzF4dUlDQmpiMjV6ZENCbGVIQmxZM1JsWkV4bGJtZDBhQ0E5SUdWNGNHVmpkR1ZrTG14bGJtZDBhRHRjYmx4dUlDQnBaaUFvWVdOMGRXRnNUR1Z1WjNSb0lDRTlJR1Y0Y0dWamRHVmtUR1Z1WjNSb0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCQmNuSmhlWE1nWVhKbElHOW1JR1JwWm1abGNtVnVkQ0JzWlc1bmRHZzZJR0ZqZEhWaGJDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGhZM1IxWVd4TVpXNW5kR2g5SUdBZ0sxeHVJQ0FnSUNBZ1lHRnVaQ0JsZUhCbFkzUmxaQ0JoY25KaGVTQnNaVzVuZEdnZ2FYTWdKSHRsZUhCbFkzUmxaRXhsYm1kMGFIMWdLVHRjYmlBZ2ZWeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1lXTjBkV0ZzVEdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCcFppQW9ZV04wZFdGc1cybGRJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JiYVYwZ2FXNXpkR0Z1WTJWdlppQkJjbkpoZVNsY2JpQWdJQ0FnSUdWNGNHVmpkRUZ5Y21GNUtHRmpkSFZoYkZ0cFhTd2daWGh3WldOMFpXUmJhVjBwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGdHBYU0JwYm5OMFlXNWpaVzltSUU5aWFtVmpkQ0FtSmlCbGVIQmxZM1JsWkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDbGNiaUFnSUNBZ0lHVjRjR1ZqZEU5aWFtVmpkQ2hoWTNSMVlXeGJhVjBzSUdWNGNHVmpkR1ZrVzJsZEtUdGNiaUFnSUNCbGJITmxJR2xtSUNoaFkzUjFZV3hiYVYwZ0lUMGdaWGh3WldOMFpXUmJhVjBwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1JiYVYxOUlHRjBJSEJ2YzJsMGFXOXVJQ1I3YVgwc0lHZHZkQ0FrZTJGamRIVmhiRnRwWFgxZ0tUdGNiaUFnZlZ4dWZWeHVYRzR2S2lvZ1JHVm1hVzVsY3lCaElIUmxjM1FnYzNWcGRHVXVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGMFpXZHZjbmtvWTJGMFpXZHZjbms2SUhOMGNtbHVaeXdnZEdWemRITTZJQ2dwSUQwK0lIWnZhV1FwT2lCMmIybGtJSHRjYmlBZ1kzVnljbVZ1ZEVOaGRHVm5iM0o1SUQwZ1kyRjBaV2R2Y25rN1hHNGdJSFJsYzNSektDazdYRzU5WEc1Y2JpOHFLaUJFWldacGJtVnpJR0VnWm5WdVkzUnBiMjRnZEc4Z1ltVWdaWGhsWTNWMFpXUWdZbVZtYjNKbElIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaVpXWnZjbVVvWW1WbWIzSmxPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErS1RvZ2RtOXBaQ0I3WEc0Z0lHbG1JQ2gwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZElEMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwZ2UzMDdYRzRnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVZbVZtYjNKbElEMGdZbVZtYjNKbE8xeHVmVnh1WEc0dktpb2dSR1ZtYVc1bGN5QmhJR1oxYm1OMGFXOXVJSFJ2SUdKbElHVjRaV04xZEdWa0lHRm1kR1Z5SUhSb1pTQjBaWE4wY3lCcGJpQjBhR2x6SUdOaGRHVm5iM0o1SUdGeVpTQmxlR1ZqZFhSbFpDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoWm5SbGNpaGhablJsY2pvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1GbWRHVnlJRDBnWVdaMFpYSTdYRzU5WEc1Y2JseHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUhKMWJsUmxjM1J6S0c5d2RHbHZibk0vT2lCN0lHTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQjBaWE4wUHpvZ2MzUnlhVzVuSUgwcElIdGNiaUFnWTI5dWMzUWdjbVZ6ZFd4MGN6b2dleUJqWVhSbFoyOXllVDg2SUhOMGNtbHVaeXdnYm1GdFpUODZJSE4wY21sdVp5d2djM1ZqWTJWemN6b2dZbTl2YkdWaGJpd2djbVZ6ZFd4ME9pQnpkSEpwYm1jZ2ZWdGRJRDBnVzEwN1hHNWNiaUFnWm05eUlDaGpiMjV6ZENCYmEyVjVMQ0IyWVd4MVpWMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9kR1Z6ZEhNcEtTQjdYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTS9MbU5oZEdWbmIzSjVJQ0U5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZyWlhrdWRHOU1iM2RsY2tOaGMyVW9LUzV6ZEdGeWRITlhhWFJvS0c5d2RHbHZibk0vTG1OaGRHVm5iM0o1TG5SdlRHOTNaWEpEWVhObEtDa3BLVnh1SUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJR2xtSUNoMllXeDFaUzVpWldadmNtVXBYRzRnSUNBZ0lDQWdJR0YzWVdsMElIWmhiSFZsTG1KbFptOXlaU2dwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLSGc2SUdGdWVTa2dlMXh1SUNBZ0lDQWdkbUZzZFdVdVltVm1iM0psVTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQjBJRDBnZG1Gc2RXVXVkR1Z6ZEhNZ1B6OGdXMTA3WEc0Z0lDQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMExteGxibWQwYURzZ2FTc3JLVnh1SUNBZ0lDQWdjbVZ6TG5CMWMyZ29ZWGRoYVhRZ1pYaGxZMVJsYzNRb2RGdHBYU3dnYjNCMGFXOXVjejh1ZEdWemRDa3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ1pHRjBZU0E5SUNoaGQyRnBkQ0JRY205dGFYTmxMbUZzYkNoeVpYTXBLUzVtYVd4MFpYSW9LR1FwSUQwK0lHUXVjbVZ6ZFd4MElDRTlJQ2R6YTJsd2NHVmtKeWs3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlM1aFpuUmxjaWxjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkbUZzZFdVdVlXWjBaWElvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2g0T2lCaGJua3BJSHRjYmlBZ0lDQWdJSFpoYkhWbExtRm1kR1Z5VTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RtRnNkV1V1WVdaMFpYSlRkR0YwZFhNcFhHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2UyTmhkR1ZuYjNKNU9pQnJaWGtzSUc1aGJXVTZJQ2RwYm1sMEp5d2djbVZ6ZFd4ME9pQjJZV3gxWlM1aFpuUmxjbE4wWVhSMWN5d2djM1ZqWTJWemN6b2dabUZzYzJWOUtUdGNiaUFnSUNCcFppQW9kbUZzZFdVdVltVm1iM0psVTNSaGRIVnpLVnh1SUNBZ0lDQWdaR0YwWVM1d2RYTm9LSHRqWVhSbFoyOXllVG9nYTJWNUxDQnVZVzFsT2lBbmFXNXBkQ2NzSUhKbGMzVnNkRG9nZG1Gc2RXVXVZbVZtYjNKbFUzUmhkSFZ6TENCemRXTmpaWE56T2lCbVlXeHpaWDBwTzF4dUlDQWdJSEpsYzNWc2RITXVjSFZ6YUNndUxpNWtZWFJoS1R0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCeVpYTjFiSFJ6TzF4dWZWeHVYRzVoYzNsdVl5Qm1kVzVqZEdsdmJpQmxlR1ZqVkdWemRDaDBPaUJVWlhOMExDQndjbVZrYVdOaGRHVTZJSE4wY21sdVp5QjhJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQnNaWFFnY2pvZ2V5QmpZWFJsWjI5eWVUODZJSE4wY21sdVp5d2dibUZ0WlQ4NklITjBjbWx1Wnl3Z2MzVmpZMlZ6Y3pvZ1ltOXZiR1ZoYml3Z2NtVnpkV3gwT2lCemRISnBibWNnZlR0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0JwWmlBb2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLU2xjYmlBZ0lDQWdJSElnUFNCN2MzVmpZMlZ6Y3pvZ2RISjFaU3dnY21WemRXeDBPaUFuYzJ0cGNIQmxaQ2Q5TzF4dUlDQWdJR1ZzYzJWY2JpQWdJQ0FnSUhJZ1BTQjdjM1ZqWTJWemN6b2dkSEoxWlN3Z2NtVnpkV3gwT2lCaGQyRnBkQ0IwTG5SbGMzUW9LU0EvUHlBblQwc25mVHRjYmlBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQm1ZV3h6WlN3Z2NtVnpkV3gwT2lCNExuUnZVM1J5YVc1bktDbDlPMXh1SUNCOVhHNGdJSEl1WTJGMFpXZHZjbmtnUFNCMExtTmhkR1ZuYjNKNU8xeHVJQ0J5TG01aGJXVWdQU0IwTG01aGJXVTdYRzRnSUhKbGRIVnliaUJ5TzF4dWZWeHVYRzR2S2lvZ1YyRnBkSE1nVzIxelhTQnRhV3hzYVhObFkyOXVaSE1nS2k5Y2JtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJrWld4aGVTaHRjem9nYm5WdFltVnlLU0I3WEc0Z0lHRjNZV2wwSUc1bGR5QlFjbTl0YVhObEtDaHlLU0E5UGlCelpYUlVhVzFsYjNWMEtISXNJRzF6S1NrN1hHNTlYRzRpWFgwPSIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IHJ1blRlc3RzLCB0ZXN0cyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL2hlbG0tdGVzdHMudHMnO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbmV4cG9ydCB7IHRlc3RzIH07XG4vL25hbWU6IHRlc3Rcbi8vaW5wdXQ6IHN0cmluZyBjYXRlZ29yeSB7b3B0aW9uYWw6IHRydWV9XG4vL2lucHV0OiBzdHJpbmcgdGVzdCB7b3B0aW9uYWw6IHRydWV9XG4vL291dHB1dDogZGF0YWZyYW1lIHJlc3VsdFxuLy90b3AtbWVudTogVG9vbHMgfCBEZXYgfCBKUyBBUEkgVGVzdHNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KGNhdGVnb3J5LCB0ZXN0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJ1blRlc3RzKHsgY2F0ZWdvcnksIHRlc3QgfSk7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbU9iamVjdHMoZGF0YSk7XG4gICAgfSk7XG59XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGNhdGVnb3J5LCBleHBlY3QsIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCB7IF9wYWNrYWdlIH0gZnJvbSAnLi4vcGFja2FnZS10ZXN0JztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmNhdGVnb3J5KCdIZWxtJywgKCkgPT4ge1xuICAgIC8vIFRoZXNlIHRlc3RzIHJlcXVpcmUgd2Vic2VydmljZSB0aGF0IGlzIG5vdCBwcmVzZW50IG9uIHRlc3Qgc3RhbmRcbiAgICAvLyB0ZXN0KCdoZWxtVG9GYXN0YScsIGFzeW5jICgpID0+IHtcbiAgICAvLyAgIGV4cGVjdChhd2FpdCBoZWxtVG9GYXN0YSgnUk5BMXtSKFUpUC5SKFQpUC5SKEcpUC5SKEMpUC5SKEEpfSQkJCQnKSwgJz5STkExVVRHQ0EnKTtcbiAgICAvLyAgIGV4cGVjdChhd2FpdCBoZWxtVG9GYXN0YSgnUk5BMXtQLlIoVSkuUC5SKFQpfSQkJCQnKSwgJz5STkExVVQnKTtcbiAgICAvLyAgIGV4cGVjdChhd2FpdCBoZWxtVG9GYXN0YSgnUEVQVElERTF7QS5HfSQkJCRWMi4wJyksICc+UEVQVElERTFBRycpO1xuICAgIC8vIH0pO1xuICAgIC8vXG4gICAgLy8gdGVzdCgnaGVsbVRvUk5BJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgZXhwZWN0KGF3YWl0IGhlbG1Ub1JOQSgnUk5BMXtSKFUpUC5SKFQpUC5SKEcpUC5SKEMpUC5SKEEpfSQkJCQnKSwgJ1VUR0NBJyk7XG4gICAgLy8gICBleHBlY3QoYXdhaXQgaGVsbVRvUk5BKCdSTkExe1AuUihVKS5QLlIoVCl9JCQkJCcpLCAnVVQnKTtcbiAgICAvLyAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgLy8gICBleHBlY3QoYXdhaXQgaGVsbVRvUk5BKCdSTkExe1IoVSlQLlIoVClQfXxSTkEye1AuUihBKVAuUihBKX0kUk5BMSxSTkEyLDI6cGFpci02OnBhaXJ8Uk5BMSxSTkEyLDU6cGFpci0zOnBhaXIkJCQnKSwgJ1VUIEFBJyk7XG4gICAgLy8gfSk7XG4gICAgLy9cbiAgICAvLyB0ZXN0KCdoZWxtVG9QZXB0aWRlJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgZXhwZWN0KGF3YWl0IGhlbG1Ub1BlcHRpZGUoJ1BFUFRJREUxe0EuR30kJCQkVjIuMCcpLCAnQUcnKTtcbiAgICAvLyAgIGV4cGVjdChhd2FpdCBoZWxtVG9QZXB0aWRlKCdQRVBUSURFMXtMLlYuQX18UEVQVElERTJ7TC5WLkF9JCQkJCcpLCAnTFZBIExWQScpO1xuICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAvLyAgIGV4cGVjdChhd2FpdCBoZWxtVG9QZXB0aWRlKCdQRVBUSURFMXtBLlIuQy5BLkEuSy5ULkMuRC5BfSRQRVBUSURFMSxQRVBUSURFMSw4OlIzLTM6UjMkJCQnKSwgJ0FSQ0FBS1RDREEnKTtcbiAgICAvLyB9KTtcbiAgICB0ZXN0KCdkZXRlY3RNYWNyb21vbGVjdWxlJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSB5aWVsZCBfcGFja2FnZS5maWxlcy5yZWFkQXNUZXh0KCd0ZXN0cy90ZXN0LmNzdicpO1xuICAgICAgICBjb25zdCBkZiA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGZpbGUpO1xuICAgICAgICBjb25zdCBjb2wgPSBkZi5jb2x1bW5zLmJ5TmFtZSgnSEVMTSBzdHJpbmcnKTtcbiAgICAgICAgeWllbGQgZ3Jvay5kYXRhLmRldGVjdFNlbWFudGljVHlwZXMoZGYpO1xuICAgICAgICBleHBlY3QoY29sLnNlbVR5cGUsIERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2RldGVjdEhlbG0nLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IHlpZWxkIF9wYWNrYWdlLmZpbGVzLnJlYWRBc1RleHQoJ3Rlc3RzL3Rlc3QuY3N2Jyk7XG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoZmlsZSk7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbHVtbnMuYnlOYW1lKCdIRUxNIHN0cmluZycpO1xuICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgIGV4cGVjdChjb2wudGFnc1tERy5UQUdTLlVOSVRTXSwgJ0hFTE0nKTtcbiAgICB9KSk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gREc7IiwibW9kdWxlLmV4cG9ydHMgPSBncm9rOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9wYWNrYWdlLXRlc3QudHNcIik7XG4iLCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|
|
403
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsQ0FBQzs7Ozs7Ozs7Ozs7QUN0Q0Q7Ozs7Ozs7Ozs7QUNBQTs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGlDQUFpQyxXQUFXO1dBQzVDO1dBQ0E7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTkEsaUJBQWlCLFNBQUksSUFBSSxTQUFJO0FBQzdCLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ3NDO0FBQytCO0FBQ3RDO0FBQ3hCLHFCQUFxQixvREFBVTtBQUNyQjtBQUNqQjtBQUNBLDBCQUEwQjtBQUMxQixzQkFBc0I7QUFDdEI7QUFDQTtBQUNPO0FBQ1A7QUFDQSwyQkFBMkIsNEVBQVEsR0FBRyxnQkFBZ0I7QUFDdEQsZUFBZSxrRUFBd0I7QUFDdkMsS0FBSztBQUNMIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaGVsbS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0LmpzIiwid2VicGFjazovL2hlbG0vLi9zcmMvdGVzdHMvaGVsbS10ZXN0cy50cyIsIndlYnBhY2s6Ly9oZWxtL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vaGVsbS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vaGVsbS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9oZWxtL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2hlbG0vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2hlbG0vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9oZWxtL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vaGVsbS8uL3NyYy9wYWNrYWdlLXRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmV4cG9ydCBjb25zdCB0ZXN0cyA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgKF9iID0gb3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAob3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0ID0gMjAwMCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMudGVzdCA9ICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIHRlc3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISh5aWVsZCBhc3NlcnROb0Vycm9yKG9wdGlvbnMudW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dCkpKVxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBVbmhhbmRsZWQgZXhjZXB0aW9uIGR1cmluZyB0ZXN0OiAke2dyb2suc2hlbGwubGFzdEVycm9yfWApKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWUsIHRlc3QsIG9wdGlvbnMpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG4vKiogQXdhaXRzIGZvciBhIHdoaWxlIGNoZWNraW5nIHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIHBsYXRmb3JtICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm9FcnJvcihtcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXMgLyA1MDA7ICsraSkge1xuICAgICAgICAgICAgeWllbGQgZGVsYXkoNTAwKTtcbiAgICAgICAgICAgIGlmIChncm9rLnNoZWxsLmxhc3RFcnJvci5sZW5ndGggIT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xufVxuLyoqIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsLCBleHBlY3RlZCwgdG9sZXJhbmNlID0gMC4wMDEpIHtcbiAgICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgICBpZiAoIWFyZUVxdWFsKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgICAgIGlmICghYWN0dWFsLmhhc093blByb3BlcnR5KGV4cGVjdGVkS2V5KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcHJvcGVydHkgXCIke2V4cGVjdGVkS2V5fVwiIG5vdCBmb3VuZGApO1xuICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgICAgIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRWYWx1ZX0gZm9yIGtleSAke2V4cGVjdGVkS2V5fSwgZ290ICR7YWN0dWFsVmFsdWV9YCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgIGlmIChhY3R1YWxMZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAgICAgICBleHBlY3RPYmplY3QoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSAhPSBleHBlY3RlZFtpXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFtpXX0gYXQgcG9zaXRpb24gJHtpfSwgZ290ICR7YWN0dWFsW2ldfWApO1xuICAgIH1cbn1cbi8qKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeSwgdGVzdHMpIHtcbiAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0ZXN0cygpO1xufVxuLyoqIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0ZXN0cykpIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhdGVnb3J5KSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYmVmb3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHQgPSAoX2EgPSB2YWx1ZS50ZXN0cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICByZXMucHVzaCh5aWVsZCBleGVjVGVzdCh0W2ldLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGVzdCkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9ICh5aWVsZCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYWZ0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goLi4uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleGVjVGVzdCh0LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKSlcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6ICdza2lwcGVkJyB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9hID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdPSycgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgciA9IHsgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogeC50b1N0cmluZygpIH07XG4gICAgICAgIH1cbiAgICAgICAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gICAgICAgIHIubmFtZSA9IHQubmFtZTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG59XG4vKiogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkR1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblJsYzNRdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVVV4UXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hMUVVGTExFZEJTMlFzUlVGQlJTeERRVUZETzBGQlJWQXNUVUZCVFN4RFFVRkRMRWxCUVVrc1pVRkJkVUlzUTBGQlF6dEJRVVZ1UXl4TlFVRk5MRXRCUVZjc1RVRkJUU3hEUVUxMFFqdEJRVTVFTEZkQlFXbENMRTFCUVUwN1NVRkZja0lzVTBGQlowSXNUMEZCVHl4RFFVRkRMRXRCUVZVc1JVRkJSU3hKUVVGaE8xRkJReTlETEVsQlFVa3NTMEZCU3l4SlFVRkpMRWxCUVVrN1dVRkRaaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMR05CUVdNc1EwRkJReXhEUVVGRE8wbEJRM0JGTEVOQlFVTTdTVUZJWlN4alFVRlBMRlZCUjNSQ0xFTkJRVUU3UVVGRFNDeERRVUZETEVWQlRtZENMRTFCUVUwc1MwRkJUaXhOUVVGTkxGRkJUWFJDTzBGQlQwUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRk5aaXhaUVVGWkxGRkJRV2RDTEVWQlFVVXNTVUZCV1N4RlFVRkZMRWxCUVhkQ0xFVkJRVVVzVDBGQmNVSTdPMUZCUTNwR0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeE5RVUZCTEU5QlFVOHNRMEZCUXl4UFFVRlBMRzlEUVVGbUxFOUJRVThzUTBGQlF5eFBRVUZQTEVkQlFVc3NTMEZCU3l4RlFVRkRPMUZCUXpGQ0xFMUJRVUVzVDBGQlR5eERRVUZETEhsQ1FVRjVRaXh2UTBGQmFrTXNUMEZCVHl4RFFVRkRMSGxDUVVGNVFpeEhRVUZMTEVsQlFVa3NSVUZCUXp0UlFVTXpReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXp0UlFVTjJRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFYVkNMRVZCUVVVN1dVRkRia01zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRlBMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdG5Ra0ZETTBNc1NVRkJTU3hOUVVGTkxFZEJRVWNzUlVGQlJTeERRVUZETzJkQ1FVTm9RaXhKUVVGSk8yOUNRVU5HTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dHZRa0ZETVVJc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeEZRVUZGTEVOQlFVTTdhVUpCUTNaQ08yZENRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMjlDUVVObUxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkRXRHRuUWtGRFJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4TlFVRk5MR0ZCUVdFc1EwRkJReXhQUVVGUkxFTkJRVU1zZVVKQlFUQkNMRU5CUVVNc1EwRkJRenR2UWtGRE4wUXNUVUZCVFN4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExHOURRVUZ2UXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRhRVlzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUTJ4Q0xFTkJRVU1zUTBGQlFTeERRVUZETEVOQlFVTTdVVUZEVEN4RFFVRkRMRU5CUVVFc1EwRkJRenRKUVVOS0xFTkJRVU03UTBGRFJqdEJRVVZFTEUxQlFVMHNWVUZCVlN4SlFVRkpMRU5CUVVNc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN1NVRkRhRVlzU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEVsQlFVa3NTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRExFdEJRVXNzU1VGQlNTeFRRVUZUTzFGQlF6TkRMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTNCRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEdWQlFXVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEY2tZc1EwRkJRenRCUVVWRUxHMUZRVUZ0UlR0QlFVTnVSU3hOUVVGTkxGVkJRV2RDTEdGQlFXRXNRMEZCUXl4RlFVRlZPenRSUVVNMVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOcVF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOcVFpeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETzJkQ1FVTnVReXhQUVVGUExFdEJRVXNzUTBGQlF6dFRRVU5vUWp0UlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dERRVUZCTzBGQlJVUXNhVVpCUVdsR08wRkJRMnBHTEUxQlFVMHNWVUZCVlN4TlFVRk5MRU5CUVVNc1RVRkJWeXhGUVVGRkxGRkJRV0U3U1VGREwwTXNTVUZCU1N4TlFVRk5MRXRCUVVzc1VVRkJVVHRSUVVOeVFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMR0ZCUVdFc1VVRkJVU3hYUVVGWExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZETDBRc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFhRVUZYTEVOQlFVTXNUVUZCWXl4RlFVRkZMRkZCUVdkQ0xFVkJRVVVzVTBGQlV5eEhRVUZITEV0QlFVczdTVUZETjBVc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETzBsQlEzcEVMRWxCUVVrc1EwRkJReXhSUVVGUk8xRkJRMWdzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4WlFVRlpMRkZCUVZFc1UwRkJVeXhOUVVGTkxHbENRVUZwUWl4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM1JHTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1dVRkJXU3hEUVVGRExFMUJRVGhDTEVWQlFVVXNVVUZCWjBNN1NVRkRNMFlzUzBGQlN5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZMR0ZCUVdFc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRVZCUVVVN1VVRkRia1VzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRU5CUVVNc1YwRkJWeXhEUVVGRE8xbEJRM0pETEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2MwSkJRWE5DTEZkQlFWY3NZVUZCWVN4RFFVRkRMRU5CUVVNN1VVRkZiRVVzVFVGQlRTeFhRVUZYTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8xRkJRM2hETEVsQlFVa3NWMEZCVnl4WlFVRlpMRXRCUVVzc1NVRkJTU3hoUVVGaExGbEJRVmtzUzBGQlN6dFpRVU5vUlN4WFFVRlhMRU5CUVVNc1YwRkJWeXhGUVVGRkxHRkJRV0VzUTBGQlF5eERRVUZETzJGQlEzSkRMRWxCUVVrc1YwRkJWeXhaUVVGWkxFMUJRVTBzU1VGQlNTeGhRVUZoTEZsQlFWa3NUVUZCVFR0WlFVTjJSU3haUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEdGQlFXRXNRMEZCUXl4RFFVRkRPMkZCUTNSRExFbEJRVWtzVjBGQlZ5eEpRVUZKTEdGQlFXRTdXVUZEYmtNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFpRVUZaTEdGQlFXRXNXVUZCV1N4WFFVRlhMRk5CUVZNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU16Ump0QlFVTklMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzVjBGQlZ5eERRVUZETEUxQlFXRXNSVUZCUlN4UlFVRmxPMGxCUTNoRUxFMUJRVTBzV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRia01zVFVGQlRTeGpRVUZqTEVkQlFVY3NVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVWMlF5eEpRVUZKTEZsQlFWa3NTVUZCU1N4alFVRmpMRVZCUVVVN1VVRkRiRU1zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3d1JFRkJNRVFzV1VGQldTeEhRVUZITzFsQlEzWkdMR2REUVVGblF5eGpRVUZqTEVWQlFVVXNRMEZCUXl4RFFVRkRPMHRCUTNKRU8wbEJSVVFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGbEJRVmtzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTnlReXhKUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TFFVRkxMRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEV0QlFVczdXVUZETlVRc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5xUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldTeE5RVUZOTEVsQlFVa3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFMUJRVTA3V1VGRGJrVXNXVUZCV1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVOc1F5eEpRVUZKTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF5OUNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zV1VGQldTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZOQlFWTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dExRVU5xUmp0QlFVTklMRU5CUVVNN1FVRkZSQ3cwUWtGQk5FSTdRVUZETlVJc1RVRkJUU3hWUVVGVkxGRkJRVkVzUTBGQlF5eFJRVUZuUWl4RlFVRkZMRXRCUVdsQ08wbEJRekZFTEdWQlFXVXNSMEZCUnl4UlFVRlJMRU5CUVVNN1NVRkRNMElzUzBGQlN5eEZRVUZGTEVOQlFVTTdRVUZEVml4RFFVRkRPMEZCUlVRc2QwWkJRWGRHTzBGQlEzaEdMRTFCUVUwc1ZVRkJWU3hOUVVGTkxFTkJRVU1zVFVGQk1rSTdTVUZEYUVRc1NVRkJTU3hMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVsQlFVa3NVMEZCVXp0UlFVTnlReXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUXpsQ0xFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRE8wRkJRM3BETEVOQlFVTTdRVUZGUkN4MVJrRkJkVVk3UVVGRGRrWXNUVUZCVFN4VlFVRlZMRXRCUVVzc1EwRkJReXhMUVVFd1FqdEpRVU01UXl4SlFVRkpMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zU1VGQlNTeFRRVUZUTzFGQlEzSkRMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZET1VJc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRka01zUTBGQlF6dEJRVWRFTEUxQlFVMHNWVUZCWjBJc1VVRkJVU3hEUVVGRExFOUJRVGhET3pzN1VVRkRNMFVzVFVGQlRTeFBRVUZQTEVkQlFUWkZMRVZCUVVVc1EwRkJRenRSUVVVM1JpeExRVUZMTEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVOb1JDeEpRVUZKTEVOQlFVRXNUMEZCVHl4aFFVRlFMRTlCUVU4c2RVSkJRVkFzVDBGQlR5eERRVUZGTEZGQlFWRXNTMEZCU1N4VFFVRlRMRVZCUVVVN1owSkJRMnhETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN2IwSkJRMmhGTEZOQlFWTTdZVUZEV2p0WlFVTkVMRWxCUVVrN1owSkJRMFlzU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFR0dlFrRkRaQ3hOUVVGTkxFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0aFFVTjRRanRaUVVGRExFOUJRVThzUTBGQlRTeEZRVUZGTzJkQ1FVTm1MRXRCUVVzc1EwRkJReXhaUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMkZCUTI1RE8xbEJRMFFzVFVGQlRTeERRVUZETEVkQlFVY3NUVUZCUVN4TFFVRkxMRU5CUVVNc1MwRkJTeXh0UTBGQlNTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1RVRkJUU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlEyWXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8yZENRVU12UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hQUVVGUExHRkJRVkFzVDBGQlR5eDFRa0ZCVUN4UFFVRlBMRU5CUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVVZvUkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzU1VGQlNTeFRRVUZUTEVOQlFVTXNRMEZCUXp0WlFVTXpSU3hKUVVGSk8yZENRVU5HTEVsQlFVa3NTMEZCU3l4RFFVRkRMRXRCUVVzN2IwSkJRMklzVFVGQlRTeExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1lVRkRka0k3V1VGQlF5eFBRVUZQTEVOQlFVMHNSVUZCUlR0blFrRkRaaXhMUVVGTExFTkJRVU1zVjBGQlZ5eEhRVUZITEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRoUVVOc1F6dFpRVU5FTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmRCUVZjN1owSkJRMjVDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eFhRVUZYTEVWQlFVVXNUMEZCVHl4RlFVRkZMRXRCUVVzc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGRFWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1dVRkJXVHRuUWtGRGNFSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVWQlFVVXNTVUZCU1N4RlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEZsQlFWa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRExFTkJRVU1zUTBGQlF6dFpRVU4yUml4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEZGtJN1VVRkZSQ3hQUVVGUExFOUJRVThzUTBGQlF6czdRMEZEYUVJN1FVRkZSQ3hUUVVGbExGRkJRVkVzUTBGQlF5eERRVUZQTEVWQlFVVXNVMEZCTmtJN096dFJRVU0xUkN4SlFVRkpMRU5CUVhsRkxFTkJRVU03VVVGRE9VVXNTVUZCU1R0WlFVTkdMRWxCUVVrc1UwRkJVeXhKUVVGSkxGTkJRVk1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzWkdMRU5CUVVNc1IwRkJSeXhGUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJReXhEUVVGRE96dG5Ra0ZGZGtNc1EwRkJReXhIUVVGSExFVkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJRU3hOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNiVU5CUVVrc1NVRkJTU3hGUVVGRExFTkJRVU03VTBGRGRrUTdVVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRaUVVObUxFTkJRVU1zUjBGQlJ5eEZRVUZETEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUXl4RFFVRkRPMU5CUXpWRE8xRkJRMFFzUTBGQlF5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRM2hDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU5vUWl4UFFVRlBMRU5CUVVNc1EwRkJRenM3UTBGRFZqdEJRVVZFTERoQ1FVRTRRanRCUVVNNVFpeE5RVUZOTEZWQlFXZENMRXRCUVVzc1EwRkJReXhGUVVGVk96dFJRVU53UXl4TlFVRk5MRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZET1VNc1EwRkJRenREUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nWjNKdmF5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaM0p2YXljN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCMFpYTjBjem9nZTF4dUlDQmJhMlY1T2lCemRISnBibWRkT2lCN1hHNGdJQ0FnZEdWemRITS9PaUJVWlhOMFcxMHNJR0psWm05eVpUODZJQ2dwSUQwK0lGQnliMjFwYzJVOGRtOXBaRDRzSUdGbWRHVnlQem9nS0NrZ1BUNGdVSEp2YldselpUeDJiMmxrUGl4Y2JpQWdJQ0JpWldadmNtVlRkR0YwZFhNL09pQnpkSEpwYm1jc0lHRm1kR1Z5VTNSaGRIVnpQem9nYzNSeWFXNW5YRzRnSUgxY2JuMGdQU0I3ZlR0Y2JseHVaWGh3YjNKMElHeGxkQ0JqZFhKeVpXNTBRMkYwWldkdmNuazZJSE4wY21sdVp6dGNibHh1Wlhod2IzSjBJRzVoYldWemNHRmpaU0JoYzNOMWNtVWdlMXh1WEc0Z0lHVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzUk9kV3hzS0haaGJIVmxPaUJoYm5rc0lHNWhiV1UvT2lCemRISnBibWNwSUh0Y2JpQWdJQ0JwWmlBb2RtRnNkV1VnUFQwZ2JuVnNiQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdKSHR1WVcxbElEMDlJRzUxYkd3Z1B5QW5WbUZzZFdVbklEb2dibUZ0WlgwZ2JtOTBJR1JsWm1sdVpXUmdLVHRjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUZSbGMzUlBjSFJwYjI1eklIdGNiaUFnZEdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYmlBZ2RXNW9ZVzVrYkdWa1JYaGpaWEIwYVc5dVZHbHRaVzkxZEQ4NklHNTFiV0psY2p0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGUmxjM1FnZTF4dUlDQjBaWE4wT2lBb0tTQTlQaUJRY205dGFYTmxQR0Z1ZVQ0N1hHNGdJRzVoYldVNklITjBjbWx1Wnp0Y2JpQWdZMkYwWldkdmNuazZJSE4wY21sdVp6dGNiaUFnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ek8xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtHTmhkR1ZuYjNKNU9pQnpkSEpwYm1jc0lHNWhiV1U2SUhOMGNtbHVaeXdnZEdWemREb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4aGJuaytMQ0J2Y0hScGIyNXpQem9nVkdWemRFOXdkR2x2Ym5NcElIdGNiaUFnSUNCMGFHbHpMbU5oZEdWbmIzSjVJRDBnWTJGMFpXZHZjbms3WEc0Z0lDQWdkR2hwY3k1dVlXMWxJRDBnYm1GdFpUdGNiaUFnSUNCdmNIUnBiMjV6SUQ4L1BTQjdmVHRjYmlBZ0lDQnZjSFJwYjI1ekxuUnBiV1Z2ZFhRZ1B6ODlJRE13TURBd08xeHVJQ0FnSUc5d2RHbHZibk11ZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkQ0EvUHowZ01qQXdNRHRjYmlBZ0lDQjBhR2x6TG05d2RHbHZibk1nUFNCdmNIUnBiMjV6TzF4dUlDQWdJSFJvYVhNdWRHVnpkQ0E5SUdGemVXNWpJQ2dwT2lCUWNtOXRhWE5sUEdGdWVUNGdQVDRnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0dGemVXNWpJQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSEpsYzNWc2RDQTlJQ2NuTzF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUdkeWIyc3VjMmhsYkd3dWJHRnpkRVZ5Y205eUlEMGdKeWM3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnpkV3gwSUQwZ1lYZGhhWFFnZEdWemRDZ3BPMXh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsT2lCaGJua3BJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0NFb1lYZGhhWFFnWVhOelpYSjBUbTlGY25KdmNpaHZjSFJwYjI1eklTNTFibWhoYm1Sc1pXUkZlR05sY0hScGIyNVVhVzFsYjNWMElTa3BLVnh1SUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvWUZWdWFHRnVaR3hsWkNCbGVHTmxjSFJwYjI0Z1pIVnlhVzVuSUhSbGMzUTZJQ1I3WjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNKOVlDa3BPMXh1SUNBZ0lDQWdJQ0J5WlhOdmJIWmxLSEpsYzNWc2RDazdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIwWlhOMEtHNWhiV1U2SUhOMGNtbHVaeXdnZEdWemREb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4aGJuaytMQ0J2Y0hScGIyNXpQem9nVkdWemRFOXdkR2x2Ym5NcE9pQjJiMmxrSUh0Y2JpQWdhV1lnS0hSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMGdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BTQjdmVHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFQwZ2RXNWtaV1pwYm1Wa0tWeHVJQ0FnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVkR1Z6ZEhNZ1BTQmJYVHRjYmlBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYUzUwWlhOMGN5RXVjSFZ6YUNodVpYY2dWR1Z6ZENoamRYSnlaVzUwUTJGMFpXZHZjbmtzSUc1aGJXVXNJSFJsYzNRc0lHOXdkR2x2Ym5NcEtUdGNibjFjYmx4dUx5b3FJRUYzWVdsMGN5Qm1iM0lnWVNCM2FHbHNaU0JqYUdWamEybHVaeUIwYUdVZ1pYSnliM0lnYzNSaGRIVnpJRzltSUhSb1pTQndiR0YwWm05eWJTQXFMMXh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlHRnpjMlZ5ZEU1dlJYSnliM0lvYlhNNklHNTFiV0psY2lrNklGQnliMjFwYzJVOFltOXZiR1ZoYmo0Z2UxeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUcxeklDOGdOVEF3T3lBcksya3BJSHRjYmlBZ0lDQmhkMkZwZENCa1pXeGhlU2cxTURBcE8xeHVJQ0FnSUdsbUlDaG5jbTlyTG5Ob1pXeHNMbXhoYzNSRmNuSnZjaTVzWlc1bmRHZ2dJVDA5SURBcFhHNGdJQ0FnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlIUnlkV1U3WEc1OVhHNWNiaThxS2lCVVpYTjBjeUIwZDI4Z2IySnFaV04wY3lCbWIzSWdaWEYxWVd4cGRIa3NJSFJvY205M2N5QmhiaUJsZUdObGNIUnBiMjRnYVdZZ2RHaGxlU0JoY21VZ2JtOTBJR1Z4ZFdGc0xpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRDaGhZM1IxWVd3NklHRnVlU3dnWlhod1pXTjBaV1E2SUdGdWVTazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb1lXTjBkV0ZzSUNFOVBTQmxlSEJsWTNSbFpDbGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUZ3aUpIdGxlSEJsWTNSbFpIMWNJaXdnWjI5MElGd2lKSHRoWTNSMVlXeDlYQ0pnS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRFWnNiMkYwS0dGamRIVmhiRG9nYm5WdFltVnlMQ0JsZUhCbFkzUmxaRG9nYm5WdFltVnlMQ0IwYjJ4bGNtRnVZMlVnUFNBd0xqQXdNU2s2SUhadmFXUWdlMXh1SUNCamIyNXpkQ0JoY21WRmNYVmhiQ0E5SUUxaGRHZ3VZV0p6S0dGamRIVmhiQ0F0SUdWNGNHVmpkR1ZrS1NBOElIUnZiR1Z5WVc1alpUdGNiaUFnYVdZZ0tDRmhjbVZGY1hWaGJDbGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUNSN1pYaHdaV04wWldSOUxDQm5iM1FnSkh0aFkzUjFZV3g5SUNoMGIyeGxjbUZ1WTJVZ1BTQWtlM1J2YkdWeVlXNWpaWDBwWUNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhCbFkzUlBZbXBsWTNRb1lXTjBkV0ZzT2lCN0lGdHJaWGs2SUhOMGNtbHVaMTA2SUdGdWVTQjlMQ0JsZUhCbFkzUmxaRG9nZXlCYmEyVjVPaUJ6ZEhKcGJtZGRPaUJoYm5rZ2ZTa2dlMXh1SUNCbWIzSWdLR052Ym5OMElGdGxlSEJsWTNSbFpFdGxlU3dnWlhod1pXTjBaV1JXWVd4MVpWMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9aWGh3WldOMFpXUXBLU0I3WEc0Z0lDQWdhV1lnS0NGaFkzUjFZV3d1YUdGelQzZHVVSEp2Y0dWeWRIa29aWGh3WldOMFpXUkxaWGtwS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JGZUhCbFkzUmxaQ0J3Y205d1pYSjBlU0JjSWlSN1pYaHdaV04wWldSTFpYbDlYQ0lnYm05MElHWnZkVzVrWUNrN1hHNWNiaUFnSUNCamIyNXpkQ0JoWTNSMVlXeFdZV3gxWlNBOUlHRmpkSFZoYkZ0bGVIQmxZM1JsWkV0bGVWMDdYRzRnSUNBZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUdsdWMzUmhibU5sYjJZZ1FYSnlZWGtnSmlZZ1pYaHdaV04wWldSV1lXeDFaU0JwYm5OMFlXNWpaVzltSUVGeWNtRjVLVnh1SUNBZ0lDQWdaWGh3WldOMFFYSnlZWGtvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUdsdWMzUmhibU5sYjJZZ1QySnFaV04wSUNZbUlHVjRjR1ZqZEdWa1ZtRnNkV1VnYVc1emRHRnVZMlZ2WmlCUFltcGxZM1FwWEc0Z0lDQWdJQ0JsZUhCbFkzUlBZbXBsWTNRb1lXTjBkV0ZzVm1Gc2RXVXNJR1Y0Y0dWamRHVmtWbUZzZFdVcE8xeHVJQ0FnSUdWc2MyVWdhV1lnS0dGamRIVmhiRlpoYkhWbElDRTlJR1Y0Y0dWamRHVmtWbUZzZFdVcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUNSN1pYaHdaV04wWldSV1lXeDFaWDBnWm05eUlHdGxlU0FrZTJWNGNHVmpkR1ZrUzJWNWZTd2daMjkwSUNSN1lXTjBkV0ZzVm1Gc2RXVjlZQ2s3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdWNGNHVmpkRUZ5Y21GNUtHRmpkSFZoYkRvZ1lXNTVXMTBzSUdWNGNHVmpkR1ZrT2lCaGJubGJYU2tnZTF4dUlDQmpiMjV6ZENCaFkzUjFZV3hNWlc1bmRHZ2dQU0JoWTNSMVlXd3ViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQmxlSEJsWTNSbFpFeGxibWQwYUNBOUlHVjRjR1ZqZEdWa0xteGxibWQwYUR0Y2JseHVJQ0JwWmlBb1lXTjBkV0ZzVEdWdVozUm9JQ0U5SUdWNGNHVmpkR1ZrVEdWdVozUm9LU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkJjbkpoZVhNZ1lYSmxJRzltSUdScFptWmxjbVZ1ZENCc1pXNW5kR2c2SUdGamRIVmhiQ0JoY25KaGVTQnNaVzVuZEdnZ2FYTWdKSHRoWTNSMVlXeE1aVzVuZEdoOUlHQWdLMXh1SUNBZ0lDQWdZR0Z1WkNCbGVIQmxZM1JsWkNCaGNuSmhlU0JzWlc1bmRHZ2dhWE1nSkh0bGVIQmxZM1JsWkV4bGJtZDBhSDFnS1R0Y2JpQWdmVnh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dZV04wZFdGc1RHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvWVdOMGRXRnNXMmxkSUdsdWMzUmhibU5sYjJZZ1FYSnlZWGtnSmlZZ1pYaHdaV04wWldSYmFWMGdhVzV6ZEdGdVkyVnZaaUJCY25KaGVTbGNiaUFnSUNBZ0lHVjRjR1ZqZEVGeWNtRjVLR0ZqZEhWaGJGdHBYU3dnWlhod1pXTjBaV1JiYVYwcE8xeHVJQ0FnSUdWc2MyVWdhV1lnS0dGamRIVmhiRnRwWFNCcGJuTjBZVzVqWlc5bUlFOWlhbVZqZENBbUppQmxlSEJsWTNSbFpGdHBYU0JwYm5OMFlXNWpaVzltSUU5aWFtVmpkQ2xjYmlBZ0lDQWdJR1Y0Y0dWamRFOWlhbVZqZENoaFkzUjFZV3hiYVYwc0lHVjRjR1ZqZEdWa1cybGRLVHRjYmlBZ0lDQmxiSE5sSUdsbUlDaGhZM1IxWVd4YmFWMGdJVDBnWlhod1pXTjBaV1JiYVYwcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVWNGNHVmpkR1ZrSUNSN1pYaHdaV04wWldSYmFWMTlJR0YwSUhCdmMybDBhVzl1SUNSN2FYMHNJR2R2ZENBa2UyRmpkSFZoYkZ0cFhYMWdLVHRjYmlBZ2ZWeHVmVnh1WEc0dktpb2dSR1ZtYVc1bGN5QmhJSFJsYzNRZ2MzVnBkR1V1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRjBaV2R2Y25rb1kyRjBaV2R2Y25rNklITjBjbWx1Wnl3Z2RHVnpkSE02SUNncElEMCtJSFp2YVdRcE9pQjJiMmxrSUh0Y2JpQWdZM1Z5Y21WdWRFTmhkR1ZuYjNKNUlEMGdZMkYwWldkdmNuazdYRzRnSUhSbGMzUnpLQ2s3WEc1OVhHNWNiaThxS2lCRVpXWnBibVZ6SUdFZ1puVnVZM1JwYjI0Z2RHOGdZbVVnWlhobFkzVjBaV1FnWW1WbWIzSmxJSFJvWlNCMFpYTjBjeUJwYmlCMGFHbHpJR05oZEdWbmIzSjVJR0Z5WlNCbGVHVmpkWFJsWkM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmlaV1p2Y21Vb1ltVm1iM0psT2lBb0tTQTlQaUJRY205dGFYTmxQSFp2YVdRK0tUb2dkbTlwWkNCN1hHNGdJR2xtSUNoMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRJRDA5SUhWdVpHVm1hVzVsWkNsY2JpQWdJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZElEMGdlMzA3WEc0Z0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1WW1WbWIzSmxJRDBnWW1WbWIzSmxPMXh1ZlZ4dVhHNHZLaW9nUkdWbWFXNWxjeUJoSUdaMWJtTjBhVzl1SUhSdklHSmxJR1Y0WldOMWRHVmtJR0ZtZEdWeUlIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaFpuUmxjaWhoWm5SbGNqb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaWs2SUhadmFXUWdlMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOVBTQjFibVJsWm1sdVpXUXBYRzRnSUNBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5SUh0OU8xeHVJQ0IwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZExtRm1kR1Z5SUQwZ1lXWjBaWEk3WEc1OVhHNWNibHh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlISjFibFJsYzNSektHOXdkR2x2Ym5NL09pQjdJR05oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0IwWlhOMFB6b2djM1J5YVc1bklIMHBJSHRjYmlBZ1kyOXVjM1FnY21WemRXeDBjem9nZXlCallYUmxaMjl5ZVQ4NklITjBjbWx1Wnl3Z2JtRnRaVDg2SUhOMGNtbHVaeXdnYzNWalkyVnpjem9nWW05dmJHVmhiaXdnY21WemRXeDBPaUJ6ZEhKcGJtY2dmVnRkSUQwZ1cxMDdYRzVjYmlBZ1ptOXlJQ2hqYjI1emRDQmJhMlY1TENCMllXeDFaVjBnYjJZZ1QySnFaV04wTG1WdWRISnBaWE1vZEdWemRITXBLU0I3WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk0vTG1OaGRHVm5iM0o1SUNFOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdhV1lnS0NGclpYa3VkRzlNYjNkbGNrTmhjMlVvS1M1emRHRnlkSE5YYVhSb0tHOXdkR2x2Ym5NL0xtTmhkR1ZuYjNKNUxuUnZURzkzWlhKRFlYTmxLQ2twS1Z4dUlDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVVwWEc0Z0lDQWdJQ0FnSUdGM1lXbDBJSFpoYkhWbExtSmxabTl5WlNncE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0hnNklHRnVlU2tnZTF4dUlDQWdJQ0FnZG1Gc2RXVXVZbVZtYjNKbFUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0IwSUQwZ2RtRnNkV1V1ZEdWemRITWdQejhnVzEwN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ1cxMDdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBMbXhsYm1kMGFEc2dhU3NyS1Z4dUlDQWdJQ0FnY21WekxuQjFjMmdvWVhkaGFYUWdaWGhsWTFSbGMzUW9kRnRwWFN3Z2IzQjBhVzl1Y3o4dWRHVnpkQ2twTzF4dVhHNGdJQ0FnWTI5dWMzUWdaR0YwWVNBOUlDaGhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHlaWE1wS1M1bWFXeDBaWElvS0dRcElEMCtJR1F1Y21WemRXeDBJQ0U5SUNkemEybHdjR1ZrSnlrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWhablJsY2lsY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZG1Gc2RXVXVZV1owWlhJb0tUdGNiaUFnSUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbUZtZEdWeVUzUmhkSFZ6SUQwZ2VDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kbUZzZFdVdVlXWjBaWEpUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWhablJsY2xOMFlYUjFjeXdnYzNWalkyVnpjem9nWm1Gc2MyVjlLVHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVXVZbVZtYjNKbFUzUmhkSFZ6S1Z4dUlDQWdJQ0FnWkdGMFlTNXdkWE5vS0h0allYUmxaMjl5ZVRvZ2EyVjVMQ0J1WVcxbE9pQW5hVzVwZENjc0lISmxjM1ZzZERvZ2RtRnNkV1V1WW1WbWIzSmxVM1JoZEhWekxDQnpkV05qWlhOek9pQm1ZV3h6WlgwcE8xeHVJQ0FnSUhKbGMzVnNkSE11Y0hWemFDZ3VMaTVrWVhSaEtUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnlaWE4xYkhSek8xeHVmVnh1WEc1aGMzbHVZeUJtZFc1amRHbHZiaUJsZUdWalZHVnpkQ2gwT2lCVVpYTjBMQ0J3Y21Wa2FXTmhkR1U2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0JzWlhRZ2Nqb2dleUJqWVhSbFoyOXllVDg2SUhOMGNtbHVaeXdnYm1GdFpUODZJSE4wY21sdVp5d2djM1ZqWTJWemN6b2dZbTl2YkdWaGJpd2djbVZ6ZFd4ME9pQnpkSEpwYm1jZ2ZUdGNiaUFnZEhKNUlIdGNiaUFnSUNCcFppQW9jSEpsWkdsallYUmxJQ0U5SUhWdVpHVm1hVzVsWkNBbUppQW9JWFF1Ym1GdFpTNTBiMHh2ZDJWeVEyRnpaU2dwTG5OMFlYSjBjMWRwZEdnb2NISmxaR2xqWVhSbExuUnZURzkzWlhKRFlYTmxLQ2twS1NsY2JpQWdJQ0FnSUhJZ1BTQjdjM1ZqWTJWemN6b2dkSEoxWlN3Z2NtVnpkV3gwT2lBbmMydHBjSEJsWkNkOU8xeHVJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lISWdQU0I3YzNWalkyVnpjem9nZEhKMVpTd2djbVZ6ZFd4ME9pQmhkMkZwZENCMExuUmxjM1FvS1NBL1B5QW5UMHNuZlR0Y2JpQWdmU0JqWVhSamFDQW9lRG9nWVc1NUtTQjdYRzRnSUNBZ2NpQTlJSHR6ZFdOalpYTnpPaUJtWVd4elpTd2djbVZ6ZFd4ME9pQjRMblJ2VTNSeWFXNW5LQ2w5TzF4dUlDQjlYRzRnSUhJdVkyRjBaV2R2Y25rZ1BTQjBMbU5oZEdWbmIzSjVPMXh1SUNCeUxtNWhiV1VnUFNCMExtNWhiV1U3WEc0Z0lISmxkSFZ5YmlCeU8xeHVmVnh1WEc0dktpb2dWMkZwZEhNZ1cyMXpYU0J0YVd4c2FYTmxZMjl1WkhNZ0tpOWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCa1pXeGhlU2h0Y3pvZ2JuVnRZbVZ5S1NCN1hHNGdJR0YzWVdsMElHNWxkeUJRY205dGFYTmxLQ2h5S1NBOVBpQnpaWFJVYVcxbGIzVjBLSElzSUcxektTazdYRzU5WEc0aVhYMD0iLCJpbXBvcnQgeyBjYXRlZ29yeSB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuY2F0ZWdvcnkoJ0hlbG0nLCAoKSA9PiB7XG4gICAgLy8gVGhlc2UgdGVzdHMgcmVxdWlyZSB3ZWJzZXJ2aWNlIHRoYXQgaXMgbm90IHByZXNlbnQgb24gdGVzdCBzdGFuZFxuICAgIC8vIHRlc3QoJ2hlbG1Ub0Zhc3RhJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgZXhwZWN0KGF3YWl0IGhlbG1Ub0Zhc3RhKCdSTkExe1IoVSlQLlIoVClQLlIoRylQLlIoQylQLlIoQSl9JCQkJCcpLCAnPlJOQTFVVEdDQScpO1xuICAgIC8vICAgZXhwZWN0KGF3YWl0IGhlbG1Ub0Zhc3RhKCdSTkExe1AuUihVKS5QLlIoVCl9JCQkJCcpLCAnPlJOQTFVVCcpO1xuICAgIC8vICAgZXhwZWN0KGF3YWl0IGhlbG1Ub0Zhc3RhKCdQRVBUSURFMXtBLkd9JCQkJFYyLjAnKSwgJz5QRVBUSURFMUFHJyk7XG4gICAgLy8gfSk7XG4gICAgLy9cbiAgICAvLyB0ZXN0KCdoZWxtVG9STkEnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBleHBlY3QoYXdhaXQgaGVsbVRvUk5BKCdSTkExe1IoVSlQLlIoVClQLlIoRylQLlIoQylQLlIoQSl9JCQkJCcpLCAnVVRHQ0EnKTtcbiAgICAvLyAgIGV4cGVjdChhd2FpdCBoZWxtVG9STkEoJ1JOQTF7UC5SKFUpLlAuUihUKX0kJCQkJyksICdVVCcpO1xuICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAvLyAgIGV4cGVjdChhd2FpdCBoZWxtVG9STkEoJ1JOQTF7UihVKVAuUihUKVB9fFJOQTJ7UC5SKEEpUC5SKEEpfSRSTkExLFJOQTIsMjpwYWlyLTY6cGFpcnxSTkExLFJOQTIsNTpwYWlyLTM6cGFpciQkJCcpLCAnVVQgQUEnKTtcbiAgICAvLyB9KTtcbiAgICAvL1xuICAgIC8vIHRlc3QoJ2hlbG1Ub1BlcHRpZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBleHBlY3QoYXdhaXQgaGVsbVRvUGVwdGlkZSgnUEVQVElERTF7QS5HfSQkJCRWMi4wJyksICdBRycpO1xuICAgIC8vICAgZXhwZWN0KGF3YWl0IGhlbG1Ub1BlcHRpZGUoJ1BFUFRJREUxe0wuVi5BfXxQRVBUSURFMntMLlYuQX0kJCQkJyksICdMVkEgTFZBJyk7XG4gICAgLy8gICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIC8vICAgZXhwZWN0KGF3YWl0IGhlbG1Ub1BlcHRpZGUoJ1BFUFRJREUxe0EuUi5DLkEuQS5LLlQuQy5ELkF9JFBFUFRJREUxLFBFUFRJREUxLDg6UjMtMzpSMyQkJCcpLCAnQVJDQUFLVENEQScpO1xuICAgIC8vIH0pO1xuICAgIC8vIGRldGVjdE1hY3JvbW9sZWN1bGUgaXMgYSBmdW5jdGlvbiBvZiBCaW8gcGFja2FnZVxuICAgIC8vIHRlc3QoJ2RldGVjdE1hY3JvbW9sZWN1bGUnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBmaWxlID0gYXdhaXQgX3BhY2thZ2UuZmlsZXMucmVhZEFzVGV4dCgndGVzdHMvdGVzdC5jc3YnKTtcbiAgICAvLyAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoZmlsZSk7XG4gICAgLy8gICBjb25zdCBjb2wgPSBkZi5jb2x1bW5zLmJ5TmFtZSgnSEVMTSBzdHJpbmcnKTtcbiAgICAvLyAgIGF3YWl0IGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgICAvLyAgIGV4cGVjdChjb2wuc2VtVHlwZSwgREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKTtcbiAgICAvLyB9KTtcbiAgICAvLyBzZW1UeXBlIGFuZCB1bml0cyB0YWdzIGFyZSBkZXRlY3RpbmcgYnkgQmlvIHBhY2thZ2UgZnVuY3Rpb24gZGV0ZWN0TWFjcm9tb2xlY3VsZVxuICAgIC8vIHRlc3QoJ2RldGVjdEhlbG0nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gICBjb25zdCBmaWxlID0gYXdhaXQgX3BhY2thZ2UuZmlsZXMucmVhZEFzVGV4dCgndGVzdHMvdGVzdC5jc3YnKTtcbiAgICAvLyAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoZmlsZSk7XG4gICAgLy8gICBjb25zdCBjb2wgPSBkZi5jb2x1bW5zLmJ5TmFtZSgnSEVMTSBzdHJpbmcnKTtcbiAgICAvLyAgIGF3YWl0IGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgICAvLyAgIGV4cGVjdChjb2wudGFnc1tERy5UQUdTLlVOSVRTXSwgJ0hFTE0nKTtcbiAgICAvLyB9KTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBERzsiLCJtb2R1bGUuZXhwb3J0cyA9IGdyb2s7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IHJ1blRlc3RzLCB0ZXN0cyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL2hlbG0tdGVzdHMudHMnO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbmV4cG9ydCB7IHRlc3RzIH07XG4vL25hbWU6IHRlc3Rcbi8vaW5wdXQ6IHN0cmluZyBjYXRlZ29yeSB7b3B0aW9uYWw6IHRydWV9XG4vL2lucHV0OiBzdHJpbmcgdGVzdCB7b3B0aW9uYWw6IHRydWV9XG4vL291dHB1dDogZGF0YWZyYW1lIHJlc3VsdFxuLy90b3AtbWVudTogVG9vbHMgfCBEZXYgfCBKUyBBUEkgVGVzdHNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KGNhdGVnb3J5LCB0ZXN0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHlpZWxkIHJ1blRlc3RzKHsgY2F0ZWdvcnksIHRlc3QgfSk7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbU9iamVjdHMoZGF0YSk7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|