d6def342a572fde050c5b1348927cbce.json 28 KB

1
  1. {"remainingRequest":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/thread-loader/dist/cjs.js!/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/babel-loader/lib/index.js!/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/popover.js","dependencies":[{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/element-ui/lib/popover.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/thread-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/project/NN2020060801/addons/admin/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:cmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbCIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbiIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Iik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YiKTsKCnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZyIpOwoKdmFyIF90eXBlb2YgPSByZXF1aXJlKCIvdXNyL2xvY2FsL2RldmVsb3AvcGhwL3d3dy93YWliYW8vcHJvamVjdC9OTjIwMjAwNjA4MDEvYWRkb25zL2FkbWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZiIpOwoKbW9kdWxlLmV4cG9ydHMgPQovKioqKioqLwpmdW5jdGlvbiAobW9kdWxlcykgewogIC8vIHdlYnBhY2tCb290c3RyYXAKCiAgLyoqKioqKi8KICAvLyBUaGUgbW9kdWxlIGNhY2hlCgogIC8qKioqKiovCiAgdmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uCgogIC8qKioqKiovCgogIGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHsKICAgIC8qKioqKiovCgogICAgLyoqKioqKi8KICAgIC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZQoKICAgIC8qKioqKiovCiAgICBpZiAoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHsKICAgICAgLyoqKioqKi8KICAgICAgcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7CiAgICAgIC8qKioqKiovCiAgICB9CiAgICAvKioqKioqLwogICAgLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKCiAgICAvKioqKioqLwoKCiAgICB2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7CiAgICAgIC8qKioqKiovCiAgICAgIGk6IG1vZHVsZUlkLAoKICAgICAgLyoqKioqKi8KICAgICAgbDogZmFsc2UsCgogICAgICAvKioqKioqLwogICAgICBleHBvcnRzOiB7fQogICAgICAvKioqKioqLwoKICAgIH07CiAgICAvKioqKioqLwoKICAgIC8qKioqKiovCiAgICAvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb24KCiAgICAvKioqKioqLwoKICAgIG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pOwogICAgLyoqKioqKi8KCiAgICAvKioqKioqLwogICAgLy8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZAoKICAgIC8qKioqKiovCgogICAgbW9kdWxlLmwgPSB0cnVlOwogICAgLyoqKioqKi8KCiAgICAvKioqKioqLwogICAgLy8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGUKCiAgICAvKioqKioqLwoKICAgIHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgIC8qKioqKiovCiAgfQogIC8qKioqKiovCgogIC8qKioqKiovCgogIC8qKioqKiovCiAgLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXykKCiAgLyoqKioqKi8KCgogIF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7CiAgLyoqKioqKi8KCiAgLyoqKioqKi8KICAvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZQoKICAvKioqKioqLwoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzOwogIC8qKioqKiovCgogIC8qKioqKiovCiAgLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzCgogIC8qKioqKiovCgogIF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uIChleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHsKICAgIC8qKioqKiovCiAgICBpZiAoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkgewogICAgICAvKioqKioqLwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiBnZXR0ZXIKICAgICAgfSk7CiAgICAgIC8qKioqKiovCiAgICB9CiAgICAvKioqKioqLwoKICB9OwogIC8qKioqKiovCgogIC8qKioqKiovCiAgLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0cwoKICAvKioqKioqLwoKCiAgX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgIC8qKioqKiovCiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7CiAgICAgIC8qKioqKiovCiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsKICAgICAgICB2YWx1ZTogJ01vZHVsZScKICAgICAgfSk7CiAgICAgIC8qKioqKiovCiAgICB9CiAgICAvKioqKioqLwoKCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7CiAgICAgIHZhbHVlOiB0cnVlCiAgICB9KTsKICAgIC8qKioqKiovCiAgfTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdAoKICAvKioqKioqLwogIC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdAoKICAvKioqKioqLwogIC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBucwoKICAvKioqKioqLwogIC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdAoKICAvKioqKioqLwogIC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmUKCiAgLyoqKioqKi8KCgogIF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uICh2YWx1ZSwgbW9kZSkgewogICAgLyoqKioqKi8KICAgIGlmIChtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTsKICAgIC8qKioqKiovCgogICAgaWYgKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7CiAgICAvKioqKioqLwoKICAgIGlmIChtb2RlICYgNCAmJiBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlOwogICAgLyoqKioqKi8KCiAgICB2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgLyoqKioqKi8KCiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpOwogICAgLyoqKioqKi8KCgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsKICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgdmFsdWU6IHZhbHVlCiAgICB9KTsKICAgIC8qKioqKiovCgogICAgaWYgKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7CiAgICAgIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgcmV0dXJuIHZhbHVlW2tleV07CiAgICAgIH0uYmluZChudWxsLCBrZXkpKTsKICAgIH0KICAgIC8qKioqKiovCgogICAgcmV0dXJuIG5zOwogICAgLyoqKioqKi8KICB9OwogIC8qKioqKiovCgogIC8qKioqKiovCiAgLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXMKCiAgLyoqKioqKi8KCgogIF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uIChtb2R1bGUpIHsKICAgIC8qKioqKiovCiAgICB2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID8KICAgIC8qKioqKiovCiAgICBmdW5jdGlvbiBnZXREZWZhdWx0KCkgewogICAgICByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107CiAgICB9IDoKICAgIC8qKioqKiovCiAgICBmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgewogICAgICByZXR1cm4gbW9kdWxlOwogICAgfTsKICAgIC8qKioqKiovCgogICAgX193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpOwogICAgLyoqKioqKi8KCgogICAgcmV0dXJuIGdldHRlcjsKICAgIC8qKioqKiovCiAgfTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbAoKICAvKioqKioqLwoKCiAgX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHsKICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7CiAgfTsKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fCgogIC8qKioqKiovCgoKICBfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSAiL2Rpc3QvIjsKICAvKioqKioqLwoKICAvKioqKioqLwoKICAvKioqKioqLwogIC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0cwoKICAvKioqKioqLwoKICByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA3NCk7CiAgLyoqKioqKi8KfSgKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKiovCnsKICAvKioqLwogIDA6CiAgLyoqKi8KICBmdW5jdGlvbiBfKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewogICAgInVzZSBzdHJpY3QiOwogICAgLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovCgogICAgX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhIiwgZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OwogICAgfSk7CiAgICAvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi8KICAgIC8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLgogICAgLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGwKICAgIC8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLgoKCiAgICBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQoc2NyaXB0RXhwb3J0cywgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMsIGZ1bmN0aW9uYWxUZW1wbGF0ZSwgaW5qZWN0U3R5bGVzLCBzY29wZUlkLCBtb2R1bGVJZGVudGlmaWVyLAogICAgLyogc2VydmVyIG9ubHkgKi8KICAgIHNoYWRvd01vZGUKICAgIC8qIHZ1ZS1jbGkgb25seSAqLwogICAgKSB7CiAgICAgIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3AKICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJyA/IHNjcmlwdEV4cG9ydHMub3B0aW9ucyA6IHNjcmlwdEV4cG9ydHM7IC8vIHJlbmRlciBmdW5jdGlvbnMKCiAgICAgIGlmIChyZW5kZXIpIHsKICAgICAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlcjsKICAgICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuczsKICAgICAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWU7CiAgICAgIH0gLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZQoKCiAgICAgIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHsKICAgICAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlOwogICAgICB9IC8vIHNjb3BlZElkCgoKICAgICAgaWYgKHNjb3BlSWQpIHsKICAgICAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZDsKICAgICAgfQoKICAgICAgdmFyIGhvb2s7CgogICAgICBpZiAobW9kdWxlSWRlbnRpZmllcikgewogICAgICAgIC8vIHNlcnZlciBidWlsZAogICAgICAgIGhvb2sgPSBmdW5jdGlvbiBob29rKGNvbnRleHQpIHsKICAgICAgICAgIC8vIDIuMyBpbmplY3Rpb24KICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsCiAgICAgICAgICB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0IHx8IC8vIHN0YXRlZnVsCiAgICAgICAgICB0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQ7IC8vIGZ1bmN0aW9uYWwKICAgICAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZQoKICAgICAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX187CiAgICAgICAgICB9IC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzCgoKICAgICAgICAgIGlmIChpbmplY3RTdHlsZXMpIHsKICAgICAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dCk7CiAgICAgICAgICB9IC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZQoKCiAgICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykgewogICAgICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcik7CiAgICAgICAgICB9CiAgICAgICAgfTsgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGUKICAgICAgICAvLyBuZXZlciBnZXRzIGNhbGxlZAoKCiAgICAgICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rOwogICAgICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykgewogICAgICAgIGhvb2sgPSBzaGFkb3dNb2RlID8gZnVuY3Rpb24gKCkgewogICAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KTsKICAgICAgICB9IDogaW5qZWN0U3R5bGVzOwogICAgICB9CgogICAgICBpZiAoaG9vaykgewogICAgICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHsKICAgICAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0CiAgICAgICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyCiAgICAgICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rOyAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZQoKICAgICAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyOwoKICAgICAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uKGgsIGNvbnRleHQpIHsKICAgICAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpOwogICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dCk7CiAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9vawogICAgICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGU7CiAgICAgICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKSA6IFtob29rXTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cywKICAgICAgICBvcHRpb25zOiBvcHRpb25zCiAgICAgIH07CiAgICB9CiAgICAvKioqLwoKICB9LAoKICAvKioqLwogIDI6CiAgLyoqKi8KICBmdW5jdGlvbiBfKG1vZHVsZSwgZXhwb3J0cykgewogICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy9kb20iKTsKICAgIC8qKiovCiAgfSwKCiAgLyoqKi8KICAzOgogIC8qKiovCiAgZnVuY3Rpb24gXyhtb2R1bGUsIGV4cG9ydHMpIHsKICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbCIpOwogICAgLyoqKi8KICB9LAoKICAvKioqLwogIDU6CiAgLyoqKi8KICBmdW5jdGlvbiBfKG1vZHVsZSwgZXhwb3J0cykgewogICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCJlbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyIik7CiAgICAvKioqLwogIH0sCgogIC8qKiovCiAgNzoKICAvKioqLwogIGZ1bmN0aW9uIF8obW9kdWxlLCBleHBvcnRzKSB7CiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoInZ1ZSIpOwogICAgLyoqKi8KICB9LAoKICAvKioqLwogIDc0OgogIC8qKiovCiAgZnVuY3Rpb24gXyhtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTIwNjAyNzImCgoKICAgIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7CiAgICAgIHZhciBfdm0gPSB0aGlzOwoKICAgICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50OwoKICAgICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oOwoKICAgICAgcmV0dXJuIF9jKCJzcGFuIiwgW19jKCJ0cmFuc2l0aW9uIiwgewogICAgICAgIGF0dHJzOiB7CiAgICAgICAgICBuYW1lOiBfdm0udHJhbnNpdGlvbgogICAgICAgIH0sCiAgICAgICAgb246IHsKICAgICAgICAgICJhZnRlci1lbnRlciI6IF92bS5oYW5kbGVBZnRlckVudGVyLAogICAgICAgICAgImFmdGVyLWxlYXZlIjogX3ZtLmhhbmRsZUFmdGVyTGVhdmUKICAgICAgICB9CiAgICAgIH0sIFtfYygiZGl2IiwgewogICAgICAgIGRpcmVjdGl2ZXM6IFt7CiAgICAgICAgICBuYW1lOiAic2hvdyIsCiAgICAgICAgICByYXdOYW1lOiAidi1zaG93IiwKICAgICAgICAgIHZhbHVlOiAhX3ZtLmRpc2FibGVkICYmIF92bS5zaG93UG9wcGVyLAogICAgICAgICAgZXhwcmVzc2lvbjogIiFkaXNhYmxlZCAmJiBzaG93UG9wcGVyIgogICAgICAgIH1dLAogICAgICAgIHJlZjogInBvcHBlciIsCiAgICAgICAgc3RhdGljQ2xhc3M6ICJlbC1wb3BvdmVyIGVsLXBvcHBlciIsCiAgICAgICAgY2xhc3M6IFtfdm0ucG9wcGVyQ2xhc3MsIF92bS5jb250ZW50ICYmICJlbC1wb3BvdmVyLS1wbGFpbiJdLAogICAgICAgIHN0eWxlOiB7CiAgICAgICAgICB3aWR0aDogX3ZtLndpZHRoICsgInB4IgogICAgICAgIH0sCiAgICAgICAgYXR0cnM6IHsKICAgICAgICAgIHJvbGU6ICJ0b29sdGlwIiwKICAgICAgICAgIGlkOiBfdm0udG9vbHRpcElkLAogICAgICAgICAgImFyaWEtaGlkZGVuIjogX3ZtLmRpc2FibGVkIHx8ICFfdm0uc2hvd1BvcHBlciA/ICJ0cnVlIiA6ICJmYWxzZSIKICAgICAgICB9CiAgICAgIH0sIFtfdm0udGl0bGUgPyBfYygiZGl2IiwgewogICAgICAgIHN0YXRpY0NsYXNzOiAiZWwtcG9wb3Zlcl9fdGl0bGUiLAogICAgICAgIGRvbVByb3BzOiB7CiAgICAgICAgICB0ZXh0Q29udGVudDogX3ZtLl9zKF92bS50aXRsZSkKICAgICAgICB9CiAgICAgIH0pIDogX3ZtLl9lKCksIF92bS5fdCgiZGVmYXVsdCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldKV0sIDIpXSksIF92bS5fdCgicmVmZXJlbmNlIildLCAyKTsKICAgIH07CgogICAgdmFyIHN0YXRpY1JlbmRlckZucyA9IFtdOwogICAgcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlOyAvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUyMDYwMjcyJgogICAgLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlciIKCiAgICB2YXIgdnVlX3BvcHBlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwoKICAgIHZhciB2dWVfcG9wcGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9wb3BwZXJfKTsgLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCAiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tIgoKCiAgICB2YXIgZG9tXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7IC8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwiCgoKICAgIHZhciB1dGlsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJgogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCiAgICAvLwogICAgLy8KICAgIC8vCgogICAgLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLwoKCiAgICB2YXIgbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IHsKICAgICAgbmFtZTogJ0VsUG9wb3ZlcicsCiAgICAgIG1peGluczogW3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSwKICAgICAgcHJvcHM6IHsKICAgICAgICB0cmlnZ2VyOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICBkZWZhdWx0OiAnY2xpY2snLAogICAgICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIFsnY2xpY2snLCAnZm9jdXMnLCAnaG92ZXInLCAnbWFudWFsJ10uaW5kZXhPZih2YWx1ZSkgPiAtMTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9wZW5EZWxheTogewogICAgICAgICAgdHlwZTogTnVtYmVyLAogICAgICAgICAgZGVmYXVsdDogMAogICAgICAgIH0sCiAgICAgICAgY2xvc2VEZWxheTogewogICAgICAgICAgdHlwZTogTnVtYmVyLAogICAgICAgICAgZGVmYXVsdDogMjAwCiAgICAgICAgfSwKICAgICAgICB0aXRsZTogU3RyaW5nLAogICAgICAgIGRpc2FibGVkOiBCb29sZWFuLAogICAgICAgIGNvbnRlbnQ6IFN0cmluZywKICAgICAgICByZWZlcmVuY2U6IHt9LAogICAgICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsCiAgICAgICAgd2lkdGg6IHt9LAogICAgICAgIHZpc2libGVBcnJvdzogewogICAgICAgICAgZGVmYXVsdDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgYXJyb3dPZmZzZXQ6IHsKICAgICAgICAgIHR5cGU6IE51bWJlciwKICAgICAgICAgIGRlZmF1bHQ6IDAKICAgICAgICB9LAogICAgICAgIHRyYW5zaXRpb246IHsKICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgIGRlZmF1bHQ6ICdmYWRlLWluLWxpbmVhcicKICAgICAgICB9LAogICAgICAgIHRhYmluZGV4OiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICBkZWZhdWx0OiAwCiAgICAgICAgfQogICAgICB9LAogICAgICBjb21wdXRlZDogewogICAgICAgIHRvb2x0aXBJZDogZnVuY3Rpb24gdG9vbHRpcElkKCkgewogICAgICAgICAgcmV0dXJuICdlbC1wb3BvdmVyLScgKyBPYmplY3QodXRpbF9bImdlbmVyYXRlSWQiXSkoKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdhdGNoOiB7CiAgICAgICAgc2hvd1BvcHBlcjogZnVuY3Rpb24gc2hvd1BvcHBlcih2YWwpIHsKICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICB2YWwgPyB0aGlzLiRlbWl0KCdzaG93JykgOiB0aGlzLiRlbWl0KCdoaWRlJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMucmVmZXJlbmNlIHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlOwogICAgICAgIHZhciBwb3BwZXIgPSB0aGlzLnBvcHBlciB8fCB0aGlzLiRyZWZzLnBvcHBlcjsKCiAgICAgICAgaWYgKCFyZWZlcmVuY2UgJiYgdGhpcy4kc2xvdHMucmVmZXJlbmNlICYmIHRoaXMuJHNsb3RzLnJlZmVyZW5jZVswXSkgewogICAgICAgICAgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRzbG90cy5yZWZlcmVuY2VbMF0uZWxtOwogICAgICAgIH0gLy8g5Y+v6K6/6Zeu5oCnCgoKICAgICAgICBpZiAocmVmZXJlbmNlKSB7CiAgICAgICAgICBPYmplY3QoZG9tX1siYWRkQ2xhc3MiXSkocmVmZXJlbmNlLCAnZWwtcG9wb3Zlcl9fcmVmZXJlbmNlJyk7CiAgICAgICAgICByZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50b29sdGlwSWQpOwogICAgICAgICAgcmVmZXJlbmNlLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0aGlzLnRhYmluZGV4KTsgLy8gdGFi5bqP5YiXCgogICAgICAgICAgcG9wcGVyLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTsKCiAgICAgICAgICBpZiAodGhpcy50cmlnZ2VyICE9PSAnY2xpY2snKSB7CiAgICAgICAgICAgIE9iamVjdChkb21fWyJvbiJdKShyZWZlcmVuY2UsICdmb2N1c2luJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIF90aGlzLmhhbmRsZUZvY3VzKCk7CgogICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHJlZmVyZW5jZS5fX3Z1ZV9fOwoKICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICBpbnN0YW5jZS5mb2N1cygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIE9iamVjdChkb21fWyJvbiJdKShwb3BwZXIsICdmb2N1c2luJywgdGhpcy5oYW5kbGVGb2N1cyk7CiAgICAgICAgICAgIE9iamVjdChkb21fWyJvbiJdKShyZWZlcmVuY2UsICdmb2N1c291dCcsIHRoaXMuaGFuZGxlQmx1cik7CiAgICAgICAgICAgIE9iamVjdChkb21fWyJvbiJdKShwb3BwZXIsICdmb2N1c291dCcsIHRoaXMuaGFuZGxlQmx1cik7CiAgICAgICAgICB9CgogICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwgJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd24pOwogICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGljayk7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snKSB7CiAgICAgICAgICBPYmplY3QoZG9tX1sib24iXSkocmVmZXJlbmNlLCAnY2xpY2snLCB0aGlzLmRvVG9nZ2xlKTsKICAgICAgICAgIE9iamVjdChkb21fWyJvbiJdKShkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2hvdmVyJykgewogICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwgJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZU1vdXNlRW50ZXIpOwogICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHBvcHBlciwgJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZU1vdXNlRW50ZXIpOwogICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwgJ21vdXNlbGVhdmUnLCB0aGlzLmhhbmRsZU1vdXNlTGVhdmUpOwogICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHBvcHBlciwgJ21vdXNlbGVhdmUnLCB0aGlzLmhhbmRsZU1vdXNlTGVhdmUpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7CiAgICAgICAgICBpZiAodGhpcy50YWJpbmRleCA8IDApIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtQb3BvdmVyXWEgbmVnYXRpdmUgdGFpbmRleCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGNhbm5vdCBiZSBmb2N1c2VkIGJ5IHRhYiBrZXknKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAocmVmZXJlbmNlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpKSB7CiAgICAgICAgICAgIE9iamVjdChkb21fWyJvbiJdKShyZWZlcmVuY2UsICdmb2N1c2luJywgdGhpcy5kb1Nob3cpOwogICAgICAgICAgICBPYmplY3QoZG9tX1sib24iXSkocmVmZXJlbmNlLCAnZm9jdXNvdXQnLCB0aGlzLmRvQ2xvc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwgJ21vdXNlZG93bicsIHRoaXMuZG9TaG93KTsKICAgICAgICAgICAgT2JqZWN0KGRvbV9bIm9uIl0pKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgICAgICB0aGlzLmNsZWFudXAoKTsKICAgICAgfSwKICAgICAgZGVhY3RpdmF0ZWQ6IGZ1bmN0aW9uIGRlYWN0aXZhdGVkKCkgewogICAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICB9LAogICAgICBtZXRob2RzOiB7CiAgICAgICAgZG9Ub2dnbGU6IGZ1bmN0aW9uIGRvVG9nZ2xlKCkgewogICAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gIXRoaXMuc2hvd1BvcHBlcjsKICAgICAgICB9LAogICAgICAgIGRvU2hvdzogZnVuY3Rpb24gZG9TaG93KCkgewogICAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIGRvQ2xvc2U6IGZ1bmN0aW9uIGRvQ2xvc2UoKSB7CiAgICAgICAgICB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHsKICAgICAgICAgIE9iamVjdChkb21fWyJhZGRDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7CiAgICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snIHx8IHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykgdGhpcy5zaG93UG9wcGVyID0gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHsKICAgICAgICAgIE9iamVjdChkb21fWyJyZW1vdmVDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7CiAgICAgICAgfSwKICAgICAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKCkgewogICAgICAgICAgT2JqZWN0KGRvbV9bInJlbW92ZUNsYXNzIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXNpbmcnKTsKICAgICAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdjbGljaycgfHwgdGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7CiAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpOwoKICAgICAgICAgIGlmICh0aGlzLm9wZW5EZWxheSkgewogICAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIF90aGlzMi5zaG93UG9wcGVyID0gdHJ1ZTsKICAgICAgICAgICAgfSwgdGhpcy5vcGVuRGVsYXkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXYpIHsKICAgICAgICAgIGlmIChldi5rZXlDb2RlID09PSAyNyAmJiB0aGlzLnRyaWdnZXIgIT09ICdtYW51YWwnKSB7CiAgICAgICAgICAgIC8vIGVzYwogICAgICAgICAgICB0aGlzLmRvQ2xvc2UoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7CiAgICAgICAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpOwoKICAgICAgICAgIGlmICh0aGlzLmNsb3NlRGVsYXkpIHsKICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBfdGhpczMuc2hvd1BvcHBlciA9IGZhbHNlOwogICAgICAgICAgICB9LCB0aGlzLmNsb3NlRGVsYXkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBoYW5kbGVEb2N1bWVudENsaWNrOiBmdW5jdGlvbiBoYW5kbGVEb2N1bWVudENsaWNrKGUpIHsKICAgICAgICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZSB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZTsKICAgICAgICAgIHZhciBwb3BwZXIgPSB0aGlzLnBvcHBlciB8fCB0aGlzLiRyZWZzLnBvcHBlcjsKCiAgICAgICAgICBpZiAoIXJlZmVyZW5jZSAmJiB0aGlzLiRzbG90cy5yZWZlcmVuY2UgJiYgdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdKSB7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdLmVsbTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIXRoaXMuJGVsIHx8ICFyZWZlcmVuY2UgfHwgdGhpcy4kZWwuY29udGFpbnMoZS50YXJnZXQpIHx8IHJlZmVyZW5jZS5jb250YWlucyhlLnRhcmdldCkgfHwgIXBvcHBlciB8fCBwb3BwZXIuY29udGFpbnMoZS50YXJnZXQpKSByZXR1cm47CiAgICAgICAgICB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZUFmdGVyRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZUFmdGVyRW50ZXIoKSB7CiAgICAgICAgICB0aGlzLiRlbWl0KCdhZnRlci1lbnRlcicpOwogICAgICAgIH0sCiAgICAgICAgaGFuZGxlQWZ0ZXJMZWF2ZTogZnVuY3Rpb24gaGFuZGxlQWZ0ZXJMZWF2ZSgpIHsKICAgICAgICAgIHRoaXMuJGVtaXQoJ2FmdGVyLWxlYXZlJyk7CiAgICAgICAgICB0aGlzLmRvRGVzdHJveSgpOwogICAgICAgIH0sCiAgICAgICAgY2xlYW51cDogZnVuY3Rpb24gY2xlYW51cCgpIHsKICAgICAgICAgIGlmICh0aGlzLm9wZW5EZWxheSB8fCB0aGlzLmNsb3NlRGVsYXkpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkgewogICAgICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZTsKICAgICAgICBPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5kb1RvZ2dsZSk7CiAgICAgICAgT2JqZWN0KGRvbV9bIm9mZiJdKShyZWZlcmVuY2UsICdtb3VzZXVwJywgdGhpcy5kb0Nsb3NlKTsKICAgICAgICBPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwgJ21vdXNlZG93bicsIHRoaXMuZG9TaG93KTsKICAgICAgICBPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwgJ2ZvY3VzaW4nLCB0aGlzLmRvU2hvdyk7CiAgICAgICAgT2JqZWN0KGRvbV9bIm9mZiJdKShyZWZlcmVuY2UsICdmb2N1c291dCcsIHRoaXMuZG9DbG9zZSk7CiAgICAgICAgT2JqZWN0KGRvbV9bIm9mZiJdKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7CiAgICAgICAgT2JqZWN0KGRvbV9bIm9mZiJdKShyZWZlcmVuY2UsICdtb3VzZXVwJywgdGhpcy5kb0Nsb3NlKTsKICAgICAgICBPYmplY3QoZG9tX1sib2ZmIl0pKHJlZmVyZW5jZSwgJ21vdXNlbGVhdmUnLCB0aGlzLmhhbmRsZU1vdXNlTGVhdmUpOwogICAgICAgIE9iamVjdChkb21fWyJvZmYiXSkocmVmZXJlbmNlLCAnbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlTW91c2VFbnRlcik7CiAgICAgICAgT2JqZWN0KGRvbV9bIm9mZiJdKShkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTsKICAgICAgfQogICAgfTsgLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYKCiAgICAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovCgogICAgdmFyIHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXzsgLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMKCiAgICB2YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWUKCiAgICAvKiBub3JtYWxpemUgY29tcG9uZW50ICovCgoKICAgIHZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplclsiYSIKICAgIC8qIGRlZmF1bHQgKi8KICAgIF0pKHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLCByZW5kZXIsIHN0YXRpY1JlbmRlckZucywgZmFsc2UsIG51bGwsIG51bGwsIG51bGwpOwogICAgLyogaG90IHJlbG9hZCAqLwoKICAgIGlmIChmYWxzZSkgewogICAgICB2YXIgYXBpOwogICAgfQoKICAgIGNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9ICJwYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZSI7CiAgICAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovCgogICAgdmFyIG1haW4gPSBjb21wb25lbnQuZXhwb3J0czsgLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9kaXJlY3RpdmUuanMKCiAgICB2YXIgZ2V0UmVmZXJlbmNlID0gZnVuY3Rpb24gZ2V0UmVmZXJlbmNlKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgICB2YXIgX3JlZiA9IGJpbmRpbmcuZXhwcmVzc2lvbiA/IGJpbmRpbmcudmFsdWUgOiBiaW5kaW5nLmFyZzsKCiAgICAgIHZhciBwb3BwZXIgPSB2bm9kZS5jb250ZXh0LiRyZWZzW19yZWZdOwoKICAgICAgaWYgKHBvcHBlcikgewogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBvcHBlcikpIHsKICAgICAgICAgIHBvcHBlclswXS4kcmVmcy5yZWZlcmVuY2UgPSBlbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcG9wcGVyLiRyZWZzLnJlZmVyZW5jZSA9IGVsOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8KCgogICAgdmFyIGRpcmVjdGl2ZSA9IHsKICAgICAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgICAgICBnZXRSZWZlcmVuY2UoZWwsIGJpbmRpbmcsIHZub2RlKTsKICAgICAgfSwKICAgICAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgICAgIGdldFJlZmVyZW5jZShlbCwgYmluZGluZywgdm5vZGUpOwogICAgICB9CiAgICB9OyAvLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsICJ2dWUiCgogICAgdmFyIGV4dGVybmFsX3Z1ZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOwoKICAgIHZhciBleHRlcm5hbF92dWVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfdnVlXyk7IC8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9pbmRleC5qcwoKCiAgICBleHRlcm5hbF92dWVfZGVmYXVsdC5hLmRpcmVjdGl2ZSgncG9wb3ZlcicsIGRpcmVjdGl2ZSk7CiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwoKICAgIG1haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHsKICAgICAgVnVlLmRpcmVjdGl2ZSgncG9wb3ZlcicsIGRpcmVjdGl2ZSk7CiAgICAgIFZ1ZS5jb21wb25lbnQobWFpbi5uYW1lLCBtYWluKTsKICAgIH07CgogICAgbWFpbi5kaXJlY3RpdmUgPSBkaXJlY3RpdmU7CiAgICAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovCgogICAgdmFyIHBvcG92ZXIgPSBfX3dlYnBhY2tfZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBtYWluOwogICAgLyoqKi8KICB9CiAgLyoqKioqKi8KCn0pOw=="},null]}