执行过npm install命令的vue-element-admin源码
康凯
2022-05-20 aa4c235a8ca67ea8b731f90c951a465e92c0a865
1
{"remainingRequest":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\源码\\vue-element-admin-master\\src\\components\\ImageCropper\\index.vue?vue&type=style&index=0&lang=scss&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\components\\ImageCropper\\index.vue","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\css-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\postcss-loader\\src\\index.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\sass-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpAY2hhcnNldCAiVVRGLTgiOwpALXdlYmtpdC1rZXlmcmFtZXMgdmljcF9wcm9ncmVzcyB7CiAgMCUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwOwogIH0KICAxMDAlIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogNDBweDsKICB9Cn0KQGtleWZyYW1lcyB2aWNwX3Byb2dyZXNzIHsKICAwJSB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDA7CiAgfQogIDEwMCUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA0MHB4OwogIH0KfQpALXdlYmtpdC1rZXlmcmFtZXMgdmljcCB7CiAgMCUgewogICAgb3BhY2l0eTogMDsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGV5KC02MHB4KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRleSgtNjBweCk7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogMTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGV5KDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGV5KDApOwogIH0KfQpAa2V5ZnJhbWVzIHZpY3AgewogIDAlIHsKICAgIG9wYWNpdHk6IDA7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRleSgtNjBweCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZXkoLTYwcHgpOwogIH0KICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRleSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRleSgwKTsKICB9Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCB7CiAgcG9zaXRpb246IGZpeGVkOwogIGRpc3BsYXk6IGJsb2NrOwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHotaW5kZXg6IDEwMDAwOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICByaWdodDogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogIC1tb3otdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4yMyk7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjIzKTsKICBwb3NpdGlvbjogZml4ZWQ7CiAgZGlzcGxheTogYmxvY2s7CiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgei1pbmRleDogMTAwMDA7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAwOwogIG1hcmdpbjogYXV0bzsKICB3aWR0aDogNjAwcHg7CiAgaGVpZ2h0OiAzMzBweDsKICBwYWRkaW5nOiAyNXB4OwogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIC13ZWJraXQtYW5pbWF0aW9uOiB2aWNwIDAuMTJzIGVhc2UtaW47CiAgYW5pbWF0aW9uOiB2aWNwIDAuMTJzIGVhc2UtaW47Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLWNsb3NlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IC0zMHB4OwogIHRvcDogLTMwcHg7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLWNsb3NlIC52aWNwLWljb240IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDMwcHg7CiAgaGVpZ2h0OiAzMHB4OwogIGN1cnNvcjogcG9pbnRlcjsKICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMThzOwogIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMThzOwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE4czsKICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xOHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMThzOwogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMCk7CiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDApOwogIHRyYW5zZm9ybTogcm90YXRlKDApOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1jbG9zZSAudmljcC1pY29uNDo6YWZ0ZXIsCi52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1jbG9zZSAudmljcC1pY29uNDo6YmVmb3JlIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4yMyk7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjIzKTsKICBjb250ZW50OiAiIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAxMnB4OwogIGxlZnQ6IDRweDsKICB3aWR0aDogMjBweDsKICBoZWlnaHQ6IDNweDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1jbG9zZSAudmljcC1pY29uNDo6YWZ0ZXIgewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1jbG9zZSAudmljcC1pY29uNDpob3ZlciB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLXN0ZXAxIC52aWNwLWRyb3AtYXJlYSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHBhZGRpbmc6IDM1cHg7CiAgaGVpZ2h0OiAxNzBweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDMpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgwLCAwLCAwLCAwLjA4KTsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1zdGVwMSAudmljcC1kcm9wLWFyZWEgLnZpY3AtaWNvbjEgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbjogMCBhdXRvIDZweDsKICB3aWR0aDogNDJweDsKICBoZWlnaHQ6IDQycHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAxCiAgLnZpY3AtZHJvcC1hcmVhCiAgLnZpY3AtaWNvbjEKICAudmljcC1pY29uMS1hcnJvdyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAwIGF1dG87CiAgd2lkdGg6IDA7CiAgaGVpZ2h0OiAwOwogIGJvcmRlci1ib3R0b206IDE0LjdweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgYm9yZGVyLWxlZnQ6IDE0LjdweCBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItcmlnaHQ6IDE0LjdweCBzb2xpZCB0cmFuc3BhcmVudDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAxCiAgLnZpY3AtZHJvcC1hcmVhCiAgLnZpY3AtaWNvbjEKICAudmljcC1pY29uMS1ib2R5IHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTIuNnB4OwogIGhlaWdodDogMTQuN3B4OwogIG1hcmdpbjogMCBhdXRvOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAxCiAgLnZpY3AtZHJvcC1hcmVhCiAgLnZpY3AtaWNvbjEKICAudmljcC1pY29uMS1ib3R0b20gewogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMTIuNnB4OwogIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTsKICBib3JkZXItdG9wOiBub25lOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1zdGVwMSAudmljcC1kcm9wLWFyZWEgLnZpY3AtaGludCB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMTVweDsKICBmb250LXNpemU6IDE0cHg7CiAgY29sb3I6ICM2NjY7CiAgbGluZS1oZWlnaHQ6IDMwcHg7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMQogIC52aWNwLWRyb3AtYXJlYQogIC52aWNwLW5vLXN1cHBvcnRlZC1oaW50IHsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgcGFkZGluZzogMzBweDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDYwcHg7CiAgbGluZS1oZWlnaHQ6IDMwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgY29sb3I6ICM2NjY7CiAgZm9udC1zaXplOiAxNHB4Owp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1zdGVwMSAudmljcC1kcm9wLWFyZWE6aG92ZXIgewogIGN1cnNvcjogcG9pbnRlcjsKICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1zdGVwMiAudmljcC1jcm9wIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1zdGVwMiAudmljcC1jcm9wIC52aWNwLWNyb3AtbGVmdCB7CiAgZmxvYXQ6IGxlZnQ7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1pbWctY29udGFpbmVyIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDI0MHB4OwogIGhlaWdodDogMTgwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlMDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtaW1nLWNvbnRhaW5lcgogIC52aWNwLWltZyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGRpc3BsYXk6IGJsb2NrOwogIGN1cnNvcjogbW92ZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtaW1nLWNvbnRhaW5lcgogIC52aWNwLWltZy1zaGFkZSB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMTgpOwogIGJveC1zaGFkb3c6IDAgMnB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4xOCk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQxLCAyNDIsIDI0MywgMC44KTsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLWltZy1jb250YWluZXIKICAudmljcC1pbWctc2hhZGUudmljcC1pbWctc2hhZGUtMSB7CiAgdG9wOiAwOwogIGxlZnQ6IDA7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1pbWctY29udGFpbmVyCiAgLnZpY3AtaW1nLXNoYWRlLnZpY3AtaW1nLXNoYWRlLTIgewogIGJvdHRvbTogMDsKICByaWdodDogMDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJvdGF0ZSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAyNDBweDsKICBoZWlnaHQ6IDE4cHg7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yb3RhdGUKICBpIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMThweDsKICBoZWlnaHQ6IDE4cHg7CiAgYm9yZGVyLXJhZGl1czogMTAwJTsKICBsaW5lLWhlaWdodDogMThweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7CiAgY29sb3I6ICNmZmY7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJvdGF0ZQogIGk6aG92ZXIgewogIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKTsKICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpOwogIGN1cnNvcjogcG9pbnRlcjsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTQpOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3Atcm90YXRlCiAgaTpmaXJzdC1jaGlsZCB7CiAgZmxvYXQ6IGxlZnQ7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yb3RhdGUKICBpOmxhc3QtY2hpbGQgewogIGZsb2F0OiByaWdodDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiAzMHB4IDAgMTBweCAwOwogIHdpZHRoOiAyNDBweDsKICBoZWlnaHQ6IDE4cHg7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIC52aWNwLWljb241LAoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgLnZpY3AtaWNvbjYgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgLnZpY3AtaWNvbjU6aG92ZXIsCi52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtcmFuZ2UKICAudmljcC1pY29uNjpob3ZlciB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpOwogIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4xMik7CiAgY3Vyc29yOiBwb2ludGVyOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNCk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIC52aWNwLWljb241IHsKICBsZWZ0OiAwOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtcmFuZ2UKICAudmljcC1pY29uNTo6YmVmb3JlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogYmxvY2s7CiAgbGVmdDogM3B4OwogIHRvcDogOHB4OwogIHdpZHRoOiAxMnB4OwogIGhlaWdodDogMnB4OwogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIC52aWNwLWljb242IHsKICByaWdodDogMDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgLnZpY3AtaWNvbjY6OmJlZm9yZSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIGxlZnQ6IDNweDsKICB0b3A6IDhweDsKICB3aWR0aDogMTJweDsKICBoZWlnaHQ6IDJweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtcmFuZ2UKICAudmljcC1pY29uNjo6YWZ0ZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiBibG9jazsKICB0b3A6IDNweDsKICBsZWZ0OiA4cHg7CiAgd2lkdGg6IDJweDsKICBoZWlnaHQ6IDEycHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZy10b3A6IDVweDsKICBtYXJnaW46IDAgYXV0bzsKICB3aWR0aDogMTgwcHg7CiAgaGVpZ2h0OiA4cHg7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogIGFwcGVhcmFuY2U6IG5vbmU7CiAgY3Vyc29yOiBwb2ludGVyOwogIC8qIOa7keWdlwogICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIC8qIOi9qOmBkwogICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtcmFuZ2UKICBpbnB1dFt0eXBlPSJyYW5nZSJdOmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtcmFuZ2UKICBpbnB1dFt0eXBlPSJyYW5nZSJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMTgpOwogIGJveC1zaGFkb3c6IDAgMnB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4xOCk7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIGFwcGVhcmFuY2U6IG5vbmU7CiAgbWFyZ2luLXRvcDogLTNweDsKICB3aWR0aDogMTJweDsKICBoZWlnaHQ6IDEycHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzYxYzA5MTsKICBib3JkZXItcmFkaXVzOiAxMDAlOwogIGJvcmRlcjogbm9uZTsKICAtd2Via2l0LXRyYW5zaXRpb246IDAuMnM7CiAgdHJhbnNpdGlvbjogMC4yczsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgaW5wdXRbdHlwZT0icmFuZ2UiXTo6LW1vei1yYW5nZS10aHVtYiB7CiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE4KTsKICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CiAgYXBwZWFyYW5jZTogbm9uZTsKICB3aWR0aDogMTJweDsKICBoZWlnaHQ6IDEycHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzYxYzA5MTsKICBib3JkZXItcmFkaXVzOiAxMDAlOwogIGJvcmRlcjogbm9uZTsKICAtd2Via2l0LXRyYW5zaXRpb246IDAuMnM7CiAgdHJhbnNpdGlvbjogMC4yczsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgaW5wdXRbdHlwZT0icmFuZ2UiXTo6LW1zLXRodW1iIHsKICBib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMTgpOwogIGFwcGVhcmFuY2U6IG5vbmU7CiAgd2lkdGg6IDEycHg7CiAgaGVpZ2h0OiAxMnB4OwogIGJhY2tncm91bmQtY29sb3I6ICM2MWMwOTE7CiAgYm9yZGVyOiBub25lOwogIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjJzOwogIHRyYW5zaXRpb246IDAuMnM7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIGlucHV0W3R5cGU9InJhbmdlIl06YWN0aXZlOjotbW96LXJhbmdlLXRodW1iIHsKICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMjMpOwogIHdpZHRoOiAxNHB4OwogIGhlaWdodDogMTRweDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgaW5wdXRbdHlwZT0icmFuZ2UiXTphY3RpdmU6Oi1tcy10aHVtYiB7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjIzKTsKICB3aWR0aDogMTRweDsKICBoZWlnaHQ6IDE0cHg7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIGlucHV0W3R5cGU9InJhbmdlIl06YWN0aXZlOjotd2Via2l0LXNsaWRlci10aHVtYiB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMjMpOwogIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4yMyk7CiAgbWFyZ2luLXRvcDogLTRweDsKICB3aWR0aDogMTRweDsKICBoZWlnaHQ6IDE0cHg7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIGlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4xMik7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDZweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIGJvcmRlcjogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxNzAsIDExOSwgMC4zKTsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgaW5wdXRbdHlwZT0icmFuZ2UiXTo6LW1vei1yYW5nZS10cmFjayB7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDZweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIGJvcmRlcjogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxNzAsIDExOSwgMC4zKTsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgaW5wdXRbdHlwZT0icmFuZ2UiXTo6LW1zLXRyYWNrIHsKICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpOwogIHdpZHRoOiAxMDAlOwogIGN1cnNvcjogcG9pbnRlcjsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogIGNvbG9yOiB0cmFuc3BhcmVudDsKICBoZWlnaHQ6IDZweDsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgYm9yZGVyOiBub25lOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1sZWZ0CiAgLnZpY3AtcmFuZ2UKICBpbnB1dFt0eXBlPSJyYW5nZSJdOjotbXMtZmlsbC1sb3dlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2OCwgMTcwLCAxMTksIDAuMyk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIGlucHV0W3R5cGU9InJhbmdlIl06Oi1tcy1maWxsLXVwcGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxNzAsIDExOSwgMC4xNSk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIGlucHV0W3R5cGU9InJhbmdlIl06Zm9jdXM6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxNzAsIDExOSwgMC41KTsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtbGVmdAogIC52aWNwLXJhbmdlCiAgaW5wdXRbdHlwZT0icmFuZ2UiXTpmb2N1czo6LW1vei1yYW5nZS10cmFjayB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2OCwgMTcwLCAxMTksIDAuNSk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIGlucHV0W3R5cGU9InJhbmdlIl06Zm9jdXM6Oi1tcy1maWxsLWxvd2VyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxNzAsIDExOSwgMC40NSk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMgogIC52aWNwLWNyb3AKICAudmljcC1jcm9wLWxlZnQKICAudmljcC1yYW5nZQogIGlucHV0W3R5cGU9InJhbmdlIl06Zm9jdXM6Oi1tcy1maWxsLXVwcGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxNzAsIDExOSwgMC4yNSk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLXN0ZXAyIC52aWNwLWNyb3AgLnZpY3AtY3JvcC1yaWdodCB7CiAgZmxvYXQ6IHJpZ2h0Owp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1yaWdodAogIC52aWNwLXByZXZpZXcgewogIGhlaWdodDogMTUwcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtcmlnaHQKICAudmljcC1wcmV2aWV3CiAgLnZpY3AtcHJldmlldy1pdGVtIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgcGFkZGluZzogNXB4OwogIHdpZHRoOiAxMDBweDsKICBoZWlnaHQ6IDEwMHB4OwogIGZsb2F0OiBsZWZ0OwogIG1hcmdpbi1yaWdodDogMTZweDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtcmlnaHQKICAudmljcC1wcmV2aWV3CiAgLnZpY3AtcHJldmlldy1pdGVtCiAgc3BhbiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogLTMwcHg7CiAgd2lkdGg6IDEwMCU7CiAgZm9udC1zaXplOiAxNHB4OwogIGNvbG9yOiAjYmJiOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtcmlnaHQKICAudmljcC1wcmV2aWV3CiAgLnZpY3AtcHJldmlldy1pdGVtCiAgaW1nIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgZGlzcGxheTogYmxvY2s7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwYWRkaW5nOiAzcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogIG92ZXJmbG93OiBoaWRkZW47CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICB1c2VyLXNlbGVjdDogbm9uZTsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkCiAgLnZpY3Atd3JhcAogIC52aWNwLXN0ZXAyCiAgLnZpY3AtY3JvcAogIC52aWNwLWNyb3AtcmlnaHQKICAudmljcC1wcmV2aWV3CiAgLnZpY3AtcHJldmlldy1pdGVtLnZpY3AtcHJldmlldy1pdGVtLWNpcmNsZSB7CiAgbWFyZ2luLXJpZ2h0OiAwOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQKICAudmljcC13cmFwCiAgLnZpY3Atc3RlcDIKICAudmljcC1jcm9wCiAgLnZpY3AtY3JvcC1yaWdodAogIC52aWNwLXByZXZpZXcKICAudmljcC1wcmV2aWV3LWl0ZW0udmljcC1wcmV2aWV3LWl0ZW0tY2lyY2xlCiAgaW1nIHsKICBib3JkZXItcmFkaXVzOiAxMDAlOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1zdGVwMyAudmljcC11cGxvYWQgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBwYWRkaW5nOiAzNXB4OwogIGhlaWdodDogMTcwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAzKTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgYm9yZGVyOiAxcHggZGFzaGVkICNkZGQ7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLXN0ZXAzIC52aWNwLXVwbG9hZCAudmljcC1sb2FkaW5nIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxNXB4OwogIGZvbnQtc2l6ZTogMTZweDsKICBjb2xvcjogIzk5OTsKICBsaW5lLWhlaWdodDogMzBweDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3Atc3RlcDMgLnZpY3AtdXBsb2FkIC52aWNwLXByb2dyZXNzLXdyYXAgewogIG1hcmdpbi10b3A6IDEycHg7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA4KTsKICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMwogIC52aWNwLXVwbG9hZAogIC52aWNwLXByb2dyZXNzLXdyYXAKICAudmljcC1wcm9ncmVzcyB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogNXB4OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGE3OwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSg2OCwgMTcwLCAxMTksIDAuMyk7CiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSg2OCwgMTcwLCAxMTksIDAuMyk7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCAwLjE1cyBsaW5lYXI7CiAgdHJhbnNpdGlvbjogd2lkdGggMC4xNXMgbGluZWFyOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KAogICAgMTM1ZGVnLAogICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIDI1JSwKICAgIHRyYW5zcGFyZW50IDI1JSwKICAgIHRyYW5zcGFyZW50IDUwJSwKICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSA1MCUsCiAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgNzUlLAogICAgdHJhbnNwYXJlbnQgNzUlLAogICAgdHJhbnNwYXJlbnQKICApOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgKICAgIC00NWRlZywKICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAyNSUsCiAgICB0cmFuc3BhcmVudCAyNSUsCiAgICB0cmFuc3BhcmVudCA1MCUsCiAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgNTAlLAogICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIDc1JSwKICAgIHRyYW5zcGFyZW50IDc1JSwKICAgIHRyYW5zcGFyZW50CiAgKTsKICBiYWNrZ3JvdW5kLXNpemU6IDQwcHggNDBweDsKICAtd2Via2l0LWFuaW1hdGlvbjogdmljcF9wcm9ncmVzcyAwLjVzIGxpbmVhciBpbmZpbml0ZTsKICBhbmltYXRpb246IHZpY3BfcHJvZ3Jlc3MgMC41cyBsaW5lYXIgaW5maW5pdGU7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZAogIC52aWNwLXdyYXAKICAudmljcC1zdGVwMwogIC52aWNwLXVwbG9hZAogIC52aWNwLXByb2dyZXNzLXdyYXAKICAudmljcC1wcm9ncmVzczo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBkaXNwbGF5OiBibG9jazsKICB0b3A6IC0zcHg7CiAgcmlnaHQ6IC0zcHg7CiAgd2lkdGg6IDlweDsKICBoZWlnaHQ6IDlweDsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI0NSwgMjQ2LCAyNDcsIDAuNyk7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCA0cHggMCByZ2JhKDY4LCAxNzAsIDExOSwgMC43KTsKICBib3gtc2hhZG93OiAwIDFweCA0cHggMCByZ2JhKDY4LCAxNzAsIDExOSwgMC43KTsKICBib3JkZXItcmFkaXVzOiAxMDAlOwogIGJhY2tncm91bmQtY29sb3I6ICM0YTc7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLXN0ZXAzIC52aWNwLXVwbG9hZCAudmljcC1lcnJvciwKLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLXN0ZXAzIC52aWNwLXVwbG9hZCAudmljcC1zdWNjZXNzIHsKICBoZWlnaHQ6IDEwMHB4OwogIGxpbmUtaGVpZ2h0OiAxMDBweDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3Atb3BlcmF0ZSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAyMHB4OwogIGJvdHRvbTogMjBweDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3Atb3BlcmF0ZSBhIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZmxvYXQ6IGxlZnQ7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgd2lkdGg6IDEwMHB4OwogIGhlaWdodDogMzZweDsKICBsaW5lLWhlaWdodDogMzZweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZvbnQtc2l6ZTogMTRweDsKICBjb2xvcjogIzRhNzsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1vcGVyYXRlIGE6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMyk7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLWVycm9yLAoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3Atc3VjY2VzcyB7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIGhlaWdodDogMjRweDsKICBjb2xvcjogI2QxMDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3Atc3VjY2VzcyB7CiAgY29sb3I6ICM0YTc7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLWljb24zIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjBweDsKICB0b3A6IDRweDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3AtaWNvbjM6OmFmdGVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAzcHg7CiAgbGVmdDogNnB4OwogIHdpZHRoOiA2cHg7CiAgaGVpZ2h0OiAxMHB4OwogIGJvcmRlci13aWR0aDogMCAycHggMnB4IDA7CiAgYm9yZGVyLWNvbG9yOiAjNGE3OwogIGJvcmRlci1zdHlsZTogc29saWQ7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgY29udGVudDogIiI7Cn0KLnZ1ZS1pbWFnZS1jcm9wLXVwbG9hZCAudmljcC13cmFwIC52aWNwLWljb24yIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjBweDsKICB0b3A6IDRweDsKfQoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3AtaWNvbjI6OmFmdGVyLAoudnVlLWltYWdlLWNyb3AtdXBsb2FkIC52aWNwLXdyYXAgLnZpY3AtaWNvbjI6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogOXB4OwogIGxlZnQ6IDRweDsKICB3aWR0aDogMTNweDsKICBoZWlnaHQ6IDJweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDEwOwogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwp9Ci52dWUtaW1hZ2UtY3JvcC11cGxvYWQgLnZpY3Atd3JhcCAudmljcC1pY29uMjo6YWZ0ZXIgewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwp9Ci5lLXJpcHBsZSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTsKICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogIC1tcy10cmFuc2Zvcm06IHNjYWxlKDApOwogIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgb3BhY2l0eTogMTsKfQouZS1yaXBwbGUuei1hY3RpdmUgewogIG9wYWNpdHk6IDA7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDIpOwogIC1tcy10cmFuc2Zvcm06IHNjYWxlKDIpOwogIHRyYW5zZm9ybTogc2NhbGUoMik7CiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDEuMnMgZWFzZS1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIDAuNnMgZWFzZS1vdXQ7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxLjJzIGVhc2Utb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2Utb3V0OwogIHRyYW5zaXRpb246IG9wYWNpdHkgMS4ycyBlYXNlLW91dCwgdHJhbnNmb3JtIDAuNnMgZWFzZS1vdXQ7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxLjJzIGVhc2Utb3V0LCB0cmFuc2Zvcm0gMC42cyBlYXNlLW91dCwKICAgIC13ZWJraXQtdHJhbnNmb3JtIDAuNnMgZWFzZS1vdXQ7Cn0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/components/ImageCropper","sourcesContent":["<template>\n  <div v-show=\"value\" class=\"vue-image-crop-upload\">\n    <div class=\"vicp-wrap\">\n      <div class=\"vicp-close\" @click=\"off\">\n        <i class=\"vicp-icon4\" />\n      </div>\n\n      <div v-show=\"step == 1\" class=\"vicp-step1\">\n        <div\n          class=\"vicp-drop-area\"\n          @dragleave=\"preventDefault\"\n          @dragover=\"preventDefault\"\n          @dragenter=\"preventDefault\"\n          @click=\"handleClick\"\n          @drop=\"handleChange\"\n        >\n          <i v-show=\"loading != 1\" class=\"vicp-icon1\">\n            <i class=\"vicp-icon1-arrow\" />\n            <i class=\"vicp-icon1-body\" />\n            <i class=\"vicp-icon1-bottom\" />\n          </i>\n          <span v-show=\"loading !== 1\" class=\"vicp-hint\">{{ lang.hint }}</span>\n          <span v-show=\"!isSupported\" class=\"vicp-no-supported-hint\">{{ lang.noSupported }}</span>\n          <input v-show=\"false\" v-if=\"step == 1\" ref=\"fileinput\" type=\"file\" @change=\"handleChange\">\n        </div>\n        <div v-show=\"hasError\" class=\"vicp-error\">\n          <i class=\"vicp-icon2\" />\n          {{ errorMsg }}\n        </div>\n        <div class=\"vicp-operate\">\n          <a @click=\"off\" @mousedown=\"ripple\">{{ lang.btn.off }}</a>\n        </div>\n      </div>\n\n      <div v-if=\"step == 2\" class=\"vicp-step2\">\n        <div class=\"vicp-crop\">\n          <div v-show=\"true\" class=\"vicp-crop-left\">\n            <div class=\"vicp-img-container\">\n              <img\n                ref=\"img\"\n                :src=\"sourceImgUrl\"\n                :style=\"sourceImgStyle\"\n                class=\"vicp-img\"\n                draggable=\"false\"\n                @drag=\"preventDefault\"\n                @dragstart=\"preventDefault\"\n                @dragend=\"preventDefault\"\n                @dragleave=\"preventDefault\"\n                @dragover=\"preventDefault\"\n                @dragenter=\"preventDefault\"\n                @drop=\"preventDefault\"\n                @touchstart=\"imgStartMove\"\n                @touchmove=\"imgMove\"\n                @touchend=\"createImg\"\n                @touchcancel=\"createImg\"\n                @mousedown=\"imgStartMove\"\n                @mousemove=\"imgMove\"\n                @mouseup=\"createImg\"\n                @mouseout=\"createImg\"\n              >\n              <div :style=\"sourceImgShadeStyle\" class=\"vicp-img-shade vicp-img-shade-1\" />\n              <div :style=\"sourceImgShadeStyle\" class=\"vicp-img-shade vicp-img-shade-2\" />\n            </div>\n\n            <div class=\"vicp-range\">\n              <input\n                :value=\"scale.range\"\n                type=\"range\"\n                step=\"1\"\n                min=\"0\"\n                max=\"100\"\n                @input=\"zoomChange\"\n              >\n              <i\n                class=\"vicp-icon5\"\n                @mousedown=\"startZoomSub\"\n                @mouseout=\"endZoomSub\"\n                @mouseup=\"endZoomSub\"\n              />\n              <i\n                class=\"vicp-icon6\"\n                @mousedown=\"startZoomAdd\"\n                @mouseout=\"endZoomAdd\"\n                @mouseup=\"endZoomAdd\"\n              />\n            </div>\n\n            <div v-if=\"!noRotate\" class=\"vicp-rotate\">\n              <i @mousedown=\"startRotateLeft\" @mouseout=\"endRotate\" @mouseup=\"endRotate\">↺</i>\n              <i @mousedown=\"startRotateRight\" @mouseout=\"endRotate\" @mouseup=\"endRotate\">↻</i>\n            </div>\n          </div>\n          <div v-show=\"true\" class=\"vicp-crop-right\">\n            <div class=\"vicp-preview\">\n              <div v-if=\"!noSquare\" class=\"vicp-preview-item\">\n                <img :src=\"createImgUrl\" :style=\"previewStyle\">\n                <span>{{ lang.preview }}</span>\n              </div>\n              <div v-if=\"!noCircle\" class=\"vicp-preview-item vicp-preview-item-circle\">\n                <img :src=\"createImgUrl\" :style=\"previewStyle\">\n                <span>{{ lang.preview }}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n        <div class=\"vicp-operate\">\n          <a @click=\"setStep(1)\" @mousedown=\"ripple\">{{ lang.btn.back }}</a>\n          <a class=\"vicp-operate-btn\" @click=\"prepareUpload\" @mousedown=\"ripple\">{{ lang.btn.save }}</a>\n        </div>\n      </div>\n\n      <div v-if=\"step == 3\" class=\"vicp-step3\">\n        <div class=\"vicp-upload\">\n          <span v-show=\"loading === 1\" class=\"vicp-loading\">{{ lang.loading }}</span>\n          <div class=\"vicp-progress-wrap\">\n            <span v-show=\"loading === 1\" :style=\"progressStyle\" class=\"vicp-progress\" />\n          </div>\n          <div v-show=\"hasError\" class=\"vicp-error\">\n            <i class=\"vicp-icon2\" />\n            {{ errorMsg }}\n          </div>\n          <div v-show=\"loading === 2\" class=\"vicp-success\">\n            <i class=\"vicp-icon3\" />\n            {{ lang.success }}\n          </div>\n        </div>\n        <div class=\"vicp-operate\">\n          <a @click=\"setStep(2)\" @mousedown=\"ripple\">{{ lang.btn.back }}</a>\n          <a @click=\"off\" @mousedown=\"ripple\">{{ lang.btn.close }}</a>\n        </div>\n      </div>\n      <canvas v-show=\"false\" ref=\"canvas\" :width=\"width\" :height=\"height\" />\n    </div>\n  </div>\n</template>\n\n<script>\n'use strict'\nimport request from '@/utils/request'\nimport language from './utils/language.js'\nimport mimes from './utils/mimes.js'\nimport data2blob from './utils/data2blob.js'\nimport effectRipple from './utils/effectRipple.js'\nexport default {\n  props: {\n    // 域,上传文件name,触发事件会带上(如果一个页面多个图片上传控件,可以做区分\n    field: {\n      type: String,\n      default: 'avatar'\n    },\n    // 原名key,类似于id,触发事件会带上(如果一个页面多个图片上传控件,可以做区分\n    ki: {\n      type: Number,\n      default: 0\n    },\n    // 显示该控件与否\n    value: {\n      type: Boolean,\n      default: true\n    },\n    // 上传地址\n    url: {\n      type: String,\n      default: ''\n    },\n    // 其他要上传文件附带的数据,对象格式\n    params: {\n      type: Object,\n      default: null\n    },\n    // Add custom headers\n    headers: {\n      type: Object,\n      default: null\n    },\n    // 剪裁图片的宽\n    width: {\n      type: Number,\n      default: 200\n    },\n    // 剪裁图片的高\n    height: {\n      type: Number,\n      default: 200\n    },\n    // 不显示旋转功能\n    noRotate: {\n      type: Boolean,\n      default: true\n    },\n    // 不预览圆形图片\n    noCircle: {\n      type: Boolean,\n      default: false\n    },\n    // 不预览方形图片\n    noSquare: {\n      type: Boolean,\n      default: false\n    },\n    // 单文件大小限制\n    maxSize: {\n      type: Number,\n      default: 10240\n    },\n    // 语言类型\n    langType: {\n      type: String,\n      default: 'zh'\n    },\n    // 语言包\n    langExt: {\n      type: Object,\n      default: null\n    },\n    // 图片上传格式\n    imgFormat: {\n      type: String,\n      default: 'png'\n    },\n    // 是否支持跨域\n    withCredentials: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    const { imgFormat, langType, langExt, width, height } = this\n    let isSupported = true\n    const allowImgFormat = ['jpg', 'png']\n    const tempImgFormat =\n      allowImgFormat.indexOf(imgFormat) === -1 ? 'jpg' : imgFormat\n    const lang = language[langType] ? language[langType] : language['en']\n    const mime = mimes[tempImgFormat]\n    // 规范图片格式\n    this.imgFormat = tempImgFormat\n    if (langExt) {\n      Object.assign(lang, langExt)\n    }\n    if (typeof FormData !== 'function') {\n      isSupported = false\n    }\n    return {\n      // 图片的mime\n      mime,\n      // 语言包\n      lang,\n      // 浏览器是否支持该控件\n      isSupported,\n      // 浏览器是否支持触屏事件\n      // eslint-disable-next-line no-prototype-builtins\n      isSupportTouch: document.hasOwnProperty('ontouchstart'),\n      // 步骤\n      step: 1, // 1选择文件 2剪裁 3上传\n      // 上传状态及进度\n      loading: 0, // 0未开始 1正在 2成功 3错误\n      progress: 0,\n      // 是否有错误及错误信息\n      hasError: false,\n      errorMsg: '',\n      // 需求图宽高比\n      ratio: width / height,\n      // 原图地址、生成图片地址\n      sourceImg: null,\n      sourceImgUrl: '',\n      createImgUrl: '',\n      // 原图片拖动事件初始值\n      sourceImgMouseDown: {\n        on: false,\n        mX: 0, // 鼠标按下的坐标\n        mY: 0,\n        x: 0, // scale原图坐标\n        y: 0\n      },\n      // 生成图片预览的容器大小\n      previewContainer: {\n        width: 100,\n        height: 100\n      },\n      // 原图容器宽高\n      sourceImgContainer: {\n        // sic\n        width: 240,\n        height: 184 // 如果生成图比例与此一致会出现bug,先改成特殊的格式吧,哈哈哈\n      },\n      // 原图展示属性\n      scale: {\n        zoomAddOn: false, // 按钮缩放事件开启\n        zoomSubOn: false, // 按钮缩放事件开启\n        range: 1, // 最大100\n        rotateLeft: false, // 按钮向左旋转事件开启\n        rotateRight: false, // 按钮向右旋转事件开启\n        degree: 0, // 旋转度数\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0,\n        maxWidth: 0,\n        maxHeight: 0,\n        minWidth: 0, // 最宽\n        minHeight: 0,\n        naturalWidth: 0, // 原宽\n        naturalHeight: 0\n      }\n    }\n  },\n  computed: {\n    // 进度条样式\n    progressStyle() {\n      const { progress } = this\n      return {\n        width: progress + '%'\n      }\n    },\n    // 原图样式\n    sourceImgStyle() {\n      const { scale, sourceImgMasking } = this\n      const top = scale.y + sourceImgMasking.y + 'px'\n      const left = scale.x + sourceImgMasking.x + 'px'\n      return {\n        top,\n        left,\n        width: scale.width + 'px',\n        height: scale.height + 'px',\n        transform: 'rotate(' + scale.degree + 'deg)', // 旋转时 左侧原始图旋转样式\n        '-ms-transform': 'rotate(' + scale.degree + 'deg)', // 兼容IE9\n        '-moz-transform': 'rotate(' + scale.degree + 'deg)', // 兼容FireFox\n        '-webkit-transform': 'rotate(' + scale.degree + 'deg)', // 兼容Safari 和 chrome\n        '-o-transform': 'rotate(' + scale.degree + 'deg)' // 兼容 Opera\n      }\n    },\n    // 原图蒙版属性\n    sourceImgMasking() {\n      const { width, height, ratio, sourceImgContainer } = this\n      const sic = sourceImgContainer\n      const sicRatio = sic.width / sic.height // 原图容器宽高比\n      let x = 0\n      let y = 0\n      let w = sic.width\n      let h = sic.height\n      let scale = 1\n      if (ratio < sicRatio) {\n        scale = sic.height / height\n        w = sic.height * ratio\n        x = (sic.width - w) / 2\n      }\n      if (ratio > sicRatio) {\n        scale = sic.width / width\n        h = sic.width / ratio\n        y = (sic.height - h) / 2\n      }\n      return {\n        scale, // 蒙版相对需求宽高的缩放\n        x,\n        y,\n        width: w,\n        height: h\n      }\n    },\n    // 原图遮罩样式\n    sourceImgShadeStyle() {\n      const { sourceImgMasking, sourceImgContainer } = this\n      const sic = sourceImgContainer\n      const sim = sourceImgMasking\n      const w =\n        sim.width === sic.width ? sim.width : (sic.width - sim.width) / 2\n      const h =\n        sim.height === sic.height ? sim.height : (sic.height - sim.height) / 2\n      return {\n        width: w + 'px',\n        height: h + 'px'\n      }\n    },\n    previewStyle() {\n      const { ratio, previewContainer } = this\n      const pc = previewContainer\n      let w = pc.width\n      let h = pc.height\n      const pcRatio = w / h\n      if (ratio < pcRatio) {\n        w = pc.height * ratio\n      }\n      if (ratio > pcRatio) {\n        h = pc.width / ratio\n      }\n      return {\n        width: w + 'px',\n        height: h + 'px'\n      }\n    }\n  },\n  watch: {\n    value(newValue) {\n      if (newValue && this.loading !== 1) {\n        this.reset()\n      }\n    }\n  },\n  created() {\n    // 绑定按键esc隐藏此插件事件\n    document.addEventListener('keyup', this.closeHandler)\n  },\n  destroyed() {\n    document.removeEventListener('keyup', this.closeHandler)\n  },\n  methods: {\n    // 点击波纹效果\n    ripple(e) {\n      effectRipple(e)\n    },\n    // 关闭控件\n    off() {\n      setTimeout(() => {\n        this.$emit('input', false)\n        this.$emit('close')\n        if (this.step === 3 && this.loading === 2) {\n          this.setStep(1)\n        }\n      }, 200)\n    },\n    // 设置步骤\n    setStep(no) {\n      // 延时是为了显示动画效果呢,哈哈哈\n      setTimeout(() => {\n        this.step = no\n      }, 200)\n    },\n    /* 图片选择区域函数绑定\n     ---------------------------------------------------------------*/\n    preventDefault(e) {\n      e.preventDefault()\n      return false\n    },\n    handleClick(e) {\n      if (this.loading !== 1) {\n        if (e.target !== this.$refs.fileinput) {\n          e.preventDefault()\n          if (document.activeElement !== this.$refs) {\n            this.$refs.fileinput.click()\n          }\n        }\n      }\n    },\n    handleChange(e) {\n      e.preventDefault()\n      if (this.loading !== 1) {\n        const files = e.target.files || e.dataTransfer.files\n        this.reset()\n        if (this.checkFile(files[0])) {\n          this.setSourceImg(files[0])\n        }\n      }\n    },\n    /* ---------------------------------------------------------------*/\n    // 检测选择的文件是否合适\n    checkFile(file) {\n      const { lang, maxSize } = this\n      // 仅限图片\n      if (file.type.indexOf('image') === -1) {\n        this.hasError = true\n        this.errorMsg = lang.error.onlyImg\n        return false\n      }\n      // 超出大小\n      if (file.size / 1024 > maxSize) {\n        this.hasError = true\n        this.errorMsg = lang.error.outOfSize + maxSize + 'kb'\n        return false\n      }\n      return true\n    },\n    // 重置控件\n    reset() {\n      this.loading = 0\n      this.hasError = false\n      this.errorMsg = ''\n      this.progress = 0\n    },\n    // 设置图片源\n    setSourceImg(file) {\n      const fr = new FileReader()\n      fr.onload = e => {\n        this.sourceImgUrl = fr.result\n        this.startCrop()\n      }\n      fr.readAsDataURL(file)\n    },\n    // 剪裁前准备工作\n    startCrop() {\n      const {\n        width,\n        height,\n        ratio,\n        scale,\n        sourceImgUrl,\n        sourceImgMasking,\n        lang\n      } = this\n      const sim = sourceImgMasking\n      const img = new Image()\n      img.src = sourceImgUrl\n      img.onload = () => {\n        const nWidth = img.naturalWidth\n        const nHeight = img.naturalHeight\n        const nRatio = nWidth / nHeight\n        let w = sim.width\n        let h = sim.height\n        let x = 0\n        let y = 0\n        // 图片像素不达标\n        if (nWidth < width || nHeight < height) {\n          this.hasError = true\n          this.errorMsg = lang.error.lowestPx + width + '*' + height\n          return false\n        }\n        if (ratio > nRatio) {\n          h = w / nRatio\n          y = (sim.height - h) / 2\n        }\n        if (ratio < nRatio) {\n          w = h * nRatio\n          x = (sim.width - w) / 2\n        }\n        scale.range = 0\n        scale.x = x\n        scale.y = y\n        scale.width = w\n        scale.height = h\n        scale.degree = 0\n        scale.minWidth = w\n        scale.minHeight = h\n        scale.maxWidth = nWidth * sim.scale\n        scale.maxHeight = nHeight * sim.scale\n        scale.naturalWidth = nWidth\n        scale.naturalHeight = nHeight\n        this.sourceImg = img\n        this.createImg()\n        this.setStep(2)\n      }\n    },\n    // 鼠标按下图片准备移动\n    imgStartMove(e) {\n      e.preventDefault()\n      // 支持触摸事件,则鼠标事件无效\n      if (this.isSupportTouch && !e.targetTouches) {\n        return false\n      }\n      const et = e.targetTouches ? e.targetTouches[0] : e\n      const { sourceImgMouseDown, scale } = this\n      const simd = sourceImgMouseDown\n      simd.mX = et.screenX\n      simd.mY = et.screenY\n      simd.x = scale.x\n      simd.y = scale.y\n      simd.on = true\n    },\n    // 鼠标按下状态下移动,图片移动\n    imgMove(e) {\n      e.preventDefault()\n      // 支持触摸事件,则鼠标事件无效\n      if (this.isSupportTouch && !e.targetTouches) {\n        return false\n      }\n      const et = e.targetTouches ? e.targetTouches[0] : e\n      const {\n        sourceImgMouseDown: { on, mX, mY, x, y },\n        scale,\n        sourceImgMasking\n      } = this\n      const sim = sourceImgMasking\n      const nX = et.screenX\n      const nY = et.screenY\n      const dX = nX - mX\n      const dY = nY - mY\n      let rX = x + dX\n      let rY = y + dY\n      if (!on) return\n      if (rX > 0) {\n        rX = 0\n      }\n      if (rY > 0) {\n        rY = 0\n      }\n      if (rX < sim.width - scale.width) {\n        rX = sim.width - scale.width\n      }\n      if (rY < sim.height - scale.height) {\n        rY = sim.height - scale.height\n      }\n      scale.x = rX\n      scale.y = rY\n    },\n    // 按钮按下开始向右旋转\n    startRotateRight(e) {\n      const { scale } = this\n      scale.rotateRight = true\n      const rotate = () => {\n        if (scale.rotateRight) {\n          const degree = ++scale.degree\n          this.createImg(degree)\n          setTimeout(function() {\n            rotate()\n          }, 60)\n        }\n      }\n      rotate()\n    },\n    // 按钮按下开始向左旋转\n    startRotateLeft(e) {\n      const { scale } = this\n      scale.rotateLeft = true\n      const rotate = () => {\n        if (scale.rotateLeft) {\n          const degree = --scale.degree\n          this.createImg(degree)\n          setTimeout(function() {\n            rotate()\n          }, 60)\n        }\n      }\n      rotate()\n    },\n    // 停止旋转\n    endRotate() {\n      const { scale } = this\n      scale.rotateLeft = false\n      scale.rotateRight = false\n    },\n    // 按钮按下开始放大\n    startZoomAdd(e) {\n      const { scale } = this\n      scale.zoomAddOn = true\n      const zoom = () => {\n        if (scale.zoomAddOn) {\n          const range = scale.range >= 100 ? 100 : ++scale.range\n          this.zoomImg(range)\n          setTimeout(function() {\n            zoom()\n          }, 60)\n        }\n      }\n      zoom()\n    },\n    // 按钮松开或移开取消放大\n    endZoomAdd(e) {\n      this.scale.zoomAddOn = false\n    },\n    // 按钮按下开始缩小\n    startZoomSub(e) {\n      const { scale } = this\n      scale.zoomSubOn = true\n      const zoom = () => {\n        if (scale.zoomSubOn) {\n          const range = scale.range <= 0 ? 0 : --scale.range\n          this.zoomImg(range)\n          setTimeout(function() {\n            zoom()\n          }, 60)\n        }\n      }\n      zoom()\n    },\n    // 按钮松开或移开取消缩小\n    endZoomSub(e) {\n      const { scale } = this\n      scale.zoomSubOn = false\n    },\n    zoomChange(e) {\n      this.zoomImg(e.target.value)\n    },\n    // 缩放原图\n    zoomImg(newRange) {\n      const { sourceImgMasking, scale } = this\n      const {\n        maxWidth,\n        maxHeight,\n        minWidth,\n        minHeight,\n        width,\n        height,\n        x,\n        y\n      } = scale\n      const sim = sourceImgMasking\n      // 蒙版宽高\n      const sWidth = sim.width\n      const sHeight = sim.height\n      // 新宽高\n      const nWidth = minWidth + ((maxWidth - minWidth) * newRange) / 100\n      const nHeight = minHeight + ((maxHeight - minHeight) * newRange) / 100\n      // 新坐标(根据蒙版中心点缩放)\n      let nX = sWidth / 2 - (nWidth / width) * (sWidth / 2 - x)\n      let nY = sHeight / 2 - (nHeight / height) * (sHeight / 2 - y)\n      // 判断新坐标是否超过蒙版限制\n      if (nX > 0) {\n        nX = 0\n      }\n      if (nY > 0) {\n        nY = 0\n      }\n      if (nX < sWidth - nWidth) {\n        nX = sWidth - nWidth\n      }\n      if (nY < sHeight - nHeight) {\n        nY = sHeight - nHeight\n      }\n      // 赋值处理\n      scale.x = nX\n      scale.y = nY\n      scale.width = nWidth\n      scale.height = nHeight\n      scale.range = newRange\n      setTimeout(() => {\n        if (scale.range === newRange) {\n          this.createImg()\n        }\n      }, 300)\n    },\n    // 生成需求图片\n    createImg(e) {\n      const {\n        mime,\n        sourceImg,\n        scale: { x, y, width, height, degree },\n        sourceImgMasking: { scale }\n      } = this\n      const canvas = this.$refs.canvas\n      const ctx = canvas.getContext('2d')\n      if (e) {\n        // 取消鼠标按下移动状态\n        this.sourceImgMouseDown.on = false\n      }\n      canvas.width = this.width\n      canvas.height = this.height\n      ctx.clearRect(0, 0, this.width, this.height)\n      // 将透明区域设置为白色底边\n      ctx.fillStyle = '#fff'\n      ctx.fillRect(0, 0, this.width, this.height)\n      ctx.translate(this.width * 0.5, this.height * 0.5)\n      ctx.rotate((Math.PI * degree) / 180)\n      ctx.translate(-this.width * 0.5, -this.height * 0.5)\n      ctx.drawImage(\n        sourceImg,\n        x / scale,\n        y / scale,\n        width / scale,\n        height / scale\n      )\n      this.createImgUrl = canvas.toDataURL(mime)\n    },\n    prepareUpload() {\n      const { url, createImgUrl, field, ki } = this\n      this.$emit('crop-success', createImgUrl, field, ki)\n      if (typeof url === 'string' && url) {\n        this.upload()\n      } else {\n        this.off()\n      }\n    },\n    // 上传图片\n    upload() {\n      const {\n        lang,\n        imgFormat,\n        mime,\n        url,\n        params,\n        field,\n        ki,\n        createImgUrl\n      } = this\n      const fmData = new FormData()\n      fmData.append(\n        field,\n        data2blob(createImgUrl, mime),\n        field + '.' + imgFormat\n      )\n      // 添加其他参数\n      if (typeof params === 'object' && params) {\n        Object.keys(params).forEach(k => {\n          fmData.append(k, params[k])\n        })\n      }\n      // 监听进度回调\n      // const uploadProgress = (event) => {\n      //   if (event.lengthComputable) {\n      //     this.progress = 100 * Math.round(event.loaded) / event.total\n      //   }\n      // }\n      // 上传文件\n      this.reset()\n      this.loading = 1\n      this.setStep(3)\n      request({\n        url,\n        method: 'post',\n        data: fmData\n      })\n        .then(resData => {\n          this.loading = 2\n          this.$emit('crop-upload-success', resData.data)\n        })\n        .catch(err => {\n          if (this.value) {\n            this.loading = 3\n            this.hasError = true\n            this.errorMsg = lang.fail\n            this.$emit('crop-upload-fail', err, field, ki)\n          }\n        })\n    },\n    closeHandler(e) {\n      if (this.value && (e.key === 'Escape' || e.keyCode === 27)) {\n        this.off()\n      }\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\">\n@charset \"UTF-8\";\n@-webkit-keyframes vicp_progress {\n  0% {\n    background-position-y: 0;\n  }\n  100% {\n    background-position-y: 40px;\n  }\n}\n@keyframes vicp_progress {\n  0% {\n    background-position-y: 0;\n  }\n  100% {\n    background-position-y: 40px;\n  }\n}\n@-webkit-keyframes vicp {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0) translatey(-60px);\n    transform: scale(0) translatey(-60px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1) translatey(0);\n    transform: scale(1) translatey(0);\n  }\n}\n@keyframes vicp {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0) translatey(-60px);\n    transform: scale(0) translatey(-60px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1) translatey(0);\n    transform: scale(1) translatey(0);\n  }\n}\n.vue-image-crop-upload {\n  position: fixed;\n  display: block;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  z-index: 10000;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.65);\n  -webkit-tap-highlight-color: transparent;\n  -moz-tap-highlight-color: transparent;\n}\n.vue-image-crop-upload .vicp-wrap {\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  position: fixed;\n  display: block;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  z-index: 10000;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  margin: auto;\n  width: 600px;\n  height: 330px;\n  padding: 25px;\n  background-color: #fff;\n  border-radius: 2px;\n  -webkit-animation: vicp 0.12s ease-in;\n  animation: vicp 0.12s ease-in;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close {\n  position: absolute;\n  right: -30px;\n  top: -30px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4 {\n  position: relative;\n  display: block;\n  width: 30px;\n  height: 30px;\n  cursor: pointer;\n  -webkit-transition: -webkit-transform 0.18s;\n  transition: -webkit-transform 0.18s;\n  transition: transform 0.18s;\n  transition: transform 0.18s, -webkit-transform 0.18s;\n  -webkit-transform: rotate(0);\n  -ms-transform: rotate(0);\n  transform: rotate(0);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after,\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::before {\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  content: \"\";\n  position: absolute;\n  top: 12px;\n  left: 4px;\n  width: 20px;\n  height: 3px;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n  background-color: #fff;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after {\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4:hover {\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 35px;\n  height: 170px;\n  background-color: rgba(0, 0, 0, 0.03);\n  text-align: center;\n  border: 1px dashed rgba(0, 0, 0, 0.08);\n  overflow: hidden;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-icon1 {\n  display: block;\n  margin: 0 auto 6px;\n  width: 42px;\n  height: 42px;\n  overflow: hidden;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step1\n  .vicp-drop-area\n  .vicp-icon1\n  .vicp-icon1-arrow {\n  display: block;\n  margin: 0 auto;\n  width: 0;\n  height: 0;\n  border-bottom: 14.7px solid rgba(0, 0, 0, 0.3);\n  border-left: 14.7px solid transparent;\n  border-right: 14.7px solid transparent;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step1\n  .vicp-drop-area\n  .vicp-icon1\n  .vicp-icon1-body {\n  display: block;\n  width: 12.6px;\n  height: 14.7px;\n  margin: 0 auto;\n  background-color: rgba(0, 0, 0, 0.3);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step1\n  .vicp-drop-area\n  .vicp-icon1\n  .vicp-icon1-bottom {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: block;\n  height: 12.6px;\n  border: 6px solid rgba(0, 0, 0, 0.3);\n  border-top: none;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-hint {\n  display: block;\n  padding: 15px;\n  font-size: 14px;\n  color: #666;\n  line-height: 30px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step1\n  .vicp-drop-area\n  .vicp-no-supported-hint {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: 30px;\n  width: 100%;\n  height: 60px;\n  line-height: 30px;\n  background-color: #eee;\n  text-align: center;\n  color: #666;\n  font-size: 14px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area:hover {\n  cursor: pointer;\n  border-color: rgba(0, 0, 0, 0.1);\n  background-color: rgba(0, 0, 0, 0.05);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop {\n  overflow: hidden;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left {\n  float: left;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-img-container {\n  position: relative;\n  display: block;\n  width: 240px;\n  height: 180px;\n  background-color: #e5e5e0;\n  overflow: hidden;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-img-container\n  .vicp-img {\n  position: absolute;\n  display: block;\n  cursor: move;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-img-container\n  .vicp-img-shade {\n  -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n  position: absolute;\n  background-color: rgba(241, 242, 243, 0.8);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-img-container\n  .vicp-img-shade.vicp-img-shade-1 {\n  top: 0;\n  left: 0;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-img-container\n  .vicp-img-shade.vicp-img-shade-2 {\n  bottom: 0;\n  right: 0;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-rotate {\n  position: relative;\n  width: 240px;\n  height: 18px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-rotate\n  i {\n  display: block;\n  width: 18px;\n  height: 18px;\n  border-radius: 100%;\n  line-height: 18px;\n  text-align: center;\n  font-size: 12px;\n  font-weight: bold;\n  background-color: rgba(0, 0, 0, 0.08);\n  color: #fff;\n  overflow: hidden;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-rotate\n  i:hover {\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  cursor: pointer;\n  background-color: rgba(0, 0, 0, 0.14);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-rotate\n  i:first-child {\n  float: left;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-rotate\n  i:last-child {\n  float: right;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range {\n  position: relative;\n  margin: 30px 0 10px 0;\n  width: 240px;\n  height: 18px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon5,\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon6 {\n  position: absolute;\n  top: 0;\n  width: 18px;\n  height: 18px;\n  border-radius: 100%;\n  background-color: rgba(0, 0, 0, 0.08);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon5:hover,\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon6:hover {\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  cursor: pointer;\n  background-color: rgba(0, 0, 0, 0.14);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon5 {\n  left: 0;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon5::before {\n  position: absolute;\n  content: \"\";\n  display: block;\n  left: 3px;\n  top: 8px;\n  width: 12px;\n  height: 2px;\n  background-color: #fff;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon6 {\n  right: 0;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon6::before {\n  position: absolute;\n  content: \"\";\n  display: block;\n  left: 3px;\n  top: 8px;\n  width: 12px;\n  height: 2px;\n  background-color: #fff;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  .vicp-icon6::after {\n  position: absolute;\n  content: \"\";\n  display: block;\n  top: 3px;\n  left: 8px;\n  width: 2px;\n  height: 12px;\n  background-color: #fff;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"] {\n  display: block;\n  padding-top: 5px;\n  margin: 0 auto;\n  width: 180px;\n  height: 8px;\n  vertical-align: top;\n  background: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  cursor: pointer;\n  /* 滑块\n               ---------------------------------------------------------------*/\n  /* 轨道\n               ---------------------------------------------------------------*/\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:focus {\n  outline: none;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n  -webkit-appearance: none;\n  appearance: none;\n  margin-top: -3px;\n  width: 12px;\n  height: 12px;\n  background-color: #61c091;\n  border-radius: 100%;\n  border: none;\n  -webkit-transition: 0.2s;\n  transition: 0.2s;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-moz-range-thumb {\n  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n  -moz-appearance: none;\n  appearance: none;\n  width: 12px;\n  height: 12px;\n  background-color: #61c091;\n  border-radius: 100%;\n  border: none;\n  -webkit-transition: 0.2s;\n  transition: 0.2s;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-ms-thumb {\n  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);\n  appearance: none;\n  width: 12px;\n  height: 12px;\n  background-color: #61c091;\n  border: none;\n  border-radius: 100%;\n  -webkit-transition: 0.2s;\n  transition: 0.2s;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:active::-moz-range-thumb {\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  width: 14px;\n  height: 14px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:active::-ms-thumb {\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  width: 14px;\n  height: 14px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:active::-webkit-slider-thumb {\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);\n  margin-top: -4px;\n  width: 14px;\n  height: 14px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-webkit-slider-runnable-track {\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  width: 100%;\n  height: 6px;\n  cursor: pointer;\n  border-radius: 2px;\n  border: none;\n  background-color: rgba(68, 170, 119, 0.3);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-moz-range-track {\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  width: 100%;\n  height: 6px;\n  cursor: pointer;\n  border-radius: 2px;\n  border: none;\n  background-color: rgba(68, 170, 119, 0.3);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-ms-track {\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);\n  width: 100%;\n  cursor: pointer;\n  background: transparent;\n  border-color: transparent;\n  color: transparent;\n  height: 6px;\n  border-radius: 2px;\n  border: none;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-ms-fill-lower {\n  background-color: rgba(68, 170, 119, 0.3);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]::-ms-fill-upper {\n  background-color: rgba(68, 170, 119, 0.15);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:focus::-webkit-slider-runnable-track {\n  background-color: rgba(68, 170, 119, 0.5);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:focus::-moz-range-track {\n  background-color: rgba(68, 170, 119, 0.5);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:focus::-ms-fill-lower {\n  background-color: rgba(68, 170, 119, 0.45);\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-left\n  .vicp-range\n  input[type=\"range\"]:focus::-ms-fill-upper {\n  background-color: rgba(68, 170, 119, 0.25);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right {\n  float: right;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-right\n  .vicp-preview {\n  height: 150px;\n  overflow: hidden;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-right\n  .vicp-preview\n  .vicp-preview-item {\n  position: relative;\n  padding: 5px;\n  width: 100px;\n  height: 100px;\n  float: left;\n  margin-right: 16px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-right\n  .vicp-preview\n  .vicp-preview-item\n  span {\n  position: absolute;\n  bottom: -30px;\n  width: 100%;\n  font-size: 14px;\n  color: #bbb;\n  display: block;\n  text-align: center;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-right\n  .vicp-preview\n  .vicp-preview-item\n  img {\n  position: absolute;\n  display: block;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  margin: auto;\n  padding: 3px;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  overflow: hidden;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-right\n  .vicp-preview\n  .vicp-preview-item.vicp-preview-item-circle {\n  margin-right: 0;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step2\n  .vicp-crop\n  .vicp-crop-right\n  .vicp-preview\n  .vicp-preview-item.vicp-preview-item-circle\n  img {\n  border-radius: 100%;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 35px;\n  height: 170px;\n  background-color: rgba(0, 0, 0, 0.03);\n  text-align: center;\n  border: 1px dashed #ddd;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-loading {\n  display: block;\n  padding: 15px;\n  font-size: 16px;\n  color: #999;\n  line-height: 30px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap {\n  margin-top: 12px;\n  background-color: rgba(0, 0, 0, 0.08);\n  border-radius: 3px;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step3\n  .vicp-upload\n  .vicp-progress-wrap\n  .vicp-progress {\n  position: relative;\n  display: block;\n  height: 5px;\n  border-radius: 3px;\n  background-color: #4a7;\n  -webkit-box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);\n  box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);\n  -webkit-transition: width 0.15s linear;\n  transition: width 0.15s linear;\n  background-image: -webkit-linear-gradient(\n    135deg,\n    rgba(255, 255, 255, 0.2) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.2) 50%,\n    rgba(255, 255, 255, 0.2) 75%,\n    transparent 75%,\n    transparent\n  );\n  background-image: linear-gradient(\n    -45deg,\n    rgba(255, 255, 255, 0.2) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.2) 50%,\n    rgba(255, 255, 255, 0.2) 75%,\n    transparent 75%,\n    transparent\n  );\n  background-size: 40px 40px;\n  -webkit-animation: vicp_progress 0.5s linear infinite;\n  animation: vicp_progress 0.5s linear infinite;\n}\n.vue-image-crop-upload\n  .vicp-wrap\n  .vicp-step3\n  .vicp-upload\n  .vicp-progress-wrap\n  .vicp-progress::after {\n  content: \"\";\n  position: absolute;\n  display: block;\n  top: -3px;\n  right: -3px;\n  width: 9px;\n  height: 9px;\n  border: 1px solid rgba(245, 246, 247, 0.7);\n  -webkit-box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);\n  box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);\n  border-radius: 100%;\n  background-color: #4a7;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-error,\n.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-success {\n  height: 100px;\n  line-height: 100px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-operate {\n  position: absolute;\n  right: 20px;\n  bottom: 20px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-operate a {\n  position: relative;\n  float: left;\n  display: block;\n  margin-left: 10px;\n  width: 100px;\n  height: 36px;\n  line-height: 36px;\n  text-align: center;\n  cursor: pointer;\n  font-size: 14px;\n  color: #4a7;\n  border-radius: 2px;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-operate a:hover {\n  background-color: rgba(0, 0, 0, 0.03);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-error,\n.vue-image-crop-upload .vicp-wrap .vicp-success {\n  display: block;\n  font-size: 14px;\n  line-height: 24px;\n  height: 24px;\n  color: #d10;\n  text-align: center;\n  vertical-align: top;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-success {\n  color: #4a7;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon3 {\n  position: relative;\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  top: 4px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon3::after {\n  position: absolute;\n  top: 3px;\n  left: 6px;\n  width: 6px;\n  height: 10px;\n  border-width: 0 2px 2px 0;\n  border-color: #4a7;\n  border-style: solid;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n  content: \"\";\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon2 {\n  position: relative;\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  top: 4px;\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon2::after,\n.vue-image-crop-upload .vicp-wrap .vicp-icon2::before {\n  content: \"\";\n  position: absolute;\n  top: 9px;\n  left: 4px;\n  width: 13px;\n  height: 2px;\n  background-color: #d10;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n.vue-image-crop-upload .vicp-wrap .vicp-icon2::after {\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n.e-ripple {\n  position: absolute;\n  border-radius: 100%;\n  background-color: rgba(0, 0, 0, 0.15);\n  background-clip: padding-box;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-transform: scale(0);\n  -ms-transform: scale(0);\n  transform: scale(0);\n  opacity: 1;\n}\n.e-ripple.z-active {\n  opacity: 0;\n  -webkit-transform: scale(2);\n  -ms-transform: scale(2);\n  transform: scale(2);\n  -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;\n  transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;\n  transition: opacity 1.2s ease-out, transform 0.6s ease-out;\n  transition: opacity 1.2s ease-out, transform 0.6s ease-out,\n    -webkit-transform 0.6s ease-out;\n}\n</style>\n"]}]}