{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\textbook\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\textbook\\index.vue","mtime":1787640892029},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1787309791954},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInOwppbXBvcnQgeyBsaXN0VGVhY2hpbmdNYXRlcmlhbCwgZ2V0VGVhY2hpbmdNYXRlcmlhbEJ5SWQsIGFkZFRlYWNoaW5nTWF0ZXJpYWwsIHVwZGF0ZVRlYWNoaW5nTWF0ZXJpYWwsIGRlbGV0ZVRlYWNoaW5nTWF0ZXJpYWwsIGRvd25sb2FkVGVhY2hpbmdNYXRlcmlhbFRlbXBsYXRlLCBpbXBvcnRUZWFjaGluZ01hdGVyaWFsIH0gZnJvbSAnQC9hcGkvdGV4dGJvb2svdGVhY2hpbmdNYXRlcmlhbCc7CmltcG9ydCB7IGxpc3RUZWFjaGluZ1N0b2NrLCBnZXRUZWFjaGluZ1N0b2NrLCBhZGRUZWFjaGluZ1N0b2NrLCB1cGRhdGVUZWFjaGluZ1N0b2NrLCBkZWxldGVUZWFjaGluZ1N0b2NrLCBsaXN0VGVhY2hpbmdTdG9ja0RldGFpbCwgZ2V0VGVhY2hpbmdTdG9ja0RldGFpbCwgYWRkVGVhY2hpbmdTdG9ja0RldGFpbCwgdXBkYXRlVGVhY2hpbmdTdG9ja0RldGFpbCwgZGVsZXRlVGVhY2hpbmdTdG9ja0RldGFpbCB9IGZyb20gJ0AvYXBpL3RleHRib29rL3RlYWNoaW5nU3RvY2snOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ1RleHRib29rSW5kZXgnLAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBhY3RpdmVUYWI6ICdpbmZvJywKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5p+l6K+i6KGo5Y2V77yI5LuF5ZCO56uvIE1hcHBlciDmlK/mjIHnmoTlrZfmrrXvvIkgPT09PT09PT09PT09PT09PT09PT0KICAgICAgc2VhcmNoRm9ybTogewogICAgICAgIGJoOiAnJywKICAgICAgICBtYzogJycsCiAgICAgICAgeno6ICcnLAogICAgICAgIGNiczogJycsCiAgICAgICAgaXNibjogJycsCiAgICAgICAgamNmbDogJycsCiAgICAgICAgamNseDogJycsCiAgICAgICAgdHlUeXBlOiAnJwogICAgICB9LAogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDkuIvmi4npgInpobkgPT09PT09PT09PT09PT09PT09PT0KICAgICAgamNmbE9wdGlvbnM6IFsn5Z+65pys5pWZ5p2QJywgJ+i+heWKqeaVmeadkCcsICflj4LogIPotYTmlpknXSwKICAgICAgamNseE9wdGlvbnM6IFsn5Zu95a626KeE5YiSJywgJ+WGm+mYn+inhOWIkicsICfpmaLmoKHoh6rnvJYnXSwKICAgICAgamNieGx4T3B0aW9uczogWyfoh6rnvJYnLCAn6YCJ55SoJ10sCiAgICAgIGpjemRseE9wdGlvbnM6IFsn5LiA6Iis5pWZ5p2QJywgJ+mHjeeCueaVmeadkCcsICfop4TliJLmlZnmnZAnXSwKICAgICAgamNseU9wdGlvbnM6IFsn5pWZ56CU5L+d6Zqc5Lit5b+D5aSW6LStJywgJ+iHqui0rScsICfkuIrnuqfphY3lj5EnXSwKICAgICAgamNjY09wdGlvbnM6IFsn5pegJywgJ+acrOenkScsICfnoJTnqbbnlJ8nXSwKICAgICAgY2Jmc09wdGlvbnM6IFsn5YWs5byA5Ye654mIJywgJ+WGhemDqOWHuueJiCddLAogICAgICBqY21qT3B0aW9uczogWyflhazlvIAnLCAn5YaF6YOoJywgJ+enmOWvhiddLAogICAgICBqbGR3T3B0aW9uczogWyfmnKwnLCAn5YaMJ10sCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOihqOagvOaVsOaNriA9PT09PT09PT09PT09PT09PT09PQogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgdGFibGVEYXRhOiBbXSwKICAgICAgcGFnZU51bTogMSwKICAgICAgcGFnZVNpemU6IDIwLAogICAgICB0b3RhbDogMCwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5paw5bu65pWZ5p2QID09PT09PT09PT09PT09PT09PT09CiAgICAgIGFkZERpYWxvZ1Zpc2libGU6IGZhbHNlLAogICAgICBhZGRTYXZpbmc6IGZhbHNlLAogICAgICBhZGRGb3JtOiB0aGlzLmNyZWF0ZUVtcHR5Rm9ybSgpLAogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHmlZnmnZAgPT09PT09PT09PT09PT09PT09PT0KICAgICAgZWRpdERpYWxvZ1Zpc2libGU6IGZhbHNlLAogICAgICBlZGl0TG9hZGluZzogZmFsc2UsCiAgICAgIGVkaXRTYXZpbmc6IGZhbHNlLAogICAgICBlZGl0Rm9ybTogdGhpcy5jcmVhdGVFbXB0eUZvcm0oKSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g6KGo5Y2V5qCh6aqMID09PT09PT09PT09PT09PT09PT09CiAgICAgIGZvcm1SdWxlczogewogICAgICAgIG1jOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36L6T5YWl5pWZ5p2Q5ZCN56ewJywKICAgICAgICAgIHRyaWdnZXI6ICdibHVyJwogICAgICAgIH1dLAogICAgICAgIGpjYnhseDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+ivt+mAieaLqee8luWGmeexu+WeiycsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOWvvOWFpSA9PT09PT09PT09PT09PT09PT09PQogICAgICBzZWxlY3RlZEZpbGU6IG51bGwsCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaVmeadkOW6k+WtmOWNle+8iEpDS0NE77yJID09PT09PT09PT09PT09PT09PT09CiAgICAgIHN0b2NrU2VhcmNoRm9ybTogewogICAgICAgIGJoOiAnJywKICAgICAgICBtYzogJycsCiAgICAgICAgbGI6ICcnLAogICAgICAgIHpiOiAnJywKICAgICAgICB6dDogJycKICAgICAgfSwKICAgICAgc3RvY2tMb2FkaW5nOiBmYWxzZSwKICAgICAgc3RvY2tUYWJsZURhdGE6IFtdLAogICAgICBzdG9ja1BhZ2VOdW06IDEsCiAgICAgIHN0b2NrUGFnZVNpemU6IDIwLAogICAgICBzdG9ja1RvdGFsOiAwLAogICAgICBzdG9ja0Zvcm1EaWFsb2dWaXNpYmxlOiBmYWxzZSwKICAgICAgc3RvY2tGb3JtTG9hZGluZzogZmFsc2UsCiAgICAgIHN0b2NrU2F2aW5nOiBmYWxzZSwKICAgICAgaXNTdG9ja0FkZDogdHJ1ZSwKICAgICAgc3RvY2tGb3JtOiB0aGlzLmNyZWF0ZUVtcHR5U3RvY2tGb3JtKCksCiAgICAgIHN0b2NrRm9ybVJ1bGVzOiB7CiAgICAgICAgbWM6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXlkI3np7AnLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgc3RvY2tEZXRhaWxEaWFsb2dWaXNpYmxlOiBmYWxzZSwKICAgICAgc3RvY2tEZXRhaWxEYXRhOiB7fSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5pWZ5p2Q5bqT5a2Y5piO57uG6aG577yISkNLQ01YWO+8iSA9PT09PT09PT09PT09PT09PT09PQogICAgICBkZXRhaWxTZWFyY2hGb3JtOiB7CiAgICAgICAgYmg6ICcnLAogICAgICAgIGpja2NkYmJoOiAnJywKICAgICAgICBqY3h4Ymg6ICcnLAogICAgICAgIGh3YndUeXBlOiAnJwogICAgICB9LAogICAgICBkZXRhaWxMb2FkaW5nOiBmYWxzZSwKICAgICAgZGV0YWlsVGFibGVEYXRhOiBbXSwKICAgICAgZGV0YWlsUGFnZU51bTogMSwKICAgICAgZGV0YWlsUGFnZVNpemU6IDIwLAogICAgICBkZXRhaWxUb3RhbDogMCwKICAgICAgZGV0YWlsRm9ybURpYWxvZ1Zpc2libGU6IGZhbHNlLAogICAgICBkZXRhaWxGb3JtTG9hZGluZzogZmFsc2UsCiAgICAgIGRldGFpbFNhdmluZzogZmFsc2UsCiAgICAgIGlzRGV0YWlsQWRkOiB0cnVlLAogICAgICBkZXRhaWxGb3JtOiB0aGlzLmNyZWF0ZUVtcHR5RGV0YWlsRm9ybSgpLAogICAgICBkZXRhaWxGb3JtUnVsZXM6IHsKICAgICAgICBqY2tjZGJiaDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+ivt+i+k+WFpeW6k+WtmOWNlee8luWPtycsCiAgICAgICAgICB0cmlnZ2VyOiAnYmx1cicKICAgICAgICB9XSwKICAgICAgICBqY3h4Ymg6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXmlZnmnZDkv6Hmga/nvJblj7cnLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0sCiAgICAgICAgc2w6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXmlbDph48nLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XQogICAgICB9LAogICAgICBkZXRhaWxWaWV3RGlhbG9nVmlzaWJsZTogZmFsc2UsCiAgICAgIGRldGFpbFZpZXdEYXRhOiB7fQogICAgfTsKICB9LAogIGNvbXB1dGVkOiB7CiAgICBmaWxlTmFtZTogZnVuY3Rpb24gZmlsZU5hbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZSAmJiB0aGlzLnNlbGVjdGVkRmlsZS5uYW1lIHx8ICfmnKrpgInmi6nku7vkvZXmlofku7YnOwogICAgfQogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHRoaXMuZmV0Y2hMaXN0KCk7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvKiog6KGo5qC85pel5pyf5qC85byP5YyWICovZm9ybWF0RGF0ZTogZnVuY3Rpb24gZm9ybWF0RGF0ZShyb3csIGNvbHVtbiwgY2VsbFZhbHVlKSB7CiAgICAgIHJldHVybiBjZWxsVmFsdWUgPyBTdHJpbmcoY2VsbFZhbHVlKS5zbGljZSgwLCAxMCkgOiAnJzsKICAgIH0sCiAgICAvKiog57uf5LiA5qC85byP5YyW5ZCO56uvIExvY2FsRGF0ZVRpbWXvvIjljrvpmaQgVOOAgeaIquaWreWIsOenku+8iSAqL2ZtdERhdGVUaW1lOiBmdW5jdGlvbiBmbXREYXRlVGltZSh2YWwpIHsKICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09ICcnKSByZXR1cm4gJyc7CiAgICAgIHJldHVybiBTdHJpbmcodmFsKS5yZXBsYWNlKCdUJywgJyAnKS5zbGljZSgwLCAxOSk7CiAgICB9LAogICAgLyoqIOepuuWAvOaYvuekuuS4uiAnLSfvvIhWdWUgMiDmqKHmnb/ooajovr7lvI/kuI3mlK/mjIEgPz8g6L+Q566X56ym77yJICovZm10VmFsOiBmdW5jdGlvbiBmbXRWYWwodmFsKSB7CiAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJyA/ICctJyA6IHZhbDsKICAgIH0sCiAgICAvKiog5Yib5bu656m655m95pWZ5p2Q6KGo5Y2VICovY3JlYXRlRW1wdHlGb3JtOiBmdW5jdGlvbiBjcmVhdGVFbXB0eUZvcm0oKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWM6ICcnLAogICAgICAgIHp6OiAnJywKICAgICAgICBjYnM6ICcnLAogICAgICAgIGlzYm46ICcnLAogICAgICAgIGNicnE6ICcnLAogICAgICAgIGpjZmw6ICcnLAogICAgICAgIGpjbHg6ICcnLAogICAgICAgIGpjYnhseDogJycsCiAgICAgICAgamN6ZGx4OiAnJywKICAgICAgICBqY2x5OiAnJywKICAgICAgICBqY2NjOiAnJywKICAgICAgICBiYzogJycsCiAgICAgICAga2I6ICcnLAogICAgICAgIGRqOiBudWxsLAogICAgICAgIGpsZHc6ICfmnKwnLAogICAgICAgIHpyanlqbHhmZjogJycsCiAgICAgICAgamNkbTogJycsCiAgICAgICAgY2JmczogJycsCiAgICAgICAgamNtajogJycsCiAgICAgICAgYnhkdzogJycsCiAgICAgICAgYno6ICcnLAogICAgICAgIHhjeTogZmFsc2UsCiAgICAgICAgdHk6IGZhbHNlCiAgICAgIH07CiAgICB9LAogICAgLyoqIOWIm+W7uuepuueZveW6k+WtmOWNleihqOWNlSAqL2NyZWF0ZUVtcHR5U3RvY2tGb3JtOiBmdW5jdGlvbiBjcmVhdGVFbXB0eVN0b2NrRm9ybSgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBtYzogJycsCiAgICAgICAgcWtzbTogJycsCiAgICAgICAgbGI6ICcnLAogICAgICAgIHpiOiAnJywKICAgICAgICBjYmJtYmg6ICcnLAogICAgICAgIGNicmJoOiAnJywKICAgICAgICBiZ3liaDogJycsCiAgICAgICAgc3ByYmg6ICcnLAogICAgICAgIHp0OiAnJywKICAgICAgICBiejogJycsCiAgICAgICAganNvbnpkOiAnJwogICAgICB9OwogICAgfSwKICAgIC8qKiDliJvlu7rnqbrnmb3lupPlrZjmmI7nu4bpobnooajljZUgKi9jcmVhdGVFbXB0eURldGFpbEZvcm06IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5RGV0YWlsRm9ybSgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBqY2tjZGJiaDogJycsCiAgICAgICAgamN4eGJoOiAnJywKICAgICAgICBzbDogbnVsbCwKICAgICAgICBxemtjbXh4Ymg6ICcnLAogICAgICAgIGh3Ync6IGZhbHNlLAogICAgICAgIGh3YndzajogJycsCiAgICAgICAgYno6ICcnLAogICAgICAgIGpzb256ZDogJycKICAgICAgfTsKICAgIH0sCiAgICAvKiog56e76Zmk56m65YC8ICovY2xlYW5QYXlsb2FkOiBmdW5jdGlvbiBjbGVhblBheWxvYWQob2JqKSB7CiAgICAgIHZhciBwYXlsb2FkID0ge307CiAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07CiAgICAgICAgaWYgKHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBwYXlsb2FkW2tleV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gcGF5bG9hZDsKICAgIH0sCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDliJfooajliqDovb0gPT09PT09PT09PT09PT09PT09PT0KICAgIGJ1aWxkUXVlcnk6IGZ1bmN0aW9uIGJ1aWxkUXVlcnkoKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHZhciBwYXJhbXMgPSB7fTsKICAgICAgWydiaCcsICdtYycsICd6eicsICdjYnMnLCAnaXNibicsICdqY2ZsJywgJ2pjbHgnXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICB2YXIgdmFsdWUgPSBfdGhpcy5zZWFyY2hGb3JtW2tleV07CiAgICAgICAgaWYgKHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBwYXJhbXNba2V5XSA9IFN0cmluZyh2YWx1ZSkudHJpbSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0udHlUeXBlID09PSAnMCcpIHBhcmFtcy50eSA9IGZhbHNlO2Vsc2UgaWYgKHRoaXMuc2VhcmNoRm9ybS50eVR5cGUgPT09ICcxJykgcGFyYW1zLnR5ID0gdHJ1ZTsKICAgICAgcmV0dXJuIHBhcmFtczsKICAgIH0sCiAgICBmZXRjaExpc3Q6IGZ1bmN0aW9uIGZldGNoTGlzdCgpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICAgIHZhciBwYXJhbXMgPSBfb2JqZWN0U3ByZWFkKHsKICAgICAgICBwYWdlTnVtOiB0aGlzLnBhZ2VOdW0sCiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUKICAgICAgfSwgdGhpcy5idWlsZFF1ZXJ5KCkpOwogICAgICBsaXN0VGVhY2hpbmdNYXRlcmlhbChwYXJhbXMpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9OwogICAgICAgIF90aGlzMi50YWJsZURhdGEgPSBkYXRhLnJlY29yZHMgfHwgW107CiAgICAgICAgX3RoaXMyLnRvdGFsID0gZGF0YS50b3RhbCB8fCAwOwogICAgICAgIF90aGlzMi5sb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczIudGFibGVEYXRhID0gW107CiAgICAgICAgX3RoaXMyLnRvdGFsID0gMDsKICAgICAgICBfdGhpczIubG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDmn6Xor6IgLyDph43nva4gPT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZVNlYXJjaDogZnVuY3Rpb24gaGFuZGxlU2VhcmNoKCkgewogICAgICB0aGlzLnBhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZVJlc2V0OiBmdW5jdGlvbiBoYW5kbGVSZXNldCgpIHsKICAgICAgdGhpcy5zZWFyY2hGb3JtID0gewogICAgICAgIGJoOiAnJywKICAgICAgICBtYzogJycsCiAgICAgICAgeno6ICcnLAogICAgICAgIGNiczogJycsCiAgICAgICAgaXNibjogJycsCiAgICAgICAgamNmbDogJycsCiAgICAgICAgamNseDogJycsCiAgICAgICAgdHlUeXBlOiAnJwogICAgICB9OwogICAgICB0aGlzLnBhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVNpemVDaGFuZ2Uoc2l6ZSkgewogICAgICB0aGlzLnBhZ2VTaXplID0gc2l6ZTsKICAgICAgdGhpcy5wYWdlTnVtID0gMTsKICAgICAgdGhpcy5mZXRjaExpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDdXJyZW50Q2hhbmdlKHBhZ2UpIHsKICAgICAgdGhpcy5wYWdlTnVtID0gcGFnZTsKICAgICAgdGhpcy5mZXRjaExpc3QoKTsKICAgIH0sCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDml6DlkI7nq6/mjqXlj6PnmoTmk43kvZwgPT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZURvd25sb2FkTGlzdDogZnVuY3Rpb24gaGFuZGxlRG93bmxvYWRMaXN0KCkgewogICAgICB0aGlzLiRtZXNzYWdlLmluZm8oJ+WQjuerr+aaguacquaPkOS+m+ivpeaOpeWPoycpOwogICAgfSwKICAgIGhhbmRsZURvd25sb2FkWmlwOiBmdW5jdGlvbiBoYW5kbGVEb3dubG9hZFppcCgpIHsKICAgICAgdGhpcy4kbWVzc2FnZS5pbmZvKCflkI7nq6/mmoLmnKrmj5Dkvpvor6XmjqXlj6MnKTsKICAgIH0sCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDmlrDlu7rmlZnmnZAgPT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZU5ldzogZnVuY3Rpb24gaGFuZGxlTmV3KCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdGhpcy5hZGRGb3JtID0gdGhpcy5jcmVhdGVFbXB0eUZvcm0oKTsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMy4kcmVmcy5hZGRGb3JtUmVmICYmIF90aGlzMy4kcmVmcy5hZGRGb3JtUmVmLmNsZWFyVmFsaWRhdGUoKTsKICAgICAgfSk7CiAgICAgIHRoaXMuYWRkRGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICB9LAogICAgaGFuZGxlQWRkQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlQWRkQ29uZmlybSgpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuYWRkRm9ybVJlZi52YWxpZGF0ZShmdW5jdGlvbiAodmFsaWQpIHsKICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm47CiAgICAgICAgX3RoaXM0LmFkZFNhdmluZyA9IHRydWU7CiAgICAgICAgYWRkVGVhY2hpbmdNYXRlcmlhbChfdGhpczQuYnVpbGRQYXlsb2FkKF90aGlzNC5hZGRGb3JtKSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczQuJG1lc3NhZ2Uuc3VjY2Vzcygn5paw5aKe5oiQ5YqfJyk7CiAgICAgICAgICBfdGhpczQuYWRkRGlhbG9nVmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgX3RoaXM0LmZldGNoTGlzdCgpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzNC5hZGRTYXZpbmcgPSBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLy8gPT09PT09PT09PT09PT09PT09PT0g57yW6L6R5pWZ5p2QID09PT09PT09PT09PT09PT09PT09CiAgICBoYW5kbGVFZGl0OiBmdW5jdGlvbiBoYW5kbGVFZGl0KHJvdykgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdGhpcy5lZGl0RGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICAgIHRoaXMuZWRpdExvYWRpbmcgPSB0cnVlOwogICAgICBnZXRUZWFjaGluZ01hdGVyaWFsQnlJZChyb3cuaWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9OwogICAgICAgIHZhciBmb3JtID0gX3RoaXM1LmNyZWF0ZUVtcHR5Rm9ybSgpOwogICAgICAgIE9iamVjdC5rZXlzKGZvcm0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmIGRhdGFba2V5XSAhPT0gbnVsbCkgZm9ybVtrZXldID0gZGF0YVtrZXldOwogICAgICAgIH0pOwogICAgICAgIC8vIOaXpeacn+Wtl+auteaIquaWremAgumFjSBkYXRlIOaOp+S7tgogICAgICAgIGlmIChmb3JtLmNicnEpIGZvcm0uY2JycSA9IFN0cmluZyhmb3JtLmNicnEpLnNsaWNlKDAsIDEwKTsKICAgICAgICBmb3JtLmlkID0gZGF0YS5pZDsKICAgICAgICBmb3JtLmJoID0gZGF0YS5iaDsKICAgICAgICBfdGhpczUuZWRpdEZvcm0gPSBmb3JtOwogICAgICAgIF90aGlzNS5lZGl0TG9hZGluZyA9IGZhbHNlOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXM1LmVkaXREaWFsb2dWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgX3RoaXM1LmVkaXRMb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIGhhbmRsZUVkaXRDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVFZGl0Q29uZmlybSgpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuZWRpdEZvcm1SZWYudmFsaWRhdGUoZnVuY3Rpb24gKHZhbGlkKSB7CiAgICAgICAgaWYgKCF2YWxpZCkgcmV0dXJuOwogICAgICAgIHZhciBwYXlsb2FkID0gX3RoaXM2LmJ1aWxkUGF5bG9hZChfdGhpczYuZWRpdEZvcm0pOwogICAgICAgIGlmICghX3RoaXM2LmVkaXRGb3JtLmlkKSB7CiAgICAgICAgICBfdGhpczYuJG1lc3NhZ2Uud2FybmluZygn57y65bCR6K6w5b2VSUTvvIzml6Dms5Xkv53lrZgnKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgcGF5bG9hZC5pZCA9IF90aGlzNi5lZGl0Rm9ybS5pZDsKICAgICAgICBwYXlsb2FkLmJoID0gX3RoaXM2LmVkaXRGb3JtLmJoOwogICAgICAgIF90aGlzNi5lZGl0U2F2aW5nID0gdHJ1ZTsKICAgICAgICB1cGRhdGVUZWFjaGluZ01hdGVyaWFsKHBheWxvYWQpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM2LiRtZXNzYWdlLnN1Y2Nlc3MoJ+S/neWtmOaIkOWKnycpOwogICAgICAgICAgX3RoaXM2LmVkaXREaWFsb2dWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICBfdGhpczYuZmV0Y2hMaXN0KCk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pLmZpbmFsbHkoZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM2LmVkaXRTYXZpbmcgPSBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqIOe7hOijheaWsOWini/nvJbovpHor7fmsYLkvZPvvIhKQ1hYIOWunuS9k++8jOS7heS8oOmdnuepuuWtl+aute+8iSAqL2J1aWxkUGF5bG9hZDogZnVuY3Rpb24gYnVpbGRQYXlsb2FkKGZvcm0pIHsKICAgICAgdmFyIHBheWxvYWQgPSB0aGlzLmNsZWFuUGF5bG9hZCh7CiAgICAgICAgbWM6IGZvcm0ubWMsCiAgICAgICAgeno6IGZvcm0uenosCiAgICAgICAgY2JzOiBmb3JtLmNicywKICAgICAgICBpc2JuOiBmb3JtLmlzYm4sCiAgICAgICAgamNmbDogZm9ybS5qY2ZsLAogICAgICAgIGpjbHg6IGZvcm0uamNseCwKICAgICAgICBqY2J4bHg6IGZvcm0uamNieGx4LAogICAgICAgIGpjemRseDogZm9ybS5qY3pkbHgsCiAgICAgICAgamNseTogZm9ybS5qY2x5LAogICAgICAgIGpjY2M6IGZvcm0uamNjYywKICAgICAgICBiYzogZm9ybS5iYywKICAgICAgICBrYjogZm9ybS5rYiwKICAgICAgICBqbGR3OiBmb3JtLmpsZHcsCiAgICAgICAgenJqeWpseGZmOiBmb3JtLnpyanlqbHhmZiwKICAgICAgICBqY2RtOiBmb3JtLmpjZG0sCiAgICAgICAgY2JmczogZm9ybS5jYmZzLAogICAgICAgIGpjbWo6IGZvcm0uamNtaiwKICAgICAgICBieGR3OiBmb3JtLmJ4ZHcsCiAgICAgICAgYno6IGZvcm0uYnosCiAgICAgICAgeGN5OiAhIWZvcm0ueGN5LAogICAgICAgIHR5OiAhIWZvcm0udHkKICAgICAgfSk7CiAgICAgIC8vIOaXpeacn+Wtl+autei9rCBJU0/vvIjlkI7nq68gY2JycSDkuLogTG9jYWxEYXRlVGltZe+8iQogICAgICBpZiAoZm9ybS5jYnJxKSBwYXlsb2FkLmNicnEgPSBmb3JtLmNicnEgKyAnVDAwOjAwOjAwJzsKICAgICAgLy8g5pWw5YC85a2X5q61CiAgICAgIGlmIChmb3JtLmRqICE9PSAnJyAmJiBmb3JtLmRqICE9PSBudWxsICYmIGZvcm0uZGogIT09IHVuZGVmaW5lZCkgewogICAgICAgIHBheWxvYWQuZGogPSBOdW1iZXIoZm9ybS5kaik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICB9LAogICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5Yig6ZmkID09PT09PT09PT09PT09PT09PT09CiAgICBoYW5kbGVEZWxldGU6IGZ1bmN0aW9uIGhhbmRsZURlbGV0ZShyb3cpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIGlmICghcm93LmlkKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCflvZPliY3ooYznvLrlsJFJRCcpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiRjb25maXJtKCJcdTc4NkVcdTVCOUFcdTg5ODFcdTUyMjBcdTk2NjRcdTY1NTlcdTY3NTBcdTMwMEMiLmNvbmNhdChyb3cubWMgfHwgcm93LmJoLCAiXHUzMDBEXHU1NDE3XHVGRjFGIiksICfns7vnu5/mj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICBkZWxldGVUZWFjaGluZ01hdGVyaWFsKHJvdy5pZCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczcuJG1lc3NhZ2Uuc3VjY2Vzcygn5Yig6Zmk5oiQ5YqfJyk7CiAgICAgICAgICBfdGhpczcuZmV0Y2hMaXN0KCk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICB9LAogICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5qih5p2/5LiL6L29IC8g5a+85YWlID09PT09PT09PT09PT09PT09PT09CiAgICBoYW5kbGVEb3dubG9hZFRlbXBsYXRlOiBmdW5jdGlvbiBoYW5kbGVEb3dubG9hZFRlbXBsYXRlKCkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgZG93bmxvYWRUZWFjaGluZ01hdGVyaWFsVGVtcGxhdGUoKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7CiAgICAgICAgc2F2ZUFzKGJsb2IsICfmlZnmnZDnrqHnkIblr7zlhaXmqKHmnb8ueGxzJyk7CiAgICAgICAgX3RoaXM4LiRtZXNzYWdlLnN1Y2Nlc3MoJ+aooeadv+S4i+i9veaIkOWKnycpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICB9LAogICAgaGFuZGxlQ2hvb3NlRmlsZTogZnVuY3Rpb24gaGFuZGxlQ2hvb3NlRmlsZSgpIHsKICAgICAgdGhpcy4kcmVmcy5maWxlSW5wdXQgJiYgdGhpcy4kcmVmcy5maWxlSW5wdXQuY2xpY2soKTsKICAgIH0sCiAgICBoYW5kbGVGaWxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVGaWxlQ2hhbmdlKGUpIHsKICAgICAgdmFyIGlucHV0ID0gZS50YXJnZXQ7CiAgICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBpbnB1dC5maWxlc1swXTsKICAgICAgfQogICAgfSwKICAgIGhhbmRsZUltcG9ydDogZnVuY3Rpb24gaGFuZGxlSW1wb3J0KCkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmlsZSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35YWI6YCJ5oup5paH5Lu2Jyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGltcG9ydFRlYWNoaW5nTWF0ZXJpYWwodGhpcy5zZWxlY3RlZEZpbGUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGNvdW50ID0gcmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSB8fCAwOwogICAgICAgIF90aGlzOS4kbWVzc2FnZS5zdWNjZXNzKCJcdTVCRkNcdTUxNjVcdTYyMTBcdTUyOUZcdUZGMENcdTUxNzFcdTVCRkNcdTUxNjUgIi5jb25jYXQoY291bnQsICIgXHU2NzYxIikpOwogICAgICAgIF90aGlzOS5zZWxlY3RlZEZpbGUgPSBudWxsOwogICAgICAgIGlmIChfdGhpczkuJHJlZnMuZmlsZUlucHV0KSBfdGhpczkuJHJlZnMuZmlsZUlucHV0LnZhbHVlID0gJyc7CiAgICAgICAgX3RoaXM5LmZldGNoTGlzdCgpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICB9LAogICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5pWZ5p2Q5bqT5a2Y5Y2VID09PT09PT09PT09PT09PT09PT09CiAgICBidWlsZFN0b2NrUXVlcnk6IGZ1bmN0aW9uIGJ1aWxkU3RvY2tRdWVyeSgpIHsKICAgICAgdmFyIF90aGlzMCA9IHRoaXM7CiAgICAgIHZhciBwYXJhbXMgPSB7fTsKICAgICAgWydiaCcsICdtYycsICdsYicsICd6YicsICd6dCddLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgIHZhciB2YWx1ZSA9IF90aGlzMC5zdG9ja1NlYXJjaEZvcm1ba2V5XTsKICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIHBhcmFtc1trZXldID0gU3RyaW5nKHZhbHVlKS50cmltKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHBhcmFtczsKICAgIH0sCiAgICBmZXRjaFN0b2NrTGlzdDogZnVuY3Rpb24gZmV0Y2hTdG9ja0xpc3QoKSB7CiAgICAgIHZhciBfdGhpczEgPSB0aGlzOwogICAgICB0aGlzLnN0b2NrTG9hZGluZyA9IHRydWU7CiAgICAgIHZhciBwYXJhbXMgPSBfb2JqZWN0U3ByZWFkKHsKICAgICAgICBwYWdlTnVtOiB0aGlzLnN0b2NrUGFnZU51bSwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5zdG9ja1BhZ2VTaXplCiAgICAgIH0sIHRoaXMuYnVpbGRTdG9ja1F1ZXJ5KCkpOwogICAgICBsaXN0VGVhY2hpbmdTdG9jayhwYXJhbXMpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9OwogICAgICAgIF90aGlzMS5zdG9ja1RhYmxlRGF0YSA9IGRhdGEucmVjb3JkcyB8fCBbXTsKICAgICAgICBfdGhpczEuc3RvY2tUb3RhbCA9IGRhdGEudG90YWwgfHwgMDsKICAgICAgICBfdGhpczEuc3RvY2tMb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczEuc3RvY2tUYWJsZURhdGEgPSBbXTsKICAgICAgICBfdGhpczEuc3RvY2tUb3RhbCA9IDA7CiAgICAgICAgX3RoaXMxLnN0b2NrTG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVTdG9ja1NlYXJjaDogZnVuY3Rpb24gaGFuZGxlU3RvY2tTZWFyY2goKSB7CiAgICAgIHRoaXMuc3RvY2tQYWdlTnVtID0gMTsKICAgICAgdGhpcy5mZXRjaFN0b2NrTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZVN0b2NrUmVzZXQ6IGZ1bmN0aW9uIGhhbmRsZVN0b2NrUmVzZXQoKSB7CiAgICAgIHRoaXMuc3RvY2tTZWFyY2hGb3JtID0gewogICAgICAgIGJoOiAnJywKICAgICAgICBtYzogJycsCiAgICAgICAgbGI6ICcnLAogICAgICAgIHpiOiAnJywKICAgICAgICB6dDogJycKICAgICAgfTsKICAgICAgdGhpcy5zdG9ja1BhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoU3RvY2tMaXN0KCk7CiAgICB9LAogICAgaGFuZGxlU3RvY2tTaXplQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTdG9ja1NpemVDaGFuZ2Uoc2l6ZSkgewogICAgICB0aGlzLnN0b2NrUGFnZVNpemUgPSBzaXplOwogICAgICB0aGlzLnN0b2NrUGFnZU51bSA9IDE7CiAgICAgIHRoaXMuZmV0Y2hTdG9ja0xpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVTdG9ja0N1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVN0b2NrQ3VycmVudENoYW5nZShwYWdlKSB7CiAgICAgIHRoaXMuc3RvY2tQYWdlTnVtID0gcGFnZTsKICAgICAgdGhpcy5mZXRjaFN0b2NrTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZVN0b2NrTmV3OiBmdW5jdGlvbiBoYW5kbGVTdG9ja05ldygpIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwogICAgICB0aGlzLmlzU3RvY2tBZGQgPSB0cnVlOwogICAgICB0aGlzLnN0b2NrRm9ybSA9IHRoaXMuY3JlYXRlRW1wdHlTdG9ja0Zvcm0oKTsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMTAuJHJlZnMuc3RvY2tGb3JtUmVmICYmIF90aGlzMTAuJHJlZnMuc3RvY2tGb3JtUmVmLmNsZWFyVmFsaWRhdGUoKTsKICAgICAgfSk7CiAgICAgIHRoaXMuc3RvY2tGb3JtRGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICB9LAogICAgaGFuZGxlU3RvY2tFZGl0OiBmdW5jdGlvbiBoYW5kbGVTdG9ja0VkaXQocm93KSB7CiAgICAgIHZhciBfdGhpczExID0gdGhpczsKICAgICAgdGhpcy5pc1N0b2NrQWRkID0gZmFsc2U7CiAgICAgIHRoaXMuc3RvY2tGb3JtRGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICAgIHRoaXMuc3RvY2tGb3JtTG9hZGluZyA9IHRydWU7CiAgICAgIGdldFRlYWNoaW5nU3RvY2socm93LmlkKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YSB8fCB7fTsKICAgICAgICB2YXIgZm9ybSA9IF90aGlzMTEuY3JlYXRlRW1wdHlTdG9ja0Zvcm0oKTsKICAgICAgICBPYmplY3Qua2V5cyhmb3JtKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCAmJiBkYXRhW2tleV0gIT09IG51bGwpIGZvcm1ba2V5XSA9IGRhdGFba2V5XTsKICAgICAgICB9KTsKICAgICAgICBmb3JtLmlkID0gZGF0YS5pZDsKICAgICAgICBmb3JtLmJoID0gZGF0YS5iaDsKICAgICAgICBfdGhpczExLnN0b2NrRm9ybSA9IGZvcm07CiAgICAgICAgX3RoaXMxMS5zdG9ja0Zvcm1Mb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczExLnN0b2NrRm9ybURpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgICAgICBfdGhpczExLnN0b2NrRm9ybUxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgYnVpbGRTdG9ja1BheWxvYWQ6IGZ1bmN0aW9uIGJ1aWxkU3RvY2tQYXlsb2FkKCkgewogICAgICB2YXIgZiA9IHRoaXMuc3RvY2tGb3JtOwogICAgICB2YXIgcGF5bG9hZCA9IHRoaXMuY2xlYW5QYXlsb2FkKHsKICAgICAgICBtYzogZi5tYywKICAgICAgICBxa3NtOiBmLnFrc20sCiAgICAgICAgbGI6IGYubGIsCiAgICAgICAgemI6IGYuemIsCiAgICAgICAgY2JibWJoOiBmLmNiYm1iaCwKICAgICAgICBjYnJiaDogZi5jYnJiaCwKICAgICAgICBiZ3liaDogZi5iZ3liaCwKICAgICAgICBzcHJiaDogZi5zcHJiaCwKICAgICAgICB6dDogZi56dCwKICAgICAgICBiejogZi5ieiwKICAgICAgICBqc29uemQ6IGYuanNvbnpkCiAgICAgIH0pOwogICAgICByZXR1cm4gcGF5bG9hZDsKICAgIH0sCiAgICBoYW5kbGVTdG9ja0Zvcm1Db25maXJtOiBmdW5jdGlvbiBoYW5kbGVTdG9ja0Zvcm1Db25maXJtKCkgewogICAgICB2YXIgX3RoaXMxMiA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuc3RvY2tGb3JtUmVmLnZhbGlkYXRlKGZ1bmN0aW9uICh2YWxpZCkgewogICAgICAgIGlmICghdmFsaWQpIHJldHVybjsKICAgICAgICB2YXIgcGF5bG9hZCA9IF90aGlzMTIuYnVpbGRTdG9ja1BheWxvYWQoKTsKICAgICAgICBpZiAoIV90aGlzMTIuaXNTdG9ja0FkZCkgewogICAgICAgICAgaWYgKCFfdGhpczEyLnN0b2NrRm9ybS5pZCkgewogICAgICAgICAgICBfdGhpczEyLiRtZXNzYWdlLndhcm5pbmcoJ+e8uuWwkeiusOW9lUlE77yM5peg5rOV5L+d5a2YJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHBheWxvYWQuaWQgPSBfdGhpczEyLnN0b2NrRm9ybS5pZDsKICAgICAgICAgIHBheWxvYWQuYmggPSBfdGhpczEyLnN0b2NrRm9ybS5iaDsKICAgICAgICB9CiAgICAgICAgX3RoaXMxMi5zdG9ja1NhdmluZyA9IHRydWU7CiAgICAgICAgdmFyIHJlcXVlc3QgPSBfdGhpczEyLmlzU3RvY2tBZGQgPyBhZGRUZWFjaGluZ1N0b2NrKHBheWxvYWQpIDogdXBkYXRlVGVhY2hpbmdTdG9jayhwYXlsb2FkKTsKICAgICAgICByZXF1ZXN0LnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXMxMi4kbWVzc2FnZS5zdWNjZXNzKF90aGlzMTIuaXNTdG9ja0FkZCA/ICfmlrDlop7miJDlip8nIDogJ+S/ruaUueaIkOWKnycpOwogICAgICAgICAgX3RoaXMxMi5zdG9ja0Zvcm1EaWFsb2dWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICBfdGhpczEyLmZldGNoU3RvY2tMaXN0KCk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pLmZpbmFsbHkoZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXMxMi5zdG9ja1NhdmluZyA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVTdG9ja0RldGFpbDogZnVuY3Rpb24gaGFuZGxlU3RvY2tEZXRhaWwocm93KSB7CiAgICAgIHRoaXMuc3RvY2tEZXRhaWxEYXRhID0gcm93OwogICAgICB0aGlzLnN0b2NrRGV0YWlsRGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICB9LAogICAgaGFuZGxlU3RvY2tEZWxldGU6IGZ1bmN0aW9uIGhhbmRsZVN0b2NrRGVsZXRlKHJvdykgewogICAgICB2YXIgX3RoaXMxMyA9IHRoaXM7CiAgICAgIGlmICghcm93LmlkKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCflvZPliY3ooYznvLrlsJFJRCcpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiRjb25maXJtKCJcdTc4NkVcdTVCOUFcdTg5ODFcdTUyMjBcdTk2NjRcdTVFOTNcdTVCNThcdTUzNTVcdTMwMEMiLmNvbmNhdChyb3cubWMgfHwgcm93LmJoLCAiXHUzMDBEXHU1NDE3XHVGRjFGIiksICfns7vnu5/mj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICBkZWxldGVUZWFjaGluZ1N0b2NrKHJvdy5pZCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczEzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgX3RoaXMxMy5mZXRjaFN0b2NrTGlzdCgpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaVmeadkOW6k+WtmOaYjue7humhuSA9PT09PT09PT09PT09PT09PT09PQogICAgYnVpbGREZXRhaWxRdWVyeTogZnVuY3Rpb24gYnVpbGREZXRhaWxRdWVyeSgpIHsKICAgICAgdmFyIF90aGlzMTQgPSB0aGlzOwogICAgICB2YXIgcGFyYW1zID0ge307CiAgICAgIFsnYmgnLCAnamNrY2RiYmgnLCAnamN4eGJoJ10uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgdmFyIHZhbHVlID0gX3RoaXMxNC5kZXRhaWxTZWFyY2hGb3JtW2tleV07CiAgICAgICAgaWYgKHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBwYXJhbXNba2V5XSA9IFN0cmluZyh2YWx1ZSkudHJpbSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICh0aGlzLmRldGFpbFNlYXJjaEZvcm0uaHdid1R5cGUgPT09ICcwJykgcGFyYW1zLmh3YncgPSBmYWxzZTtlbHNlIGlmICh0aGlzLmRldGFpbFNlYXJjaEZvcm0uaHdid1R5cGUgPT09ICcxJykgcGFyYW1zLmh3YncgPSB0cnVlOwogICAgICByZXR1cm4gcGFyYW1zOwogICAgfSwKICAgIGZldGNoRGV0YWlsTGlzdDogZnVuY3Rpb24gZmV0Y2hEZXRhaWxMaXN0KCkgewogICAgICB2YXIgX3RoaXMxNSA9IHRoaXM7CiAgICAgIHRoaXMuZGV0YWlsTG9hZGluZyA9IHRydWU7CiAgICAgIHZhciBwYXJhbXMgPSBfb2JqZWN0U3ByZWFkKHsKICAgICAgICBwYWdlTnVtOiB0aGlzLmRldGFpbFBhZ2VOdW0sCiAgICAgICAgcGFnZVNpemU6IHRoaXMuZGV0YWlsUGFnZVNpemUKICAgICAgfSwgdGhpcy5idWlsZERldGFpbFF1ZXJ5KCkpOwogICAgICBsaXN0VGVhY2hpbmdTdG9ja0RldGFpbChwYXJhbXMpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9OwogICAgICAgIF90aGlzMTUuZGV0YWlsVGFibGVEYXRhID0gZGF0YS5yZWNvcmRzIHx8IFtdOwogICAgICAgIF90aGlzMTUuZGV0YWlsVG90YWwgPSBkYXRhLnRvdGFsIHx8IDA7CiAgICAgICAgX3RoaXMxNS5kZXRhaWxMb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczE1LmRldGFpbFRhYmxlRGF0YSA9IFtdOwogICAgICAgIF90aGlzMTUuZGV0YWlsVG90YWwgPSAwOwogICAgICAgIF90aGlzMTUuZGV0YWlsTG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVEZXRhaWxTZWFyY2g6IGZ1bmN0aW9uIGhhbmRsZURldGFpbFNlYXJjaCgpIHsKICAgICAgdGhpcy5kZXRhaWxQYWdlTnVtID0gMTsKICAgICAgdGhpcy5mZXRjaERldGFpbExpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVEZXRhaWxSZXNldDogZnVuY3Rpb24gaGFuZGxlRGV0YWlsUmVzZXQoKSB7CiAgICAgIHRoaXMuZGV0YWlsU2VhcmNoRm9ybSA9IHsKICAgICAgICBiaDogJycsCiAgICAgICAgamNrY2RiYmg6ICcnLAogICAgICAgIGpjeHhiaDogJycsCiAgICAgICAgaHdid1R5cGU6ICcnCiAgICAgIH07CiAgICAgIHRoaXMuZGV0YWlsUGFnZU51bSA9IDE7CiAgICAgIHRoaXMuZmV0Y2hEZXRhaWxMaXN0KCk7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsU2l6ZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlRGV0YWlsU2l6ZUNoYW5nZShzaXplKSB7CiAgICAgIHRoaXMuZGV0YWlsUGFnZVNpemUgPSBzaXplOwogICAgICB0aGlzLmRldGFpbFBhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoRGV0YWlsTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZURldGFpbEN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZURldGFpbEN1cnJlbnRDaGFuZ2UocGFnZSkgewogICAgICB0aGlzLmRldGFpbFBhZ2VOdW0gPSBwYWdlOwogICAgICB0aGlzLmZldGNoRGV0YWlsTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZURldGFpbE5ldzogZnVuY3Rpb24gaGFuZGxlRGV0YWlsTmV3KCkgewogICAgICB2YXIgX3RoaXMxNiA9IHRoaXM7CiAgICAgIHRoaXMuaXNEZXRhaWxBZGQgPSB0cnVlOwogICAgICB0aGlzLmRldGFpbEZvcm0gPSB0aGlzLmNyZWF0ZUVtcHR5RGV0YWlsRm9ybSgpOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMxNi4kcmVmcy5kZXRhaWxGb3JtUmVmICYmIF90aGlzMTYuJHJlZnMuZGV0YWlsRm9ybVJlZi5jbGVhclZhbGlkYXRlKCk7CiAgICAgIH0pOwogICAgICB0aGlzLmRldGFpbEZvcm1EaWFsb2dWaXNpYmxlID0gdHJ1ZTsKICAgIH0sCiAgICBoYW5kbGVEZXRhaWxFZGl0OiBmdW5jdGlvbiBoYW5kbGVEZXRhaWxFZGl0KHJvdykgewogICAgICB2YXIgX3RoaXMxNyA9IHRoaXM7CiAgICAgIHRoaXMuaXNEZXRhaWxBZGQgPSBmYWxzZTsKICAgICAgdGhpcy5kZXRhaWxGb3JtRGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICAgIHRoaXMuZGV0YWlsRm9ybUxvYWRpbmcgPSB0cnVlOwogICAgICBnZXRUZWFjaGluZ1N0b2NrRGV0YWlsKHJvdy5pZCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGEgfHwge307CiAgICAgICAgdmFyIGZvcm0gPSBfdGhpczE3LmNyZWF0ZUVtcHR5RGV0YWlsRm9ybSgpOwogICAgICAgIE9iamVjdC5rZXlzKGZvcm0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmIGRhdGFba2V5XSAhPT0gbnVsbCkgZm9ybVtrZXldID0gZGF0YVtrZXldOwogICAgICAgIH0pOwogICAgICAgIGlmIChmb3JtLmh3YndzaikgZm9ybS5od2J3c2ogPSBTdHJpbmcoZm9ybS5od2J3c2opLnJlcGxhY2UoJ1QnLCAnICcpLnNsaWNlKDAsIDE5KTsKICAgICAgICBmb3JtLmlkID0gZGF0YS5pZDsKICAgICAgICBmb3JtLmJoID0gZGF0YS5iaDsKICAgICAgICBfdGhpczE3LmRldGFpbEZvcm0gPSBmb3JtOwogICAgICAgIF90aGlzMTcuZGV0YWlsRm9ybUxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMTcuZGV0YWlsRm9ybURpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgICAgICBfdGhpczE3LmRldGFpbEZvcm1Mb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIGJ1aWxkRGV0YWlsUGF5bG9hZDogZnVuY3Rpb24gYnVpbGREZXRhaWxQYXlsb2FkKCkgewogICAgICB2YXIgZiA9IHRoaXMuZGV0YWlsRm9ybTsKICAgICAgdmFyIHBheWxvYWQgPSB0aGlzLmNsZWFuUGF5bG9hZCh7CiAgICAgICAgamNrY2RiYmg6IGYuamNrY2RiYmgsCiAgICAgICAgamN4eGJoOiBmLmpjeHhiaCwKICAgICAgICBxemtjbXh4Ymg6IGYucXprY214eGJoLAogICAgICAgIGh3Ync6ICEhZi5od2J3LAogICAgICAgIGJ6OiBmLmJ6LAogICAgICAgIGpzb256ZDogZi5qc29uemQKICAgICAgfSk7CiAgICAgIGlmIChmLnNsICE9PSAnJyAmJiBmLnNsICE9PSBudWxsICYmIGYuc2wgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHBheWxvYWQuc2wgPSBOdW1iZXIoZi5zbCk7CiAgICAgIH0KICAgICAgLy8g6L+Y5Zue5a6M5q+V5pe26Ze05Li6IExvY2FsRGF0ZVRpbWXvvIzovawgSVNPCiAgICAgIGlmIChmLmh3YndzaikgcGF5bG9hZC5od2J3c2ogPSBmLmh3Yndzai5yZXBsYWNlKCcgJywgJ1QnKTsKICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsRm9ybUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZURldGFpbEZvcm1Db25maXJtKCkgewogICAgICB2YXIgX3RoaXMxOCA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuZGV0YWlsRm9ybVJlZi52YWxpZGF0ZShmdW5jdGlvbiAodmFsaWQpIHsKICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm47CiAgICAgICAgdmFyIHBheWxvYWQgPSBfdGhpczE4LmJ1aWxkRGV0YWlsUGF5bG9hZCgpOwogICAgICAgIGlmICghX3RoaXMxOC5pc0RldGFpbEFkZCkgewogICAgICAgICAgaWYgKCFfdGhpczE4LmRldGFpbEZvcm0uaWQpIHsKICAgICAgICAgICAgX3RoaXMxOC4kbWVzc2FnZS53YXJuaW5nKCfnvLrlsJHorrDlvZVJRO+8jOaXoOazleS/neWtmCcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBwYXlsb2FkLmlkID0gX3RoaXMxOC5kZXRhaWxGb3JtLmlkOwogICAgICAgICAgcGF5bG9hZC5iaCA9IF90aGlzMTguZGV0YWlsRm9ybS5iaDsKICAgICAgICB9CiAgICAgICAgX3RoaXMxOC5kZXRhaWxTYXZpbmcgPSB0cnVlOwogICAgICAgIHZhciByZXF1ZXN0ID0gX3RoaXMxOC5pc0RldGFpbEFkZCA/IGFkZFRlYWNoaW5nU3RvY2tEZXRhaWwocGF5bG9hZCkgOiB1cGRhdGVUZWFjaGluZ1N0b2NrRGV0YWlsKHBheWxvYWQpOwogICAgICAgIHJlcXVlc3QudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczE4LiRtZXNzYWdlLnN1Y2Nlc3MoX3RoaXMxOC5pc0RldGFpbEFkZCA/ICfmlrDlop7miJDlip8nIDogJ+S/ruaUueaIkOWKnycpOwogICAgICAgICAgX3RoaXMxOC5kZXRhaWxGb3JtRGlhbG9nVmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgX3RoaXMxOC5mZXRjaERldGFpbExpc3QoKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSkuZmluYWxseShmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczE4LmRldGFpbFNhdmluZyA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVEZXRhaWxWaWV3OiBmdW5jdGlvbiBoYW5kbGVEZXRhaWxWaWV3KHJvdykgewogICAgICB0aGlzLmRldGFpbFZpZXdEYXRhID0gcm93OwogICAgICB0aGlzLmRldGFpbFZpZXdEaWFsb2dWaXNpYmxlID0gdHJ1ZTsKICAgIH0sCiAgICBoYW5kbGVEZXRhaWxEZWxldGU6IGZ1bmN0aW9uIGhhbmRsZURldGFpbERlbGV0ZShyb3cpIHsKICAgICAgdmFyIF90aGlzMTkgPSB0aGlzOwogICAgICBpZiAoIXJvdy5pZCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5b2T5YmN6KGM57y65bCRSUQnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy4kY29uZmlybSgiXHU3ODZFXHU1QjlBXHU4OTgxXHU1MjIwXHU5NjY0XHU1RTkzXHU1QjU4XHU2NjBFXHU3RUM2XHU5ODc5XHUzMDBDIi5jb25jYXQocm93LmJoLCAiXHUzMDBEXHU1NDE3XHVGRjFGIiksICfns7vnu5/mj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICBkZWxldGVUZWFjaGluZ1N0b2NrRGV0YWlsKHJvdy5pZCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczE5LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgX3RoaXMxOS5mZXRjaERldGFpbExpc3QoKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgIH0KICB9Cn07"},null]}