From 00bdec300c3400c8bb1d0a0082481a2b1680660c Mon Sep 17 00:00:00 2001 From: oceangoing <1821478380@qq.com> Date: Tue, 4 Apr 2023 18:42:14 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .codeStyle/eclipse-codestyle.xml | 216 +- README.md | 12 +- db/lenos-mysql5.7.35.sql | 2504 +- db/lenos-oracle.sql | 2504 +- len-activiti/pom.xml | 154 +- .../com/len/actlistener/ActNodeListener.java | 29 +- .../len/actlistener/ActStartNodeListener.java | 26 +- .../len/actlistener/LeaveListenerImpl.java | 24 +- .../com/len/actlistener/ListenUserRole.java | 76 +- .../com/len/config/ActPropertiesConfig.java | 37 +- .../java/com/len/config/ActivitiConfig.java | 37 +- .../len/controller/ActivitiController.java | 145 +- .../len/controller/UserLeaveController.java | 240 +- .../main/java/com/len/entity/ActAssignee.java | 14 +- .../java/com/len/entity/ActDeployment.java | 47 +- .../main/java/com/len/entity/ActModel.java | 74 +- .../main/java/com/len/entity/BaseTask.java | 46 +- .../java/com/len/entity/LeaveOpinion.java | 40 +- .../com/len/entity/ProcessDefinition.java | 76 +- .../src/main/java/com/len/entity/Task.java | 63 +- .../main/java/com/len/entity/UserLeave.java | 69 +- .../java/com/len/mapper/UserLeaveMapper.java | 3 +- .../com/len/service/ActAssigneeService.java | 13 +- .../com/len/service/UserLeaveService.java | 4 +- .../service/impl/ActAssigneeServiceImpl.java | 29 +- .../service/impl/UserLeaveServiceImpl.java | 12 +- .../java/com/len/util/AnimatedGifEncoder.java | 2335 +- .../main/java/com/len/util/AssigneeType.java | 8 +- .../main/java/com/len/util/Base64Utils.java | 14 +- .../activiti/FilterServletOutputStream.java | 1 + .../org/activiti/GenericResponseWrapper.java | 15 +- .../org/activiti/JsonpCallbackFilter.java | 25 +- .../image/HMProcessDiagramGenerator.java | 124 +- .../impl/DefaultProcessDiagramCanvas.java | 2536 +- .../impl/DefaultProcessDiagramGenerator.java | 2110 +- .../org/activiti/rest/ActivitiService.java | 108 +- ...rocessDefinitionDiagramLayoutResource.java | 833 +- ...rocessDefinitionDiagramLayoutResource.java | 31 +- .../ProcessInstanceDiagramLayoutResource.java | 28 +- .../ProcessInstanceHighlightsResource.java | 445 +- .../editor/main/StencilsetRestResource.java | 37 +- .../model/ModelEditorJsonRestResource.java | 88 +- .../editor/model/ModelSaveRestResource.java | 123 +- .../activiti/rest/model/ActivitiProcess.java | 4 +- len-activiti/src/main/resources/bpmn/demo.xml | 350 +- .../resources/ftl/act/activiti/shinePics.html | 150 +- .../resources/ftl/act/deploy/act-node.ftl | 182 +- .../resources/ftl/act/leave/add-leave.ftl | 3 +- .../resources/ftl/act/leave/leaveDetail.ftl | 168 +- .../resources/ftl/act/leave/leaveList.ftl | 3 +- .../ftl/act/leave/update-leave-readonly.ftl | 244 +- .../resources/ftl/act/leave/update-leave.ftl | 269 +- .../ftl/act/task/task-agent-iframe.ftl | 125 +- .../resources/ftl/act/task/task-agent.ftl | 185 +- .../main/resources/ftl/act/task/taskList.ftl | 283 +- .../src/main/resources/ftl/actList.ftl | 21 +- .../src/main/resources/ftl/actModelList.ftl | 32 +- .../resources/mapper/ActAssigneeMapper.xml | 55 +- .../main/resources/mapper/UserLeaveMapper.xml | 64 +- .../src/main/resources/plugin/activiti.js | 4 +- .../resources/properties/activiti.properties | 1 - .../static/diagram-viewer/index.html | 233 +- .../static/diagram-viewer/js/ActivitiRest.js | 144 +- .../static/diagram-viewer/js/ActivityImpl.js | 2 +- .../static/diagram-viewer/js/Color.js | 1187 +- .../diagram-viewer/js/LineBreakMeasurer.js | 528 +- .../static/diagram-viewer/js/Polyline.js | 709 +- .../diagram-viewer/js/ProcessDiagramCanvas.js | 4196 +- .../js/ProcessDiagramGenerator.js | 2151 +- .../js/jquery/jquery.asyncqueue.js | 130 +- .../static/diagram-viewer/js/jquery/jquery.js | 17981 ++++---- .../js/jquery/jquery.progressbar.js | 254 +- .../static/diagram-viewer/js/jstools.js | 40 +- .../diagram-viewer/js/raphael_uncompressed.js | 2913 +- .../static/diagram-viewer/js/textlayout.js | 891 +- .../resources/static/diagram-viewer/style.css | 2 +- .../resources/static/editor-app/app-cfg.js | 2 +- .../main/resources/static/editor-app/app.js | 508 +- .../properties-assignment-controller.js | 257 +- ...perties-condition-expression-controller.js | 20 +- .../properties-default-controllers.js | 54 +- .../properties-event-listeners-controller.js | 219 +- ...operties-execution-listeners-controller.js | 169 +- .../properties-fields-controller.js | 99 +- .../properties-form-properties-controller.js | 167 +- .../properties-in-parameters-controller.js | 48 +- ...operties-message-definitions-controller.js | 13 +- .../properties-message-scope-controller.js | 6 +- .../properties-multiinstance-controller.js | 13 +- .../properties-out-parameters-controller.js | 50 +- ...roperties-sequenceflow-order-controller.js | 30 +- ...roperties-signal-definitions-controller.js | 9 +- .../properties-signal-scope-controller.js | 6 +- .../properties-task-listeners-controller.js | 167 +- .../editor-app/configuration/properties.js | 154 +- .../properties/assignment-candidateGroup.html | 76 +- .../assignment-display-template.html | 6 +- .../properties/assignment-popup-popup.html | 114 +- .../properties/assignment-popup.html | 70 +- .../properties/assignment-write-template.html | 1 - .../properties/boolean-property-template.html | 3 +- ...condition-expression-display-template.html | 2 +- .../condition-expression-popup.html | 47 +- .../condition-expression-write-template.html | 1 - .../default-value-display-template.html | 3 +- .../event-listeners-display-template.html | 1 - .../properties/event-listeners-popup.html | 242 +- .../event-listeners-write-template.html | 1 - .../execution-listeners-display-template.html | 1 - .../properties/execution-listeners-popup.html | 144 +- .../execution-listeners-write-template.html | 1 - .../properties/feedback-popup.html | 22 +- .../properties/fields-display-template.html | 1 - .../properties/fields-popup.html | 111 +- .../properties/fields-write-template.html | 1 - .../form-properties-display-template.html | 1 - .../properties/form-properties-popup.html | 207 +- .../form-properties-write-template.html | 1 - .../in-parameters-display-template.html | 1 - .../properties/in-parameters-popup.html | 118 +- .../in-parameters-write-template.html | 1 - .../properties/message-definitions-popup.html | 40 +- .../message-property-write-template.html | 3 +- ...multiinstance-property-write-template.html | 9 +- .../out-parameters-display-template.html | 1 - .../properties/out-parameters-popup.html | 118 +- .../out-parameters-write-template.html | 1 - .../sequenceflow-order-display-template.html | 1 - .../properties/sequenceflow-order-popup.html | 86 +- .../sequenceflow-order-write-template.html | 1 - .../signal-definitions-display-template.html | 1 - .../properties/signal-definitions-popup.html | 47 +- .../signal-definitions-write-template.html | 1 - .../signal-property-write-template.html | 3 +- .../string-property-write-mode-template.html | 9 +- ...subprocess-reference-display-template.html | 1 - .../subprocess-reference-popup.html | 83 +- .../subprocess-reference-write-template.html | 1 - .../task-listeners-display-template.html | 1 - .../properties/task-listeners-popup.html | 232 +- .../task-listeners-write-template.html | 1 - .../configuration/properties/text-popup.html | 27 +- .../text-property-write-template.html | 1 - .../configuration/toolbar-default-actions.js | 336 +- .../editor-app/configuration/toolbar.js | 224 +- .../editor-app/configuration/url-config.js | 6 +- .../static/editor-app/css/style-common.css | 118 +- .../static/editor-app/css/style-editor.css | 587 +- .../resources/static/editor-app/css/style.css | 378 +- .../static/editor-app/editor-config.js | 10 +- .../static/editor-app/editor-controller.js | 74 +- .../resources/static/editor-app/editor.html | 238 +- .../static/editor-app/editor/css/editor.css | 131 +- .../editor-app/editor/i18n/translation_de.js | 82 +- .../editor/i18n/translation_en_us.js | 94 +- .../editor/i18n/translation_signavio_de.js | 46 +- .../editor/i18n/translation_signavio_en_us.js | 50 +- .../static/editor-app/editor/oryx.debug.js | 35180 ++++++++-------- .../resources/static/editor-app/eventbus.js | 22 +- .../fonts/activiti-admin-webfont.svg | 98 +- .../fonts/glyphicons-halflings-regular.svg | 633 +- .../static/editor-app/header-controller.js | 16 +- .../resources/static/editor-app/i18n/en.json | 541 +- .../angular-mocks_1.2.13/angular-mocks.js | 3824 +- .../angular-resource.js | 1023 +- .../angular-route_1.2.13/angular-route.js | 1508 +- .../angular-sanitize.js | 980 +- .../angular-translate-loader-static-files.js | 48 +- .../angular-translate-storage-cookie.js | 24 +- .../angular-translate.js | 1830 +- .../daterangepicker-bs3.css | 4 +- .../daterangepicker.js | 41 +- .../bootstrap_3.1.1/css/bootstrap-theme.css | 446 +- .../libs/bootstrap_3.1.1/css/bootstrap.css | 7253 ++-- .../fonts/glyphicons-halflings-regular.svg | 633 +- .../libs/bootstrap_3.1.1/js/bootstrap.js | 2749 +- .../libs/es5-shim-15.3.4.5/CONTRIBUTORS.md | 49 +- .../libs/es5-shim-15.3.4.5/README.md | 128 +- .../libs/es5-shim-15.3.4.5/es5-sham.js | 674 +- .../libs/es5-shim-15.3.4.5/es5-shim.js | 1988 +- .../es5-shim-15.3.4.5/tests/helpers/h-kill.js | 8 +- .../tests/helpers/h-matchers.js | 20 +- .../libs/es5-shim-15.3.4.5/tests/index.html | 80 +- .../es5-shim-15.3.4.5/tests/index.min.html | 80 +- .../tests/lib/jasmine-html.js | 326 +- .../es5-shim-15.3.4.5/tests/lib/jasmine.css | 134 +- .../es5-shim-15.3.4.5/tests/lib/jasmine.js | 2740 +- .../libs/es5-shim-15.3.4.5/tests/lib/json2.js | 123 +- .../es5-shim-15.3.4.5/tests/spec/s-array.js | 772 +- .../es5-shim-15.3.4.5/tests/spec/s-date.js | 47 +- .../tests/spec/s-function.js | 108 +- .../es5-shim-15.3.4.5/tests/spec/s-number.js | 2 +- .../es5-shim-15.3.4.5/tests/spec/s-object.js | 32 +- .../es5-shim-15.3.4.5/tests/spec/s-string.js | 12 +- .../libs/jquery.autogrow-textarea.js | 65 +- .../editor-app/libs/jquery_1.11.0/jquery.js | 19035 ++++----- .../editor-app/libs/json3_3.2.6/lib/json3.js | 1679 +- .../libs/pagination/tm.pagination.js | 124 +- .../static/editor-app/libs/path_parser.js | 173 +- .../static/editor-app/libs/prototype-1.5.1.js | 5799 +-- .../partials/root-stencil-item-template.html | 10 +- .../partials/stencil-item-template.html | 20 +- .../resources/static/editor-app/plugins.xml | 106 +- .../editor-app/popups/icon-template.html | 2 +- .../static/editor-app/popups/save-model.html | 74 +- .../editor-app/popups/select-shape.html | 14 +- .../editor-app/popups/unsaved-changes.html | 19 +- .../editor-app/select-shape-controller.js | 533 +- .../static/editor-app/stencil-controller.js | 1198 +- .../static/editor-app/toolbar-controller.js | 186 +- .../src/main/resources/static/modeler.html | 125 +- .../src/main/resources/stencilset.json | 3745 +- .../src/test/java/com/len/AppTest.java | 19 +- .../src/test/java/com/len/JsonTest.java | 46 +- len-blog/pom.xml | 5 +- .../main/java/com/len/config/CorsConfig.java | 8 +- .../com/len/controller/ArticleController.java | 17 +- .../com/len/controller/AuthController.java | 38 +- .../len/controller/BlogAdminController.java | 24 +- .../controller/BlogCategoryController.java | 8 +- .../com/len/controller/TagController.java | 21 +- .../src/main/java/com/len/core/BlogRealm.java | 28 +- .../src/main/java/com/len/core/LenUser.java | 4 +- .../core/MyBasicHttpAuthenticationFilter.java | 16 +- .../len/core/exception/CustomException.java | 3 +- .../java/com/len/entity/ArticleCategory.java | 1 - .../java/com/len/entity/ArticleDetail.java | 8 +- .../main/java/com/len/entity/ArticleList.java | 11 +- .../main/java/com/len/entity/BlogArticle.java | 9 +- .../java/com/len/entity/BlogCategory.java | 11 +- .../com/len/mapper/ArticleCategoryMapper.java | 7 +- .../java/com/len/mapper/ArticleTagMapper.java | 3 +- .../com/len/mapper/BlogArticleMapper.java | 13 +- .../com/len/mapper/BlogCategoryMapper.java | 3 +- .../java/com/len/mapper/BlogTagMapper.java | 3 +- .../src/main/java/com/len/model/Article.java | 7 +- .../java/com/len/model/SimpleArticle.java | 1 - .../src/main/java/com/len/model/VArticle.java | 7 +- .../len/service/ArticleCategoryService.java | 5 +- .../com/len/service/ArticleTagService.java | 4 +- .../com/len/service/BlogArticleService.java | 7 +- .../com/len/service/BlogCategoryService.java | 4 +- .../java/com/len/service/BlogTagService.java | 4 +- .../impl/ArticleCategoryServiceImpl.java | 12 +- .../service/impl/ArticleTagServiceImpl.java | 6 +- .../service/impl/BlogArticleServiceImpl.java | 66 +- .../service/impl/BlogCategoryServiceImpl.java | 7 +- .../len/service/impl/BlogTagServiceImpl.java | 7 +- .../src/main/resources/ftl/articleList.ftl | 18 +- .../mapper/ArticleCategoryMapper.xml | 40 +- .../resources/mapper/ArticleTagMapper.xml | 14 +- .../resources/mapper/BlogArticleMapper.xml | 27 +- .../resources/mapper/BlogCategoryMapper.xml | 28 +- .../main/resources/mapper/BlogTagMapper.xml | 16 +- len-core/pom.xml | 74 +- .../java/com/len/base/BaseController.java | 11 +- .../main/java/com/len/base/BaseEntity.java | 9 +- .../main/java/com/len/base/BaseMapper.java | 3 +- .../main/java/com/len/base/BaseService.java | 5 +- .../main/java/com/len/base/CurrentMenu.java | 1 - .../main/java/com/len/base/CurrentRole.java | 17 +- .../main/java/com/len/base/CurrentUser.java | 22 +- .../com/len/base/handler/ExecuteContext.java | 2 - .../len/base/impl/AbstractServiceImpl.java | 14 +- .../com/len/base/impl/BaseServiceImpl.java | 2 +- .../com/len/cache/CacheManagerFactory.java | 1 - .../cache/impl/config/PropertiesConfig.java | 1 - .../exception/CustomErrorViewResolver.java | 11 +- .../java/com/len/exception/LenException.java | 25 +- .../com/len/exception/ServiceException.java | 5 +- .../java/com/len/freemarker/LenInclude.java | 31 +- .../src/main/java/com/len/menu/LoginType.java | 7 +- .../main/java/com/len/redis/RedisService.java | 9 +- .../java/com/len/socket/WebSocketService.java | 15 +- .../com/len/util/ApplicationContextUtil.java | 11 +- .../src/main/java/com/len/util/BeanUtil.java | 42 +- .../src/main/java/com/len/util/Checkbox.java | 8 +- .../main/java/com/len/util/CommonUtil.java | 37 +- .../main/java/com/len/util/ContextUtil.java | 16 +- .../len/util/CustomUsernamePasswordToken.java | 7 +- .../src/main/java/com/len/util/FileUtil.java | 3 - .../src/main/java/com/len/util/IpUtil.java | 21 +- .../src/main/java/com/len/util/JWTUtil.java | 26 +- .../src/main/java/com/len/util/JdbcUtil.java | 53 +- .../src/main/java/com/len/util/JsonUtil.java | 23 +- .../src/main/java/com/len/util/JwtToken.java | 6 +- .../main/java/com/len/util/LenResponse.java | 17 +- .../main/java/com/len/util/LocalLocale.java | 11 +- .../src/main/java/com/len/util/Md5Util.java | 23 +- .../src/main/java/com/len/util/MsHelper.java | 7 +- .../src/main/java/com/len/util/PageUtil.java | 110 +- .../src/main/java/com/len/util/Principal.java | 4 +- .../src/main/java/com/len/util/ReType.java | 101 +- .../main/java/com/len/util/SpringUtil.java | 49 +- .../src/main/java/com/len/util/TreeUtil.java | 14 +- .../main/java/com/len/util/UploadUtil.java | 39 +- .../java/com/len/util/VerifyCodeUtils.java | 581 +- .../com/len/validator/ValidatorUtils.java | 16 +- .../com/len/validator/group/AddGroup.java | 5 +- .../java/com/len/validator/group/Group.java | 2 +- .../com/len/validator/group/UpdateGroup.java | 2 +- len-core/src/test/java/com/len/AppTest.java | 19 +- len-sys/pom.xml | 52 +- .../com/len/controller/ErrorController.java | 2 +- .../com/len/controller/LogController.java | 16 +- .../com/len/controller/LoginController.java | 12 +- .../com/len/controller/MenuController.java | 4 +- .../com/len/controller/PersonController.java | 20 +- .../com/len/controller/RoleController.java | 26 +- .../com/len/controller/UserController.java | 2 +- .../java/com/len/core/annotation/Log.java | 21 +- .../com/len/core/annotation/LogAspect.java | 18 +- .../len/core/filter/CustomAdvicFilter.java | 11 +- .../com/len/core/filter/PermissionFilter.java | 10 +- .../len/core/filter/VerfityCodeFilter.java | 6 +- .../com/len/core/filter/VerifyCodeUtils.java | 79 +- .../core/init/job/DataSourceJobThread.java | 2 +- .../com/len/core/init/job/JobExecuteImpl.java | 3 +- .../com/len/core/listener/LenospInit.java | 7 +- .../core/quartz/CustomQuartz/DataSchdule.java | 23 +- .../core/quartz/CustomQuartz/JobDemo1.java | 57 +- .../core/quartz/CustomQuartz/JobDemo2.java | 46 +- .../core/quartz/CustomQuartz/JobDemo3.java | 42 +- .../core/quartz/CustomQuartz/JobDemo4.java | 42 +- .../core/quartz/CustomQuartz/JobDemo5.java | 42 +- .../java/com/len/core/quartz/JobTask.java | 23 +- .../com/len/core/quartz/MyJobFactory.java | 3 - .../len/core/quartz/MySchedulerListener.java | 1 - .../java/com/len/core/shiro/LoginRealm.java | 24 +- .../java/com/len/core/shiro/Principal.java | 8 +- .../shiro/RetryLimitCredentialsMatcher.java | 12 +- .../src/main/java/com/len/entity/SysDept.java | 2 - .../src/main/java/com/len/entity/SysJob.java | 5 +- .../src/main/java/com/len/entity/SysLog.java | 5 +- .../src/main/java/com/len/entity/SysMenu.java | 13 +- .../src/main/java/com/len/entity/SysRole.java | 5 +- .../main/java/com/len/entity/SysRoleMenu.java | 1 + .../main/java/com/len/entity/SysRoleUser.java | 1 + .../src/main/java/com/len/entity/SysUser.java | 7 +- .../java/com/len/entity/SysUserDepart.java | 1 + .../java/com/len/mapper/SysDeptMapper.java | 3 +- .../java/com/len/mapper/SysLogMapper.java | 3 +- .../java/com/len/mapper/SysMenuMapper.java | 2 - .../java/com/len/mapper/SysRoleMapper.java | 3 +- .../com/len/mapper/SysRoleMenuMapper.java | 4 +- .../com/len/mapper/SysRoleUserMapper.java | 4 +- .../java/com/len/service/DeptService.java | 3 +- .../java/com/len/service/EmployeeService.java | 3 +- .../main/java/com/len/service/JobService.java | 5 +- .../java/com/len/service/MenuService.java | 1 - .../java/com/len/service/RoleMenuService.java | 5 +- .../java/com/len/service/RoleService.java | 2 - .../java/com/len/service/RoleUserService.java | 4 +- .../java/com/len/service/SysUserService.java | 8 +- .../service/impl/DashboardServiceImpl.java | 2 +- .../com/len/service/impl/DeptServiceImpl.java | 3 +- .../com/len/service/impl/JobServiceImpl.java | 7 +- .../com/len/service/impl/MenuServiceImpl.java | 44 +- .../len/service/impl/RoleMenuServiceImpl.java | 12 +- .../com/len/service/impl/RoleServiceImpl.java | 9 +- .../len/service/impl/SysUserServiceImpl.java | 7 +- len-sys/src/main/resources/ftl/login.ftl | 101 +- len-sys/src/main/resources/ftl/login2.html | 43 +- .../resources/ftl/system/base/blockInput.ftl | 2 +- .../main/resources/ftl/system/base/readme.md | 16 +- .../main/resources/ftl/system/job/jobList.ftl | 21 +- .../main/resources/ftl/system/job/update.ftl | 189 +- .../main/resources/ftl/system/log/logList.ftl | 2 +- .../main/resources/ftl/system/menu/add.ftl | 5 +- .../resources/ftl/system/menu/menuList.ftl | 2 +- .../main/resources/ftl/system/menu/update.ftl | 4 +- .../main/resources/ftl/system/role/add.ftl | 2 +- .../resources/ftl/system/role/roleList.ftl | 3 - .../main/resources/ftl/system/role/update.ftl | 2 +- .../main/resources/ftl/system/user/add.ftl | 14 +- .../ftl/system/user/resetPassword.ftl | 155 +- .../resources/ftl/system/user/userList.ftl | 4 +- .../resources/i18n/message_en_US.properties | 5 +- .../resources/i18n/message_zh_CN.properties | 3 - .../main/resources/mapper/SysDeptMapper.xml | 20 +- .../resources/mapper/SysEmployeeMapper.xml | 42 +- .../main/resources/mapper/SysJobMapper.xml | 44 +- .../main/resources/mapper/SysLogMapper.xml | 36 +- .../main/resources/mapper/SysMenuMapper.xml | 60 +- .../main/resources/mapper/SysRoleMapper.xml | 36 +- .../resources/mapper/SysRoleMenuMapper.xml | 44 +- .../resources/mapper/SysRoleUserMapper.xml | 44 +- .../main/resources/mapper/SysUserMapper.xml | 260 +- .../main/resources/plugin/build/css/admin.css | 2 +- .../plugin/build/css/themes/default.css | 3 +- .../main/resources/plugin/build/js/admin.js | 1 - .../src/main/resources/plugin/build/js/app.js | 34 +- .../resources/plugin/build/js/kitconfig.js | 2 +- .../main/resources/plugin/build/js/loader.js | 12 +- .../main/resources/plugin/build/js/message.js | 14 +- .../resources/plugin/build/js/nprogress.js | 74 +- .../resources/plugin/build/js/onelevel.js | 22 +- .../main/resources/plugin/build/js/pjax.js | 41 +- .../src/main/resources/plugin/build/js/spa.js | 12 +- .../resources/plugin/build/js/treeselect.js | 385 +- .../main/resources/plugin/build/js/utils.js | 66 +- .../main/resources/plugin/build/js/ztree.js | 572 +- .../src/main/resources/plugin/html/icon.html | 13 +- .../resources/plugin/layui/font/iconfont.svg | 950 +- .../plugin/layui/modules/treeTable.js | 10 +- .../plugins/font-awesome/css/font-awesome.css | 2290 +- .../fonts/fontawesome-webfont.svg | 4045 +- .../plugin/plugins/sideshow/css/component.css | 126 +- .../plugin/plugins/sideshow/css/demo.css | 218 +- .../fonts/codropsicons/codropsicons.svg | 43 +- .../sideshow/fonts/codropsicons/license.txt | 8 +- .../plugin/plugins/sideshow/js/demo-1.js | 89 +- .../plugin/plugins/sideshow/js/demo-2.js | 34 +- .../plugin/plugins/sideshow/js/demo-3.js | 82 +- .../plugin/plugins/sideshow/js/demo-4.js | 38 +- .../plugin/plugins/sideshow/js/rAF.js | 18 +- .../plugin/plugins/sortable/Sortable.js | 6781 +-- .../src/main/resources/plugin/tools/moment.js | 1177 +- .../resources/plugin/x-admin/css/font.css | 26 +- .../resources/plugin/x-admin/css/xadmin.css | 601 +- .../plugin/x-admin/fonts/iconfont.svg | 932 +- .../plugin/ztree/css/awesomeStyle/awesome.css | 547 +- .../ztree/css/awesomeStyle/awesome.less | 547 +- .../ztree/css/metroStyle/metroStyle.css | 441 +- .../ztree/css/zTreeStyle/zTreeStyle.css | 428 +- .../plugin/ztree/js/jquery.ztree.all.js | 3626 +- .../plugin/ztree/js/jquery.ztree.core.js | 26 +- .../plugin/ztree/js/jquery.ztree.excheck.js | 1198 +- .../plugin/ztree/js/jquery.ztree.exedit.js | 2365 +- .../plugin/ztree/js/jquery.ztree.exhide.js | 645 +- len-sys/src/test/java/com/len/AppTest.java | 19 +- len-web/pom.xml | 136 +- .../src/main/java/com/len/LenApplication.java | 10 +- .../java/com/len/config/BeanFactoryImpl.java | 12 +- .../main/java/com/len/config/BeanName.java | 9 +- .../java/com/len/config/FreeMarkerConfig.java | 101 +- .../com/len/config/FreemarkerShiroConfig.java | 4 +- .../main/java/com/len/config/LenFilter.java | 29 +- .../main/java/com/len/config/LogConfig.java | 10 +- .../com/len/config/MyBatisPlusConfig.java | 7 +- .../config/MyModularRealmAuthenticator.java | 24 +- .../java/com/len/config/PageHelperConfig.java | 9 +- .../main/java/com/len/config/ShiroConfig.java | 66 +- .../com/len/config/ShiroSessionManager.java | 11 +- .../java/com/len/config/SwaggerConfig.java | 20 +- .../com/len/config/TransactionalConfig.java | 11 +- .../java/com/len/config/WebMvcConfig.java | 17 +- .../java/com/len/config/ZBeanFactory.java | 17 +- len-web/src/main/java/test/ActivitiDemo.java | 574 +- .../src/main/java/test/ActivitiGateWay.java | 270 +- .../src/main/java/test/ActivitiVariable.java | 189 +- len-web/src/main/java/test/BlogTest.java | 28 +- len-web/src/main/java/test/BootTest.java | 9 +- len-web/src/main/java/test/MybatisApp.java | 10 +- .../main/len-web\350\257\264\346\230\216.md" | 107 +- .../main/resources/application-mysql-dev.yml | 62 +- .../main/resources/application-oracle-dev.yml | 68 +- .../src/main/resources/application-prod.yml | 74 +- .../resources/application-sqlserver-dev.yml | 64 +- .../src/main/resources/application-test.yml | 70 +- .../resources/auto-config/mybatis-config.xml | 90 +- .../src/main/resources/ehcache/ehcache.xml | 36 +- len-web/src/main/resources/len.properties | 4 - len-web/src/main/resources/log4j.properties | 2 +- len-web/src/main/resources/quartz.properties | 24 +- pom.xml | 898 +- 466 files changed, 97651 insertions(+), 90187 deletions(-) diff --git a/.codeStyle/eclipse-codestyle.xml b/.codeStyle/eclipse-codestyle.xml index b620a30..3163c13 100644 --- a/.codeStyle/eclipse-codestyle.xml +++ b/.codeStyle/eclipse-codestyle.xml @@ -11,71 +11,71 @@ 由于IDEA只有一个SPACE_BEFORE_COMMA选项,所以统一设置 insert_space_before_comma 为 do not insert --> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> @@ -95,7 +95,7 @@ + value="do not insert"/> @@ -104,7 +104,7 @@ 程序导入的时候强制将SPACE_BEFORE_SEMICOLON设置为false --> + value="do not insert"/> @@ -114,12 +114,12 @@ + value="do not insert"/> + id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" + value="do not insert"/> + value="do not insert"/> @@ -131,46 +131,46 @@ + id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="insert"/> + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" + value="do not insert"/> + value="do not insert"/> + id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="insert"/> @@ -181,123 +181,123 @@ + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> @@ -308,7 +308,7 @@ + value="do not insert"/> @@ -327,7 +327,7 @@ + value="do not insert"/> @@ -342,13 +342,13 @@ + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> @@ -357,9 +357,9 @@ + value="do not insert"/> + value="do not insert"/> @@ -373,23 +373,23 @@ + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> + value="do not insert"/> @@ -417,7 +417,7 @@ + value="false"/> @@ -482,16 +482,16 @@ + value="true"/> + value="true"/> + value="true"/> @@ -527,7 +527,7 @@ + value="16"/> @@ -536,7 +536,7 @@ + value="common_lines"/> @@ -578,7 +578,7 @@ + value="end_of_line"/> diff --git a/README.md b/README.md index ef2fa90..623d543 100644 --- a/README.md +++ b/README.md @@ -18,27 +18,37 @@

# 简介 + lenosp是一个基于spring boot的脚手架,并提供完善社区文档教程,中小企业可以用来快速迭代。 + # 体验 + [http://42.192.219.164:8081/login](http://42.192.219.164:8081/login) 体验账户:admin,所有账户密码:123456 测试环境,所有业务增删改不会持久化,默认显示成功 # 架构 - # 模块 + ![输入图片说明](image/moduleimage.png) + # 里程碑 + 完善当前单体应用,趋于稳定,可供中小企业快速迭代。 # 功能 + xxx # 关于我们 + 本项目是郑州程序员组织成员开发迭代 + # 加入开源组织 + ![输入图片说明](image/image.png) # 社区 + 文档地址:https://www.kancloud.cn/zhuxm/zzdevelop/3141950 \ No newline at end of file diff --git a/db/lenos-mysql5.7.35.sql b/db/lenos-mysql5.7.35.sql index 6f19d94..ecb6519 100644 --- a/db/lenos-mysql5.7.35.sql +++ b/db/lenos-mysql5.7.35.sql @@ -15,1362 +15,1992 @@ */ SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; +SET +FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for act_assignee -- ---------------------------- DROP TABLE IF EXISTS `act_assignee`; -CREATE TABLE `act_assignee` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `sid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '节点id', - `assignee` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '办理人', - `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '候选组(角色)', - `assignee_type` int(11) NOT NULL COMMENT '办理人类型1办理人2候选人3组', - `activti_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点名称', - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `act_assignee` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `sid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '节点id', + `assignee` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '办理人', + `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '候选组(角色)', + `assignee_type` int(11) NOT NULL COMMENT '办理人类型1办理人2候选人3组', + `activti_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点名称', + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_evt_log -- ---------------------------- DROP TABLE IF EXISTS `act_evt_log`; -CREATE TABLE `act_evt_log` ( - `LOG_NR_` bigint(20) NOT NULL AUTO_INCREMENT, - `TYPE_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), - `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DATA_` longblob NULL, - `LOCK_OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, - `IS_PROCESSED_` tinyint(4) NULL DEFAULT 0, - PRIMARY KEY (`LOG_NR_`) USING BTREE +CREATE TABLE `act_evt_log` +( + `LOG_NR_` bigint(20) NOT NULL AUTO_INCREMENT, + `TYPE_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP (3), + `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DATA_` longblob NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, + `IS_PROCESSED_` tinyint(4) NULL DEFAULT 0, + PRIMARY KEY (`LOG_NR_`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_ge_bytearray -- ---------------------------- DROP TABLE IF EXISTS `act_ge_bytearray`; -CREATE TABLE `act_ge_bytearray` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `BYTES_` longblob NULL, - `GENERATED_` tinyint(4) NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_FK_BYTEARR_DEPL`(`DEPLOYMENT_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_ge_bytearray` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `BYTES_` longblob NULL, + `GENERATED_` tinyint(4) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_FK_BYTEARR_DEPL`(`DEPLOYMENT_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_ge_bytearray -- ---------------------------- -INSERT INTO `act_ge_bytearray` VALUES ('142518', 20, 'source', NULL, 0x7B227265736F757263654964223A22313432353137222C2270726F70657274696573223A7B2270726F636573735F6964223A2270726F636573735F6C65617665222C226E616D65223A22E8AFB7E58187E6B581E7A88B222C22646F63756D656E746174696F6E223A22222C2270726F636573735F617574686F72223A22222C2270726F636573735F76657273696F6E223A22222C2270726F636573735F6E616D657370616365223A22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566222C22657865637574696F6E6C697374656E657273223A22222C226576656E746C697374656E657273223A22222C227369676E616C646566696E6974696F6E73223A22222C226D657373616765646566696E6974696F6E73223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D227D2C227374656E63696C223A7B226964223A2242504D4E4469616772616D227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D41343530344644322D303230342D343246352D393036312D344134323938324442343938222C2270726F70657274696573223A7B226F766572726964656964223A227374617274222C226E616D65223A227374617274222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A36302C2279223A3235382E373033373033393938313833387D2C2275707065724C656674223A7B2278223A33302C2279223A3232382E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834222C2270726F70657274696573223A7B226F766572726964656964223A227573657231222C226E616D65223A22E7BB8FE79086E5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A7B2261737369676E6D656E74223A7B2261737369676E6565223A223062373632356665646161303565383566323832343836653163396339316239222C2263616E64696461746547726F757073223A5B7B2276616C7565223A226533343665393633363834383463386661376632313763653535306130313836222C226E616D6556616C7565223A22E589AFE7BB8FE79086222C222424686173684B6579223A2231494C227D5D7D7D2C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3231392E39393939393939393939393939342C2279223A3238332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3132302C2279223A3230332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3131392E31393533313234393939393939372C2279223A3234332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A36302E363438343337352C2279223A3234332E373033373033393938313833387D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31342E3939393939393939393939393939367D2C7B2278223A34392E39393939393939393939393939372C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D7D2C7B227265736F757263654964223A227369642D37363845453443392D333233432D343744422D423438302D344230323746333136433835222C2270726F70657274696573223A7B226F766572726964656964223A227573657232222C226E616D65223A22E4BABAE4BA8BE5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A7B2261737369676E6D656E74223A7B2261737369676E6565223A223938623035316230333638316465363032383939336135643134616339336362227D7D2C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3631302E3039303838323633363434362C2279223A3238332E373033373033313034313134327D2C2275707065724C656674223A7B2278223A3531302E30393038383236333634343631372C2279223A3230332E37303337303331303431313432337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935227D2C7B227265736F757263654964223A227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3735352E353435343431333138323233312C2279223A3236332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3731352E353435343431333138323233312C2279223A3232332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3731352E313133303933303035303039392C2279223A3234342E31343432323136333535323135377D2C2275707065724C656674223A7B2278223A3631302E3537383039383232383233392C2279223A3234332E383437313639393931393532327D7D2C22646F636B657273223A5B7B2278223A34392E39393939393939393939393939352C2279223A33392E3939393939393939393939393938367D2C7B2278223A32302E352C2279223A32302E357D5D2C22746172676574223A7B227265736F757263654964223A227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831227D7D2C7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334227D2C7B227265736F757263654964223A227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3431302E353435343431333138323233312C2279223A3236332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3337302E353435343431333138323233312C2279223A3232332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731222C2270726F70657274696573223A7B226F766572726964656964223A2275736572222C226E616D65223A22E8B083E695B4222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332227D2C7B227265736F757263654964223A227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3434302E35343534343133313832323332352C2279223A3434382E373033373036363437323739327D2C2275707065724C656674223A7B2278223A3334302E3534353434313331383232332C2279223A3336382E373033373036363437323739327D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345222C2270726F70657274696573223A7B226F766572726964656964223A22656E64222C226E616D65223A22656E64222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3930382E353435343431333138323233322C2279223A3235372E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3838302E353435343431333138323233322C2279223A3232392E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3837392E3932343335323534333835352C2279223A3234342E313431393535363839373437337D2C2275707065724C656674223A7B2278223A3735352E363139363535303932353931322C2279223A3234332E37343938323733303636323033327D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E3530303030303030303030303030347D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D7D2C7B227265736F757263654964223A227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3733362E303435343431333138323233312C2279223A3430382E373033373036363437323739327D2C2275707065724C656674223A7B2278223A3434312E313234353432383830373233312C2279223A3236342E343831303438303538363234377D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E3530303030303030303030303030347D2C7B2278223A3733362E303435343431333138323233312C2279223A3430382E373033373036363437323739327D2C7B2278223A39392C2279223A34302E3030303030303030303030303033367D5D2C22746172676574223A7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D7D2C7B227265736F757263654964223A227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E9878DE696B0E794B3E8AFB7222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3334302E3534353434313331383232332C2279223A3430382E373033373036363437323739337D2C2275707065724C656674223A7B2278223A3136392E39393939393939393939393939372C2279223A3238342E363634363432313339373631367D7D2C22646F636B657273223A5B7B2278223A302E393939393939393939393939393939392C2279223A34302E30303030303030303030303030397D2C7B2278223A3136392E39393939393939393939393939372C2279223A3430382E373033373036363437323739337D2C7B2278223A34392E39393939393939393939393939372C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D7D2C7B227265736F757263654964223A227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732227D2C7B227265736F757263654964223A227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3330342E39393939393939393939393939342C2279223A3236332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3236342E39393939393939393939393939342C2279223A3232332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E58F96E6B688E8AFB7E58187222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3839342E353435343431333138323233322C2279223A3439342E373033373036363437323739327D2C2275707065724C656674223A7B2278223A3339302E35343534343133313832323331342C2279223A3235382E343330323636363433303536327D7D2C22646F636B657273223A5B7B2278223A35302E3030303030303030303030303131342C2279223A37397D2C7B2278223A3339302E35343534343133313832323331342C2279223A3439342E373033373036363437323739327D2C7B2278223A3839342E353435343431333138323233322C2279223A3439342E373033373036363437323739327D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D7D2C7B227265736F757263654964223A227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3236342E363438343436383730303037352C2279223A3234342E313133343337353334343137367D2C2275707065724C656674223A7B2278223A3232302E36323838393638373939393234352C2279223A3234332E39323238373637313139357D7D2C22646F636B657273223A5B7B2278223A34392E3939393939393939393939393938362C2279223A33392E3939393939393939393939393938367D2C7B2278223A32302E352C2279223A32302E357D5D2C22746172676574223A7B227265736F757263654964223A227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733227D7D2C7B227265736F757263654964223A227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3339302E353435343431333138323233312C2279223A3232332E34303037363130373131373438387D2C2275707065724C656674223A7B2278223A3339302E353435343431333138323233312C2279223A3137322E363031353334383239363530357D7D2C22646F636B657273223A5B7B2278223A3230352E38303433363431303339333632382C2279223A3137312E303333383031323134313530327D2C7B2278223A32302C2279223A32307D5D2C22746172676574223A7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D7D2C7B227265736F757263654964223A227369642D30353145353938322D454646442D343337372D423137392D333730343841323346433232222C2270726F70657274696573223A7B226F766572726964656964223A226368696C64222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C2269737472616E73616374696F6E223A2266616C7365227D2C227374656E63696C223A7B226964223A2253756250726F63657373227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D39443541314632382D393042372D343644322D414637462D353446464637383631343146222C2270726F70657274696573223A7B226F766572726964656964223A22737374617274222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A34382E3531383531383436343031303338342C2279223A3130312E30353130343034353136333330337D2C2275707065724C656674223A7B2278223A31382E3531383531383436343031303338342C2279223A37312E30353130343034353136333330337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D32333041443633362D423038332D344132412D383446342D464445353430464443314333222C2270726F70657274696573223A7B226F766572726964656964223A22616C6C6D616E61676572222C226E616D65223A22E680BBE7BB8FE79086E5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A7B2261737369676E6D656E74223A7B2261737369676E6565223A226438313861633661383663663161363464323138346266303639396436376138227D7D2C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3138392E39393939393939393939393939372C2279223A3132362E30353130343034353136333330337D2C2275707065724C656674223A7B2278223A38392E39393939393939393939393939372C2279223A34362E30353130343034353136333330337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635227D2C7B227265736F757263654964223A227369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3237352C2279223A3130362E30353130343034353136333330337D2C2275707065724C656674223A7B2278223A3233342E39393939393939393939393939372C2279223A36362E30353130343034353136333330337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3334382C2279223A3130302E30353130343034353136333330347D2C2275707065724C656674223A7B2278223A3332302C2279223A37322E30353130343034353136333330347D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3236392C2279223A3136337D2C2275707065724C656674223A7B2278223A3234312C2279223A3133357D7D2C22646F636B657273223A5B5D7D5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3539362E333439383035343232313539342C2279223A3137322E31303230383039303332363630387D2C2275707065724C656674223A7B2278223A3138342E37343130373732313432383638362C2279223A312E34323130383534373135323032303034652D31347D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D32333041443633362D423038332D344132412D383446342D464445353430464443314333227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3237332E38323738383237343432393137342C2279223A38362E30353130343034353136333330347D2C2275707065724C656674223A7B2278223A3233342E323333353534303139323935382C2279223A38362E30353130343034353136333330347D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31357D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D32333041443633362D423038332D344132412D383446342D464445353430464443314333227D7D2C7B227265736F757263654964223A227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D37363845453443392D333233432D343744422D423438302D344230323746333136433835227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3530392E35363538353533373434373936372C2279223A3234342E3134363035383632333436327D2C2275707065724C656674223A7B2278223A3431302E3533343738323038383137322C2279223A3234332E383533313435353137393831367D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E357D2C7B2278223A34392E39393939393939393939393939352C2279223A33392E3939393939393939393939393938367D5D2C22746172676574223A7B227265736F757263654964223A227369642D37363845453443392D333233432D343744422D423438302D344230323746333136433835227D7D2C7B227265736F757263654964223A227369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3530342E32343839303939393834363832362C2279223A38362E34323734383336353430383030367D2C2275707065724C656674223A7B2278223A3435392E36333934393434333031303534362C2279223A38362E31343333343732343931383630327D7D2C22646F636B657273223A5B7B2278223A32302E3530303030303030303030303031342C2279223A32302E357D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341227D7D2C7B227265736F757263654964223A227369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3434302E30383436333334333233383532362C2279223A3133342E333339333232313439353833337D2C2275707065724C656674223A7B2278223A3433392E38353834353834393631383834362C2279223A3130362E303930353433323636373635397D7D2C22646F636B657273223A5B7B2278223A32302E3530303030303030303030303031342C2279223A32302E357D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244227D7D2C7B227265736F757263654964223A227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3339302E39383338303830363836333436332C2279223A3336372E38363338363638373439393039357D2C2275707065724C656674223A7B2278223A3339302E36363935373435363738313135342C2279223A3236342E34383130343334333933333531377D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E3530303030303030303030303030347D2C7B2278223A35302E3030303030303030303030303131342C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D7D2C7B227265736F757263654964223A227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3337302E363730303939393039323233372C2279223A3234342E31303931303034353732383030387D2C2275707065724C656674223A7B2278223A3330352E33373533343134303839393932352C2279223A3234332E37393833303735333930383735357D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E357D2C7B2278223A32302C2279223A32307D5D2C22746172676574223A7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D7D2C7B227265736F757263654964223A227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D30353145353938322D454646442D343337372D423137392D333730343841323346433232227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3238342E323935353338353539393932382C2279223A3232342E34393134393033323031333735337D2C2275707065724C656674223A7B2278223A3139332E35383236343937343733333034362C2279223A3137322E313532383934353937323330387D7D2C22646F636B657273223A5B7B2278223A32302E31363137303636333435343032382C2279223A312E323837353339313237343833333730337D2C7B2278223A362E3530383031393933353239333633372C2279223A3137302E38303635303532363235393035357D5D2C22746172676574223A7B227265736F757263654964223A227369642D30353145353938322D454646442D343337372D423137392D333730343841323346433232227D7D2C7B227265736F757263654964223A227369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3431392E333839353234303834323934342C2279223A38362E34363037373339383738363638347D2C2275707065724C656674223A7B2278223A3337352E333639393734303934323739332C2279223A38362E32373032313331363533393932347D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A32302E3530303030303030303030303031342C2279223A32302E357D5D2C22746172676574223A7B227265736F757263654964223A227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641227D7D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A313230302C2279223A313035307D2C2275707065724C656674223A7B2278223A302C2279223A307D7D2C227374656E63696C736574223A7B2275726C223A227374656E63696C736574732F62706D6E322E302F62706D6E322E302E6A736F6E222C226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C227373657874656E73696F6E73223A5B5D7D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('142519', 14, 'source-extra', NULL, 0x89504E470D0A1A0A0000000D49484452000003BF00000221080600000086FB0D1D000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000000467414D410000B18E7CFB5193000000017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA793000000097048597300000EC400000EC401952B0E1B000020004944415478DAECDD097854D5F9C7F17726FB4A080989088208B20B620444145454A854AD08844544C5B58A50A46E55B0EE555BFBB7D52A5A5141826241C50A8A821659944D0908B21804214080908410B2FECF7B3213424820099964327C3FCF739FC9EC933377EEBDBF7B368700A7A0952B575E565454342E3737B77B767676A3C2C24207A50200288FC3E190D0D0D08C9090901F9C4EE7DF3B77EE3C935201807AB83DA708702AF9F2CB2F3B040505CD34C1F7EC264D9A38A3A2A2A4418306620E66281C0040B90A0B0B25333353D2D3D365E7CE9D66175294626E4EECD9B3E7B7940E00107E01AFF3BFFFFDEFB70505051F9C79E69901CD9A35B367F20100A8AA6DDBB6C9962D5B0A222222EE3CEFBCF326532200503FF85104385582AFB978AF73E7CE41717171045F0040B5698BA1989818A709C1FDEFBCF3CE6D93274F5E4DA90000E117A873F3E6CD6B6B2E3EEBD2A54BA81EB0000070B2020303253A3ADAB975EBD67EC3860DFB70EAD4A9BB291500F06E7474C4A9708032F9ACB3CE0A22F802006A527878B898FD4BB0F10EA50100845FA04E7DF6D9675D9C4EE739CD9A35F3A7340000354DC790F0F3F36BF5F9E79FF7A0340080F00BD41987C331F0F4D34F2FA48F2F00C0539A366D1AEC743A8750120040F805EA8C9F9F5FBFE8E8E8284A0200E029515151FE26FCF6A7240080F00BD49982828273E8EB0B00F0A4888808C9CFCF6F4D490000E117A84B814E27AB3900C0830753C5FB1976360040F8050000000080F00B0000000000E1170000000000C22F0000000000845F0000000000E1170000000000C22F0000000000845F000000000008BF0000000000107E010000000020FC020000000040F8050000000080F00B0000000020FC020000000040F8050000000080F00B0000000000E1170000000000C22F0000000000845F000000000008BF0000000000107E0100000000845F000000000008BF0000000000107E010000000020FC020000000040F8050000000080F00B0000000000E1170000000000C22F0000000080F00B0000000000E1170000000000C22F0000000000845F000000000008BF0000000000107E0100000000A80C7F8A00404D397CF8B07CB7E53BC94ECB16E761CEADD5967CFF7C713472C8392DCE91D3224EA34000000008BF003C65EFBEBDB2227985EC8DD92B07CE3A2087430E5328B52430275022D32365F5CAD5B2AFCD3EE910DF814201000020FC02A8695AE3BB3A79B56C3D73AB6487675320B52C373857D2E2D3242B324B6483485C789CC484C75030000000A5D02E11C0494BD99A227B62F6107CEB584E688EEC6BBC4F92372553180000006550F30BE0A4EDDABD4BD25BA69FF07121BB43242C254CFC33FCA5C8AF4872E27224F3EC4C29F42FA4106B48465486C4FE144B410000009441CD2F8093969B937BC23EBE213B43A4C10F0D24E04080388A1CE2CC774AE8AFA1D2E8BB46E22870508835F55D04E78A338F4D3B000000E117409D08DF126E436F59FE59FE12921A420101000080F00BA09E6F68729DE29F5D712F8B808C000A09000000845F00F5DB099B35D3E517000000845F000000000008BF0000000000107E01D4AD82A00229721455787F6120ED9E01000040F805E0035B9A43A71D2AF72E3BDF6FE31CCA08000000845F00F5DF810E07A420A4E098DB33DA66485E833C0A08000000845F00BEEB8423410300000035C09F2200E06901990112B93E52FC0EF91D735FE44F91E2CC734A668B4C4EC701000080F00BA0FE711439246C6B98846F09AFB886B750247C73B804EF0A9603ED0E486E542E0507000000C22F80FA21E0408034D8D0C05E566A6394E52FD1CBA325FB8C6CC96895412D3000000008BF00BC3FF8C62C8FB1B5BA55E1AE29F6CFF6977D5DF65190000000A831D4AD00A871B68973E1493E1F3849D9D9D9140200002841CD2F801A971B9D2B3B2FDF4941A0CE7CFFFDF7F2CC33CFC8030F3C209D3B77A64000000035BF0000DFB27CF972F9BFFFFB3FE9DFBFBFFCF39FFF9475EBD651280000809A5F0080EFF8EAABAF64DAB4693266CC185BE3DBBE7D7B79E18517E4E1871F96962D5B7AF4BDD7AF5F2FFEFEFE76294F7A7ABAA4A6A64ABF7EFDCABDFF89279E90112346488B162D243F3FBFC2D7010000845F00C0296CD1A24536F86A536777D04D484890912347DA26D07FFEF39F253E3EDE63EFBF74E9521B70BB74E952729BBE5F70707049385EB162C551E177E1C285F6322B2B4BC2C3C3ED750DC89B376F96DB6FBFDD7E7E000040F80500C0FAF0C30F65EEDCB947055FB7DEBD7B8B9F9F9F3CF5D453F2C8238F486C6CACC73E8706DF3E7DFA9404DAB4B43449494991EDDBB74BD3A64D252C2CECA8C7BB1F7BE79D77CA2BAFBC229B366DB24DB5274F9E2C39393925CF030000845FC0EBA4E6EE93CFD3BF936F337E941FB3B7CA9EBC74C92ECC91206780C4044449FBD0E6D235BC8D0C88EE29F181D11418709266CD9A25F3E7CF978913275658B3DBAB572FC9CBCB93C71F7FDCE301D85D9B5B9ABB29B39B06DB3973E6484C4C8CBD7EE18517DAE769D8BDEAAAABECDF5A53FCEBAFBFDAFF8B26D00000107E01AFF1F9FEE53275F767F2EBE13DD23DB29D5CD5E80219D774B00DB8A1CE601B80F7E765CA4F87B6C9E28C6419B1FE717BDFA0D84BE49A46BD2840A01A66CE9C295F7FFDB54C9A34E98481F6924B2E916DDBB6D900FCE4934F4A444484473E93D6FE6A187707DBD5AB57CBB5D75E6B9B33BB6953E8EBAFBF5E9292926C736777EDAE865C0DC09F7CF289ADFD8D8A8AF268F9EDDBB7CF8E8CAD8B968D5ED760AE9F4FCBA759B366D2B1634739F7DC733DDA641C0000C22F500F68D87D74EB1BB6C6F7BEA689727183CEE2E7F03BE6711A80438382E5F4A058B924AAAB3C7CC648F9FAC0F7F2E2AFEF49D2EEF9F24CCB3BA4791007974065BDF6DA6BB69970556A72B5FFAF863B0DBF1A98DDFD716B8ABBEFAEF6ED7DFAE9A7ED6D6FBDF596DC7DF7DDE53E5E3F8B8662773F6177C0D4D7F164F0D5A0ABC15B6B97BB76ED2ADDBA7593C18307DBF70C0D0DB59F2B33335376ECD8214B962CB127195AB76E6D1FE3E981C3000020FC025E68CEBEC5F2D42FEFC8CDF157C94D71FDCB0DBDC7A34159977776CF93A13F3E26F7371B4E2D3050C9E0BB65CB161B7CAB5A837BDB6DB7D9E76B1F60ED23AC61AFA6681F5FADBD2D5DCB6B77B6C769B65CBA9FB09B06664F282828B0A177F1E2C572F5D557CBD8B163252020E098C7E949015DF4A4828E9A7DEBADB7CA82050BE4B9E79E93EEDDBB4B6262628D9F38000080F00B78A905E92BE5F9ED49F272AB3F4897F0D627F55A3734BE5212C2DBCA9D9B5E90C385793238F6120A182887F6DBD5397CB579AE4E5F54DDA6CB1A805F7AE92579F1C51765C28409E506C0EAD2BEBD5A233D65CA14DBF4594780D69AD4F2E8FD5AFBAABEF8E20B3B389706650D98354DCB4CFFDF56AD5AD9105B95D0AF0386F5EDDBD7F69D9E3D7BB6AD351F3F7EBC47FB4E030050D39C140150755AE3FBD82F53645A9B474E3AF8BAB50B6D6E5FEFE59DB3E4C3BD8B2864A09CE0ABE1EDF0E1C3D5AAF12DEB8E3BEEB0A15783A0BE764DD1A0AB4D9E478D1A2503060CB0AF5F7AB0ABD221596DDDBA55DAB66D2B43860CB101586B81753A249DF7D71D8C6B22F86A60D5E6CDDAF4BBBAB5DD5ADBABB5BE1A84B5E67CCF9E3DAC980000C22FE0ABB48FAF36757EB1E53DB6FF6E4DD2D77BA5D5787976DB34D992B383C2064A05CA175E78C136DBD59ADA9A6872ABC1D7DDEC57A717D2D7AE09DAE7576B48DDB47677F9F2E576202BBDCF1D7C1F7BEC315BCB1B141464FBFAEAC0525A9BAA35C53ADAB3F613D6FFF964E9FFA5270DAEB8E20A1BC66B82865F1D955A3F5F45B5DA0000781B9A3D0355F450CA64DBC7B7A66A7CCBD21AE03B9B5C2B0FFFFC9A4C6F378902C7292F3B3BDB0E50A50151FB9E6A58D580A873E39675FBEDB71FD37FB6A2C76AE08D8E8E967BEEB9479E79E6193BBAB2BEBE36F1ADD60ED5045977B82D4D0791D2D19C6FB8E10679F3CD374BC2EF79E79D6743A44E83A4B5B2A56978D6E7FDED6F7F3BE9F2D33EBEDAD4B9A6826FE900AC7D9CF5F5B5961B00006FE74711C0978D1C3972524D8E4CAAD3197D99BE429E6A719BF83B3CF7F3E91CD64ADEDE3D5742FD82A56DE8195E5FCE3AF0D09E26347FF4168D7736F6991179DDC157A7DCD166CA818181F676ADF9D5DB3232326CB82D2C2CB4B7AF5DBB567EFBDBDF8AD379A461D3F3CF3F7F54F35C7DDE75D75D279D3A752A09AD3ACFAE4E2FB471E3463BAD4FE9E757D639E79C639B2F974743F6E8D1A34BA63FD2F7D4C7EAFBE86D1AD84B2FEEEFCFFDFF56978EEAFCDE7BEFC99831636AB45FB39B86EA37DE78C396A5A7A765AA0FDBC177DE79E731B64000E0BD68F60C5481CEE3ABD3190539033CFE5E0F341B6EA740AA0DB366CDB2CD326BAAD9274E4D35BD1E6960D5BEBDCD9B372FB746D63D28944ED5E3A64D705F7EF9E592EB8B162D929F7EFAA9E4BAD6CC6A70BEF4D24B8F7A2D0D863AF2B3865F13607CA64CB556569B27D7E488D6A569590E1C3850A64D9BC60F0000E0F568F60C5492CEE3BBF570AA9D9AA836F48CEC248FA6FCDBF631AEE9BEC56569CD903B0068EDD5E5975F2E6DDAB4F19AA94CF6A6EC95C0B04089882D1EE068C5FB2BA4F979CD25A665CC318FCDD89521E93BD2E58C738FAE312FCC2F94ECF46C098F09AFD27B17E416885F60F9B5FC8BDF5A2CDD8776AFF07EF7635AF66829F16DE2E5D735BFCAE99D4EB7B7EFDBB64FA29B45FBD46FC4BD1E69D0D240AA4D77ABBB1E69F0D5019534E00E1A34A8C2A6C8DA6459477DD6DA536D826BCB7CF162B9E69A6BE4B4D34EB35306951ECC4A3FCB5D77DD556E2DA87E6E0DC08F3FFEB87DEE95575EE935651A1212629B4957A54C75902B1D304BFB357BD225975C623FA74EEFE49EA71800006F44B367F8B49A6CF63C6BEFD712E1172A97459D576B9F7F67EE5EF935374DBA869FEDD1F7F9E0830F8A036261A1ECDCB9D3D696CD9D3B57525252EC4177A3468D8EDB0FD2D3CD9E43A342E5F5E1AF4BE7DF7616FF407F59F8CA42E93EBCFCA96016BDB1481C0E87C49D1D27DF257D678370DACF69F2DFA7FE2B7987F34A42F1C17D0725E5DB14D9BB75AFECFC71A7FCFCEDCFB274EA527BDFBACFD649E6EE4CF965D52FF2E3FC1FE5AC9E67D9DBD37F4D97E0C823A163F7C6DD927B28571A366D58725BD9C72C7B779974BEBAF8734FB9698A240C4A10A79F535E1BF29A741FD6DD7ED69A5657CD9EDDEB9186CD5F7EF9C5AE475F7EF9A5FCFAEBAF366C9E683D72DBB163873CFBECB3B629F2E0C1838FDB045943A0F69F3D74E890ECDDBB578A8A8AECEDAB57AF9675EBD6D941A6DCB769D3639D4AE878D308858585D9FBFFFDEF7FDBA6C975DD7CDC5DA6FA3FBACB544784D6323A51997EF3CD37B6D9748F1E3D3CFA19F5FBD1ED466666A69C7DF6D972AAA2D93300783F6A7E814AFA36E347B9AAD105B5FA9EDD22DAC9F43D5FC8E8F801B5FEFFEA7432CB962DB38B860077AD93F687ACEE8040D5A12155C36FB7A1DD2420284036FE6FA35CF5F0557260E7011B3283C2824A1EABB5B45AF37BD9BD97C9FA05EB8B83A6BFD3D6B286350A930B6FBAF048C8890EB30139796EB274B9A68B048707DB00DCFEF2F6F2DDBEEFA4E505C5A167DDE7EB4A9EB362E60A896F1B2F0E677160CDDC93693F83FB319B166DB2AFABEFAF35CD1AB60BF30A256D4B9AFD3FA29A4495D4126B6076BF8E2FD340F4D5575FD94583AA06CB8484840AD7239DF647FBF85E7DF5D5951EA0496B797FF8E10769D7AE9D242727DBDBB41678FFFEFD257D817544650DB6DAD7F74434243FF4D043F2E8A38FDACFA8359BDE242B2BABA44CF5FFD2705B5E996A595C7041ED6CB3F47BFDECB3CF6A7C502D000008BF401DF8317BABDCD72CB156DFF3EC9066E67D53EAFC7FD75A277710D683EDF6EDDBDB26A17AE98941744AD3A6C26BE7AD953697B4B181B6A8B0487E4DFE55367EBD519A7569265D071EE9EFB974DA52B9F28F57DAE6CD8BDF5C2CCD3A3713FF207FF9E4F14FA4C3951D6C20D530ECD6E0B406E217E0671FA3A1B420AFC006D91DC93B6C4D6D79F475DCB45659436C930E4DECF5B8D671D2A84523FBB706DFCC5D99367C854485D8DB97BEB3D47E367D4FB7C9C326CBF09787DB80EFEBB43FAE3BB4E91CBD3A48D2C5175F5CB21EB983EFD0A143AB1C3875B4E1BFFEF5AFB6E9B20E92654F8694EA27ABC15B1F53D91337B1B1B1B609F49FFFFC67FB9AC7AB2DAE4B7A92CA5DA61AEE3B77EE5C52A65A9E3A276F6D68D2A4891D5C0B0000C22FE003F6E4A54B6C40ED8E66DA3020420EEECD909933677AD5C1F6AA55ABECE20E099EAC5DD2B07A5AFBD36C8D6C695A935ABAFF6ECA772936B86A88DCF4CD2619F4C220C93F9C2F5FBFF6B50CFCCB401B9A678C9B216DFAB4B18159AF6B18D6C09B919A216929693694EAFBE86B9FDDBBB8F966E99A5FADD19DF7DC3C1BBAD5AE0DBB243C3ADC86E07DBFEC939C8C1CE93BAEAFBD4F6BA4835A06D960ADB5C1FA180DBE9BBFD92CD16714F7F5D5D7BA72C295351E7CB566D09BD699F2688DB0F6CDD5C5AEEB0D1BDA75AB3AC157E908CE3A4AF2CA952B8F1AE04A454646DAD7D44058153AD0D61FFFF8471BAA75D0A9B8B838AF2ED383070F1E55A6DAA45EFB4ED7463F5C3D99A1DF290000845FC0076417E648A8B3760780D2F78B48CE970F967CE0BD2705CCC1F5B7DF7E2B2DFAB5F0C8EB6B48AD88BB49AB6A717E0BB979CACDB2E1AB0D72FE90F3252B2DCB2EFD1FE85FF298A12F0D95590FCDB2E1579B1CFFF8C58FB649B23647D6005A999A5FED3FAC81556913EB3697B6B14177CB922DB2F797BD4707BC3D99F6F597BFB75CCE4F3CDFBE47A7AB8AA7D739907A40125F4A94C090C01A2F330D7FEE9313F5853651D690AA73C7569736B95DB06081ED835A7ADDD01A609DFEA83A7470291DFC4AFBDAD637DAD759478B764FE9E4495AB3AE35FB0000107E011FA041B4B603B0BE5F66477F19D8E41A8FBE8F7B509D13D19A24F7E0416E5A1BA6FD0DD324CD239F4D436AD69E2C1B4A5337A4DA5193D5C1BD07E5F48EA71FF5D8ED6BB6DBD0AACD8CB5FF6F5078906D32AD7FFB07FBDBA6D2DABFD7AD63FF8E92B5374B5AF56A6503ACD6CC96AEF9D57EC01A608F0ADCF98525B5C13BD7ED94D006A1F6B5F5EFC8F8C892C76918D6C1B734F0260C4E3826E436886FE091E0AB74D0A1BA1CF0AA3AB4E6579B2B6BD3FAEA3631D626CD5A7B5C3AF82ABDADEC7A5B591B366CB08339697FF7BAA8F9AD4C99EAEF5297B2FFB79E04D0FED0B54183AFB78C0E0F0000E1173849DAE4599B3E370FAABDA93CF6E7654A58A348B9FED2EBEBEC00BB74E0D54BEDFFA835491A06B47FA1F6D59C3F7FBEC7C26F6CCBE2699E34446AB3620D99DAFC58A73ADAB3F9C808D35A433CFBE1D9B66FF0B9D79D5BD20F57BD3DFA6D19F9FAC8639A4E977EAE8EECDCF692B63628BB9B43EFDFBE5F0EEE3F2851A71F69EEAECDB0DDAF53BAE6578372E99A5F1D304B97997F3C7EF363AD9DAEEAF44B27A273D99E4C0D6A6D84DFF2D623779F5F0DC1D569FAFCE1871F96F4F72D4DFBACBFF2CA2B72DF7DF755E9F5F4F3FCE52F7F915B6EB9457AF6EC5927DB9DCAFC36DD4BD932D526DBB515D8B5C9B3367D060080F00BF88076A1CDEDA057B5197E7F3AB4CDBC6F8B5AFF5FB506CD3D58901E546B8D8E1E4C6BDF5E3DB8D683ECDAE01EE04AFBE416362DB4CD95577EB0D2DEA7FD6D359CEA3CBAC3FE31CCD6108FF9EF187BA9E15547856E7D51EB0A5F5B43AED6E06E5EBCD986081D195A03F0E1ECC3B27BD36E1BB6B5E638A441C851CFD39AE7F26A7E752E621D3DFA8421614FA6ED1F5C12B0566C3D6A102D5F76A2F548FBD83EF2C823767E5F559500AC53FF7CF2C927929B9B7BE44445A9E6CF3AF5918E7EDCB163C74ABD9E36E77FE6996764C4881175167CCBDD69FBFBDB305F99DFA696A706F8DAE8F3ABE5AFFDAE010020FC023EA05B643B599C912CFD1AD6DEA8AFDF66FE68A73BAA6D1A7CDDD3D2E8F4295DBB76F5F8A8CE65E564E6D8519AC7CE1D2B2B3E582105F9C561DC3DBAF3EA0F57CB75CF5C676B4E6D58D9BC473E7BE133898C8B9433BB9D59612DEF8EB53B6CAD704E568E0DB9EEE0ACCEEC7E667140DD9D696B6D75A02A7D7C695AEBEC56BAE6B72C6D429D7B3057F20EE515071513E2B7FFB05D56CF5E2D17DD7A917D7FA503616D5BBDAD64102D5F0CBC55598F3440E908CB1A807500A7CA4E9DF3AF7FFDCB3EBEF4FBEA929E9E5EB24EBFF4D24BF2EAABAF9EF8044566A67D7F9D63D8DBA639D2E05BD932D5A0AF0375D5C648D5DA5C5DA79A020080F00BF880CBA3CE9737523F9182A202F173D4CE3CB79FEF5F2E6FB579A8D6FE47AD35D211717BF7EE6D2F6BAB86B7DCD014112CE3BF1C6FFF3EEB82B3E4F3BF7D2EDF7FF47D49903CADDD69F6EFDE77F6B697B167C54ABF3FF62B996A68CD276B6C13650DB6DACFD75D5B9B9B9D2B118D23242236A224C86A1F5FED1BEC6E7EAC4D98B546D686F08C1C3B976F74B3E8634F12E415D8F0AA531C1D539651A17664670DE5EE707CCDE3D794D4F2F6BAA5972C9DBAD4F651D6E9927CC9C9AE473A82B8CEB3FBF8E38FDB66CC1A428F67CE9C39B6E6B1749F570D7E3AF54F4A4A8AADFDB4272B3232E4F5D75F97D1A34757F85AEE1A5F1D39DA9B826F75CA5483F1F4E9D3252F2FCFA327AFF4C482866C3D69010000E117F001F181D1B6C9F3D707BE974BA2BA7AFCFD1667AC91D88006727A50ACC7DF4BC385060EAD21AAED1ADECAD0409BF8F7C44A3DCECD3DAA7265680D6FB7A1DDAAFCB97A0CEF61E707AE887E86D29FA374F3E68A6AA6EBB39A5C8FF475DC4DA035BCE97CB5E5CDD1AB35BB1A7E4BD7FA6A9FE7DB6EBBCD7E86FBEFBFDF8E22ADC1577DFDF5D7D2AF5F3F69DAB4E931AFA5415B836FEBD6AD2B5DE3ECCD651A1D1D2D6DDBB6952FBFFCD2CECBED293AC2768B162D6AA57935000027C34911009537A2F115F2FCF6245BFBEB69FA3E898D6B67D0A2DFFDEE7776901C6F0CBEDEEC78C1F75454D3EB91BB06586B15274F9E5CD20FBDB4BFFFFDEF72E8D0A192EBFADE43860CB1832F69F3E061C3861D350AB106E9679F7DF698D7D1DB35F8EA28D9B7DE7A6BB941BB3E96A99E34F8E8A38FCA1D08AC26E828CF3A2897BE0F0000845FC0875CDE30411AFA47C89BBB3EF5E8FBBCB37B9E0439026440F405143A4E691A80274E9C689B2F970DC01A8A5353538F1AE44AE7E42D3DD2B5D6986A4DAED682BAE99CC23A3856E900A7A34C3769D244EEB8E30EAF09BE3541FB50EB805D3367CEF4C8EBCF9E3DDB96715D4CAD050000E117F0B067CFBC43FE9DFA89ACCEDAE891D7D711A55FD9315B9E3CF3B65AEB5B0C78B3A8A82879F4D1476DBFDE175F7CD106606DEEFCC20B2F940C68E576EFBDF71EF37CADFDDDB7EFC808DBFAFCA953A7DADBDC0361694DB137D5F8D624AD95DDB469937CFA69CD9EB4D3E6CE3A8A36B5BE0080FA823EBF4015691FDC87CEB841C66E7949A6B579A446FBE4FE7A788FDCB9E905B9BFD9706919DC84C2065C748027ED03AC8157C3EAEF7FFF7B3B98536568AD6F458FD551A2B5C9F38409137C32F82AFDBFC68E1D2B93264DB2D7FBF7EF5F23C157C3B4965BE966E5000078336A7E816A1810DD53C6341928C3373C5E6335C05AE3ABAF3734F632B9A6512F0A192843FBBD8E1F3FDE86D5E79E7BCE36573E19494949B6F657039CAFF777D713001A7E972C59226FBFFD76B5CB4E9FA7E5366FDE3C5B6EDA2C1D0000C22FE0E3AE8BE92DF7354D94DB363E27AFA7CE39A941B0B48FEF2D3F3D6303F5EDA75D43E102C709C05A8BA9CD947524E8EA86B869D3A6C9BA75EBEC6B9D2A03BD6900D6FED35A13AC271134C09637885879F4715ADB3B6EDC385BE61AA409BE0080FA8666CFC049D01AE073C35ACB4329936556DAD7B6B9F2C50D3A57FAF93A9DD1DF7E7DDFFC109D32B5ED233475062A1980EFB9E71E79EDB5D76C087BF8E1876D18AEAC59B366C99A356BEC734FB526BB1A7C870F37DBA98B2FB62700B4165707AC4A4848B0D33FE9B450DAC45C036E6666A61D504C6B8B57AD5A6507CFFAC31FFE600710030080F00B9C82B4CFEF5B6D1E92B9FB97C91BA99FC8A35BDFB001F8A2C8CE72766853890D88925067B06417E6C8FEBC4CD99CB343966424CBE7FB97DB797CDDCD9C19DC0AA81A9DCB5703B0865FED0F5C999A480DBE5A83A9A33B9FCA7D5535C83EF0C003B6D9F7CA952BE5ABAFBE92EDDBB7DB01C434F86AD9E809051D01BB63C78E72F5D557338F2F0080F00BA058BF86DDED929ABBCF06E18FF62E9235DBB6485A5EBA1C2ECC932067809D26A95D680BE916D1CE06E69A1C2C0B385503F0942953E4F1C71FB773021F2FA0CD9F3F5F3EFBEC33F9F39FFF5CA59A625FA64DA1756AA8D2D343010040F8055029F181D1322AAEBF5D0078DEA851A36C935DED035C5100D69ACD8F3EFAC8D676D2571500805313035E0100EA3DADB91C3C78B09D0F78CB962D47DDB77CF972DBBF558371F3E6CD292C000008BF0000D45FBD7AF5B28339697F5E1DC9592D5BB64CDE78E30D5BE34B9F5500004E6D347B0600F88CDEBD7B4B585898FCF5AF7F95B8B838D9B56B971DA1B865CB96140E0000A7386A7E01003E45A7ED39F7DC736DF367BD6CDFBE3D8502000008BF0000DFA3B5BEA52F01000008BF00009F939F9F6F2F030202280C000040F80500F8A68C8C0C7B1919194961000000C22F00C03715161616EFE49CECE6000000E1170000000040F80500A07E4A4F4FB7975151511406000020FC02007C535E5E9EBD64C02B000040F8050078B5ACAC2C993061C231B7A7A5A5C9A041832435359542020000845F0040FDB57AF56A090F0F97B3CE3AABA409B3DB942953E4F1C71F97F8F8F80A9F4FCD2F000028CB9F220000789B175E7841DE7CF34D69DBB6AD3CF9E493929C9C6CC370AB56ADE4C61B6F94EDDBB7CBA64D9B64C08001E53E3F3333D35E46444450980000C0A2E61700E075AEBAEA2A19376E9C6DDAAC7FDF7FFFFDF2DC73CF499B366D6C20EED1A3877CF3CD37153EBFA0A0C05EFAF9F95198000080F00B00F03E5AA3ABFD7A1F7EF8E172FBF53EFFFCF39293932341414114160000A8349A3D0300BCCAA2458B6C13E7E0E060E9D8B163C9ED7ADB575F7D25975D7659C914461F7EF8A124252555F85A63C68C39EAFAC08103E5FAEBAFA7900100380551F30B00F02AA3468DB2E1F6C1071F94F5EBD797DC1E131323C3870F973E7DFA88BFBFBF1C3E7C585AB46851A5D73EDE20590000C0B751F30B00F03A5ACBFBCA2BAFC8C2850B6D13686DE69C9292629B41CF983143F2F3F3E5CA2BAF94CE9D3BDB41ADDC035C1D8F3693EEDEBD3B850B0000E11700AA27242444427342253B389BC2A863813981E20870D4FBFF43C3AD9B065FBDAE41586B7F75B467BDD481AF544242822C58B040020303253737B7C2D7D426D44CF642C5FD00002000494441547D040000E11700AA2D363656CECE3C5B5607AFA630EA58C3030D25BA6174BDFF3FFAF5EB672FB3B2B264C4881147DDA761F89E7BEEB135BFDA7FF7820B2EB0E1B7A8A8E8B8AF79E9A597B282000040F80580EA6BDEBCB9ECFA76979C1579966C0EDA4C81D491E09C6089DB1D276D12DAF8CCFFD4B76FDF63FFCFE060DB24DA5D3BAC35C0DA47383D3DBDC2D7D15A61774D310000383531E0158093A67D293B74E8200D363690F3D3CE9726B94DCCC685CD4B6D093F1C2E6DF6B491B69BDA4AA7F69D243434D47702BD09BAE5D101AFDCF7695366EDFBAB2A9AD757E705F6A5720100005547CD2F801A111D1D2DDDBA7593CD9B374BD1A6226978A82185524BB456B361C38672D67967F944C09B33678E9DD2282C2CACE4B6A64D9BDAC05B9AD60AEBEDEAE28B2FB6CFA948D7AE5D5951000020FC0240CDD01AE0F6EDDB53103829AD5AB5B2CD98DDC1569B37EB28CFA507C15ABD7AB5EDF73B6BD62C7BBD4D9B3636F8676767977B7280F00B000008BF0000AFA2CD9935F8CE9E3D5BAEBDF65A7B5D9B2D97AEF9D581B0F436376DEE7CD14517C9BC79F3C4E9744A616161C97D5DBA74619467000040F8050078A73E7DFAD8CBA4A42459BB76ADFD7BD3A64DB6B65783AF4E7754DA39E79C63C36F593D7BF6A430010000E11700E09DB4E9B3D2797CEFBBEF3EFBF79429538E09BD6E3AE895F63DDFB76F5FC96D5A6BDCA953270A130000301C2B00C0BB68FFDEF8F8F82A3F4F9B3E970DBA5A1BCC28CF00004051F30B00F02A393939B6C676FBF6EDB6EFEFFAF5EB65E1C285F6BEEFBFFFDE36876ED1A245B9CF2D3BEAB3F60306000020FC0200BC7707E51AE0EAFAEBAFB74DA0F5BAD60A87878757F89CD6AD5B1F75DD3DFF2F000000E11700E055742467EDDBABB4D65769E02DDBD757AF77ECD8F1A8DB7454E7264D9AC88E1D3B24363696519E010000E11700E09DB496372D2DED9840AC8B9BCEF9ABC158C3AF0E70A5CDA175D9B66D5BC9730F1C382063C68C9166CD9AD9C79D7BEEB9D5EA4B0C000008BF0000D4B85EBD7AD9E54434E83EF7DC73360477EDDA55BA75EB2683070FB6E15907B9D2BEC3999999B61678C992253273E64CDB2C5A1FD3B2654B0A1A0000C22F0000754B6B76DD7D7ECB2A2828B073FF2E5EBC58AEBEFA6A193B766CB9CD9B75D02C5DB4F9B3F6FDBDF5D65B65C18205363077EFDE5D121313EDFD000080F00B0040AD9B306182FCFEF7BF3F6A44671DE86AD0A041D2BF7F7F5BA3DBAA552B1B62AB328D914E85D4B76F5F5BAB3C7BF66C993469928C1F3FDE86630000E0FB98E71700E055860F1F7ED475AD05BEE79E7BE40F7FF8830DC1DABC79E4C891D59EBF576B7BB5D65783F0534F3D257BF6ECA1D0010020FC020050BBB4CF6E69FFF8C73FE491471E9155AB56C915575C2103060CA891F7D1F07BD55557C90B2FBC606B93010000E11700803A919E9E6E43EA9A356B6C53E79A0ABEA50370972E5D6C1F62000040F80500A0D6E894460F3EF8A06CDAB449E6CC9923EBD6AD93FFFCE73F121717270B172E2C59B66FDF5E23EF77EDB5D7CAB265CB64EBD6AD143E00003E8C01AF00005E45E7E9EDDDBBB7DC79E79D929C9C2CE79F7FBE0DBE3A5D51695A2BDCB469D3937E3FED033C70E04099366D9A3CF4D0437C010000107E0100A81D23468C903BEEB843A64E9D6A03E937DF7C23CD9A35F3D8FB5D72C925F2DE7BEFD901B5E2E3E3F9020000F041347B0600789DF0F0707BA941546B8075A4E79494148FBD9F4E8394909020CB972FA7F0010020FC020050BBB4D9F3A5975E2A93274F96575F7DD54E7BE429DDBB77971F7FFC9142070080F00B0040EDD041AF940E42D5BC79733BFDD1C48913ED00589ED2A44913D9B66D1B850F0000E1170000CFEBD1A34749B3671DD42A3232D2FEAD0353E97D9EAAFD8D888890CCCC4CBE0000007C14035E0100BC8A865CB79C9C1C090D0D2DB9EEC9C1A8F47DF5FD0000806FA2E61700E0D541383B3BBB56DE4B836FE9E00D000008BF0000D40AEDEB9B9191512BEFA54D9EB5E933000020FC020050AB74B02B1DF4AA36ECD8B1C3A37309030000C22F0000E5EAD8B163ADCDBDBB6CD93269D7AE1D850E0000E1170080DAD5B56B5759B972A5E4E5E579F47D0A0A0A6CC84E4848A0D0010020FC020050BBA2A3A3A56DDBB6F2E5975F7AF47D162C58202D5AB4F0E868D2000080F00B004085121313E5A38F3EF2D8A8CF3ACAF3071F7C60DF070000107E0100A8133A0855CF9E3D65E6CC991E79FDD9B3674BF7EEDDA565CB9614360000845F0000EA8ED6CA6EDAB4493EFDF4D31A7D5D6DEEBC7AF56A6A7D010020FC020050F7FCFCFC64ECD8B136FCD65400D6E0ABAF357EFC78090E0EA690010020FC020050F774F0AB499326C992254BE4EDB7DFB67D75AB439F97949424F3E6CD93091326486C6C2C850B0000E1170000EF0AC013274EB435C15A63AB0156A729AA0C7D9CD6F68E1B37CE06600DD2045F00004E1DFE140100A03ED1E03B7CF870B9F8E28B65DAB469B6165707ACD2397A9B366D2A919191121A1A6A036E6666A6A4A6A6DADAE255AB56D9C1B3FEF0873F48EBD6AD2948000008BF804F395C585818E474D2C801F0351A641F78E001D9B76F9FAC5CB952BEFAEA2BD9BE7DBBA4A7A7DBE0ABFD78232222A4499326D2B16347B9FAEAAB99C7171E61F6337A5140490000E117A84BDFEDDFBFBF4DA3468D68DB08F8286D0ADDB76F5FBB0075213333B3C0E170FC4049008077A33A0CBE6EE1EEDDBBB7530C00004F494B4BDB5E5454F405250100845FA0CE9883910F5253534F3397F9940600C013B66FDFEE672E3EA0240080F00BD4992BAEB862754141C1EA8D1B372EA7340000356DCB962D9BF3F2F2365C7EF9E54B290D0020FC0275AAB0B070DC2FBFFCD272FFFEFD347F0600D4984CE3E79F7F6E60F63363290D00F07E7E14017CDDD4A953D36EBCF1C6D5A9A9A9BF8D8A8ACA0A090989A4540000271B7C972F5F9E51545474EB15575CB188120100C22FE015DE7EFBED2D23478E4CDEB163C7D0DCDCDCEF1A356AD4D4E170D0F2010050659B366D5AB176EDDA30F3E7AD7DFBF69D43890000E117F0BA003C62C4888F3233332FDBBA756BF8C18307576CD9B2C53179F2E406E63687CE071A1A1A2ACC098C53D99E3D7BE4D34F3F95D8D858090B0BA34000299EC7373D3D7DBBD977FC989C9C9CB76FDFBE1DE6B661D4F80240FDE2A008702AFAECB3CFBA381C8E81B366CD1A630E624A9A4107040448545494346EDCB8E45243B1DE0E9C0A56AE5C29AB56AD9273CF3D57BA76ED4A8100C574C680D5665968960F18DC0A0008BF40BD337CF8F01E0505054B4EF0B002B3AC3561799DB95C6696F54141414BA74C99924E09C2D72426264E321713CDF2585252D2244A040000F80A9A3DE394B666CD9AED1D3B767CCB04DBEBCDD58A06C2D276D07166E968967E6619919F9FFF8079DE1D1D3A74E8B576EDDA1994247C8559AFFB980B5DBE4A4E4E5E48890000005F41E7469CF2929292529C4EE705E6CF942A3E35DE84E66B294100000080F00BD40BD3A64DD339802FA96A0036C199AE0300000000E117A83FB406D8CFCFEFA2CA06E0A2A2A27C4A0D00000020FC02F58ED600BB02F0D6133D76C68C190C010D000000107E81FA1B80A578C09FE306E0C4C4C48F870C19D291120300000008BF40BDE46A02DDCBE1706C29E7EE22B364996580B9FF3B9D1A66D0A041E1941A00000040F805EA1DAD012E2A2ABACCFCF96B9960EC34C1B89DF973AE5982CD32D15CDF6842F07D7DFAF4F1A7E400000000C22F50AF680DB0B9E865966D6583B1B9AFBF148F10BDC82CF166792E3E3E7E8909C17D2839000000C0BBF85104C0F1252727A777ECD87196F9738409BC6165EE4B31CB9B9D3A75D2DAE1AE66696B96511D3A74E8626EDB6CEEDB4109A23E31EB7A1F29EEF3FE95597F175222000080F00B9C6201B873E7CED3D7AC599351C1FD2B131212DECCCFCFD766CFE7381C8E73CCE548132402CCEDAB8D1C4A11845F000000C22FE0F52A0ABE6E1A704D58F8BC5DBB766F9AF0DBCA2C3A12741F1388479B40516442F04AF318E60606E117000080F00BD47FEBD6ADCB5ABB76ED0C1322BE32577B98E50CB35C6142703F73DB466D2A4D2981F00B000040F8057C8286DC98989857C3C3C37F365713C4D51FD8848B1E9D3A755A61EE4FA39440F805000020FC02F55E4A4A4AA10910AB4DD87D478A4757D7BEC0EDCD32DADC16DEAE5DBB65EBD6ADCBA5A440F805000020FC02F59E0911D9DA1FB873E7CEEF1415159DE10AC0173B9DCE61266C1CD0804C2981F00B000040F8057C820E9A6502C5FBEDDBB75FE270387A9A9B5A9AE55A1338AE37B76D5CBB76ED164A09845F000000C22FE01334E4C6C4C4BC121E1EBEB3A8A8A89709C2679845A7464AE8D4A9D32AFA0383F00B000040F8057C82AB3FF0F2F3CF3FFFD5828202BD494786D641B1746AA48076EDDA2DA73F3008BF000000845FC027B8E607FEA253A74EEF9BABF1523C28561FFA0383F00B000040F8057C8E3675D6FEC0A5E6076E25DED31F38DE15887EE29B22FC020000107E01D44408B6F303474444EC97E2F9815B78417FE0A7CD72403F8B59B69B85E6D8845F000000C22F8093E3EA0FBC34212161727E7E7E94B9A98BD45D7FE08EAEF77FD62CEBCD72B1144FD5442D30E117000080F00BE0E4B9FA037F6202C93BE6AABF59BA99E5D25AEE0FFC86591E7705DE40B32C37CB2F6619609670B3ECE09B22FC020000107E019C341342D2CDF2E939E79CF371515191D6006B4D6C6DF407D666D73A14F57FCD926D962CB3F435CB3E5708769AE50A291EA42B996F8AF00B0000E0AD9C1401507FBCFBEEBBAB9392922E71381CBF33575334AB389DCECF1313135F193E7C78530FBCE5ED66F9872B043F679618B3CC318BBE978E4E9D2FC50373C5F0ED000000C09B51F30BD443C9C9C9EB1312125ECDCFCF2F282A2AEA62C2702F73795BC78E1D836AB03FF008B3AC90E2BEBD6F99E55E57C8EDE90ABD7F334BB4596E31CBFD6629E49BA9FFA8F9050000BE8A9A5FA09E9A32654A4E5252D224A7D3D9DA5C9D6A9660B34CF4F3F35B93989838EA245F5EFBF25E6596F9AE10AC035DA54A715367BDEF3257007ED82C8FB9FE76D35AE278D7DF7AE9CFB705000080BA46CD2F50CF252727679B6596AB3FB08ECCACFD6F4FB63FF03FCDF292144F6B146996196619EC0ABE774A7173E8AE523C12F49BAEE7685FE00CB36C72DDDECB157E2F768566D403D4FC0200005FE5A0084E0D0B162C689A979F77BFF8C9404781E3344AA4D6EC32CBAC82828217FAF5EBB7A936DE70C89021031C0E8706D716AE9B669A65425252524A155E4683EBA2726ED7F97EE7994543D1FFCC32488A6B84DD125C0159F5308BCE499C23C535D3A80712131327998B8966794C5B1650223EBE5F28C89B608E04AE77143A9A5022B5A3488A763BC4F19FDADC2F000008BFA78CCFBFFCFCCA7CC97F7F7FE3FD21071A1EF03F1C729842A92581398187635263BE6DB8B7614B1348EFE8DBB7EF9CDA78DF41830685FBFBFB3F5C545474B72B8CE698F77F313F3FFFC9F7DF7F3FAB06DEE20EB3E8FCC3CF94B95D6B819F74055F0DBDDA6C5A07CA5A6696E6667984B582F08BBA377FFEFCBEF98EFC99FBE2F60599FD4230FB855ADC2F1C0E2C88D915F343D49EA838A7C3797B6DED170000347BF6797A663FD791BB785BAB6D61E98DD29D050105144A2D2AF02FF0CF8CCA6C7E30F2E08F0DF634183A7CF8F08FA74E9DBACFD3EFAB035E2527277FD1B973E7774C00D641A9B446B697D3E91CDCA143879FD7AE5DFB53355E5643F4A552DC145A07BBD2E6CFA5FBFA8E35CB41296EF6ACFD7CB5B9F548B37C60968FCCB2CA1588E1C568F67C6AEC17F21C798B7E69FD4B84D92FF8B35FA8F5FD8233B341E669590DB276344C6B789DD92F7C541BFB050000035EF9BCF4D0F4A9FB1BEF0FCE0ECFA630EA9029FFEE99D1993F98F0F9786DBEEFB469D3B6272525DDE470382E322178B5B9A995F9FBE3C4C4C44F870C19D2B18A2FA735C617BA42EC936582ACD6020F94E2699174EAA314291E806BA1EB3E1D346B346B0250F7B282B25EDE17B72F8CFD42DD3A1476A8CDFE98FDBFD4F67E010008BFF059C187827B1C883A70E207168A04A6074AE0BE4071E6B35A78C2AED37669F0EC5317EF3D7DFAF4453366CC38D7BCFF0D525C33DBCFFCBDCA04E0C9559C1FF859B35C2EC573FDBA69FFE070D77DFA779AEBF616AEBFB59FF04C57580E664D00EA56406EC0A595D92F388A1C47F60BB9EC173C212D2EAD435DED1700E054C41424BEFE05E7F9079DA82F57D8D630094F092F39B829F22B92CCB332E560F38314600DCA0DC93DBBAE3F8309C153FBF4E99374DA69A73D5E5454749F39E81A5D505030223131F1D9E0E0E06774FAA413BC44966B71D33EBE3A17B03685BED22CE3CCF227B3682DB34E8FA4A3423FE80ABEFF602DF02E43860C79C0AC034F5770F744B35E4C2C731BFD807D805F9E5F5855F70B7AAAFC60B38392D93A538A1C4514624DED1782737534FD484A02006A07A7724F71C1A9C112F953E45167F51D050E7B5BC8CE100AC8072D5CB830DF84E0074DE86D67824F92B8E607CEC9C9593574E8D07E557CB99B5CA156FB00BBE7FBED6096D9AED7D5652EA5EEA53B00A77375551E6FD61746A63D45F70BDA3A480371D8CF6114100080F08BFA293435B4C2FB4276107E7DD9FBEFBFBFC984E0A14545451748F13CBC6DCDDF9F9A00FCF9B061C3BA54F1E56E35CBF566D1F0AC4DABB59F6F8A59DEA0A4BD97F9FEF5C4445A651E6BD68DF4A0A0A09994DA29BE5FE0A4280080F08BFACAEF60C5037EFB1FA255FCA960C68C194B939292CE77F5074E3521A76F6161E1778989896F0E1A3428BE922FA301EA5F52DC245A9BD13EECBA6D3C25ECDDCCF73DBB920F5D588966F1F0F5FD4236FB050000E117F5940E680228ED0F5C5050D05A8E345F1EE5E7E7F7F3D0A1439FD679832BF9328BA4B8DFEF0CD7756DF61C4EE97A75F89D51C987528BCF7E010000C22F00DFF0FEFBEF67E9804626F4B676F70736E1E801735D47861E5085975AEEBAFC9D1C3D4016BC4C6868A89EB0483DC1C3B242424216515A000080F08B7AEB78A37632A2E7A94BE7072ED31FD83D3FF0826AF40786177335653ED1A06433CDE3D2292DF60BEC170000845FD45B79E17915DE57105640019DE2CAF607364B9FC2C2C255DA1FB88AF303C3BBBD7582FB3FA188D82FB05F0000107E51AF65B5CE92FCD0FC636ED7DB32CFCCA4806095E90FAC3585A3CCF58D26043F376AD4A8284AA87E4B4D4D5DA4A33957B499080E0E9E4329B15F280C2C948CB33328200000E117F5931EE0E446E51E73BBDE96D7208F024289F2FA039BE5BE9C9C9C1F870E1D7A2D25547FE9DCCFE63B9D5AC1DD7319E599FD82BD3D3C5F0E373A4C01010008BFA8A72B40BE53020E061C737B406680BD0F28AB9CFEC0F1E6EF59DA1FD82C099450FD64BEC37915DC3583D239B5380A1CE5EE17740A24BF437E14100080F08BFA2738355862FF172B0107CA0FBF7A5FE88E50A6BD40F989A89CFEC066B1F3039BA5052554BFECDAB54B07BDDA5E2610A7070707CFA7744EA1FDC26EB35F5852FE7EC1EFB09F345EDC58C253C2D92F000008BFA81FF400267A75B4345CD3F0B8B5BB7A5F83B50D247A653467FB51A1F2FA039BE5C7214386FC8DFEC0F587367D361747055D87C3319F519E4F918301B3BDD77D42C3EF1B1E7F7B5F2812B131426296C6D893A40000107EE1B5C2B68549EC37B112B427A8D2CF09DC17686B02C2B6865180285779FD81CDE5D89C9C9C8D2604275242F5C65B65C2EF348AC4F785EC0EB1FB056D0D5459FE59FED268592389D81C412D300080F00BEF14B93ED2F6E7AA2A7D4EE44F9114208EAB9CFEC03126404D4F4C4CFC9F09C13DF431D4067BAFE0E0E0A5A5AF070505CDA5547C5FC44F11E2CCADFAE18086DEF02DE1E2CCE15002A82AF68500E117B520373AF7A416A032CAE90FDCCBFCBD64E8D0A15FE6E4E4EC3797FD2825EFE31AD579BDFBFAE1C387FB502ABE4F47F63F99FD42915F11850854C1E8D1A37FC3BE10A81BFE14C1A965EF797B2904D41AED0F3C68D0A0D97E7E7EF799AB0F1615155D72DA69A715ECDEBD7BE6B061C37ABDFBEEBBAB2925EF121414F47C7E7EFE6BAD5BB74EFBF1C71FB5D6FEF2A4A4A4E5948CEFDADF693F8500D492BBEEBAABE7A143876675EFDE7DDBD2A54BD9C602B58C9A5F001EA5FD819D4EA706E0C39D3A752AFCE31FFFE8376EDC381D29E77F4C8DE45D6EBCF1C6ABCCC52BB7DE7AAB73E2C4898D478C18F193C3E1983368D0A056940E009CFC36F6E0C1830BCD65E0D8B1639BB18D0508BF007CCCD0A143DB9A9DFBC251A346F93DF4D043CEF8F87839EFBCF3026FB9E516A7BFBFFF275E322D528C59EE2875BD8B59F460A445054B5BB31CAFB9DA9F5C8F53F5A25FD74D37DDD4BBA8A8E83F7A62A277EFDEF6B601030674EBD7AFDF4EF33DCD370767F11EFE085ADEE1C7B95F47633ADEC9927EAED750B46A02C036B666B7B17DCD12CF3616F51D2B2F008FD1601B1414F4C575D75D17D6B76FDFA3B637975E7A69A85E4E993265B1795CCFA4A4A4140F7D0C0D9F3AE2748EEB7A9A2BBC5E6896BF977ADC7AD7CE3FC7157EF5726905AFA9F79F6796B9650E0C74BAA08E660972BDA70E91DE548A47515EE8ADDFD36DB7DD76456161E147B7DF7E7B60E7CE9D8FBA6FE4C8915DD2D3D3D72C5EBCF85373707691D6E47BE863E84197BEF9BC0AEED7832E3D622CDD3C7080EBC445B0EBFE04D7F7A8DFEDB4328F058053791BDBCB2C6D6A601BBB896D2C08BF1ED46AE9F0A6457EF9D78648F0150552704E415161E342290C7138E4B0439CBB0BA560455191E31B47A15FD2A61ED3B6F39502DE137C838383BFF9CD6F7ED3F8B7BFFD6DB9DB1A0DC03939398EE9D3A72F328FEFE5A100ACF3D4FEABCC6DC3CDF2E40976DCA9AE305BFAB3B7708559DDD61C2CF3F8F9A55EFB4157E8BEC52C37B90E1CDCCFF32A37DC70C395870F1FFEF8EEBBEF0E484828FFA4FF9831633A656464FCB876EDDAE97DFAF4F99D6B4EE09A96EA2AA785E59CBCE8EB3A11D1B6CC7D735C976F9A659CEBEFA75D7FEBC90BADE5C8E2D708806DACB5816D2C08BF5EEAAC6543AF8D0E8878D8298ED63D1B7428BCA261B78667873493F8C0680975064B76614ED0FEBCCC663F1CDCEC98B36F71ABFF1DF8616CAB6F13378A38DED8D46DFA54BE5AA0EEE8140E0E8763C1E5975FDE78D0A041C7DDCE98701C92959515F6D1471F2D3101F8020FD600BB69D3AF6BA5F8ACF589C4B8C2B35B8A6B6951EA360D6C7DE448CDF257525CFBAB61F70BD77D7A4071BA591E73056AAFE01A78E5233D28EBDAB5EB711FFBE0830FB69B306142585151D12BE6E0EC4E0F1E9CF529E7B6B432FBABB265BE428A6B24F4BBFDC02C3D5C7F7730CB046F2A7300A70EB6B1A84BC3870F6F5A5858D8CFAC5357FAF9F97531974DCCF550A7D3996D8ED1F699BFBF370F9B9F9F9F3FE7FDF7DFDF44F8AD236D9724B6880A6E30C304DC0E7F3A6364D8C50D3A8B9FC3EF98C769000E0D0A96D383629BF68FEEA10799F2DF7D4B331FDDFAFAA3AD9725DE5EE85F70D3E6F34E9D2F12F0A6E06B36B2CB1212124E1F3C7870A5B631E67151070F1E3CF0C5175F2C3161F95CB3114EF5E0479C689629527CB65A9B81E999EB8AE6B3D5A0ABCDBEDC35B6BAF39F59EA80405C7FCF75056AFF528FCD7705E06BA4B8F637DD9BBE27AD8DD083B29B6FBE39F0440765CA7CA7F2C4134F9C317EFCF8DF989DA696E1231EFA680B75357295BDFB64C5C2320757EE321FE03A119125476AD6F35D65AE4DDA5FE71709806D6CC93EC99F6DACEF1B32644847B30E3D6DC26E9F76EDDAA5F6EEDD3BA655AB5651868486864A4E4E4E68666666E8B66DDB223FFFFCF3F66BD6AC7962D8B061DF9830FCF0A930F2B8570D78D579E5A81B420343D7DD1C7F55C2679D5E08BB24AA6BB9C1B722BF89EED176F9B9AFB7BEB5C96F839C05FE8B5A7D3B74043F01A0F698E01A6E36B88BCF3DF7DC16B7DE7A6B80EECC2BEBA69B6E6A70C10517840506067E3E74E8D0180F7D441D88EA55296EFAA51649F119EE57E4D881A9DCCDB92E731D18E872966BE75F5E388F721D1C9415E36DC1F7C61B6FBCCC7C4F5A1B11D8AB57AF4A3F4F779A4F3FFD7493B0B0B0DF272626DEE1C18F78951CA965EF20159FA88D71DDE77EACBBF95DDB52077600C036B6B876976DAC0FEBD3A78FBF596F9E0B0E0EFEDA1C479D3F65CA94F0471E79A4D5C5175F1CD5A44913BB7E2973BFC4C6C64AD7AE5D23EFBFFFFE33DF7AEBADB01B6EB8A1878ED1327CF8F07FEAB11CE1B7165CB7F6A15161CE90D7DF38FB81905BE37FEBAC4AE82D6B42D361E7BFDFFEF143FE4EBF675A2D1B3A9A9F03E079A3468D0A6ED4A8D182CE9D3BB7BEE38E3B02AB127CDD7EFFFBDF4774EBD6ED34A7D3B9C0031BDF075C3BEB4565C2E86CB37C63968FCBD9E9976DCAB54B8EDFBC6B75A9A09C24C535CC5ED502C57C37979A8B4FEFB9E79E4AD5461C93F0A3A2B476A2A1BFBFFF5FCDCEF55A0F7DCCAC52075B07E4E89AF6B2524B3DB6EC011A00B08D2D96C336D67769136763C985175E38F0E5975F6E78F5D557C705040454EAB97ABCD6AF5FBFC87FFDEB5F91975E7AE9B58181814BBC64260EDF0DBFFD92C7DFB52B2FFDB5F7DA3E16D825BC758DBC66E7B0B35ACCEBF0BC9FBF9FDF246A8001CF07DF90909005679C7146D7DB6FBFDDBF3AC1D76DCC98318D3A75EAD4343838788EBE6E0D7C3C3D6B3D568A9B7055341E80DEBEBC82E7EA08977D5C4B7329AE29AE28B0B5753DEE71291E4044FF5EE12DDFD3E8D1A37F73E8D0A1B9B7DD765B8503AF54864E57650ECE42CCC1D9DB43860C19E0818F5AB6CC2BA22731B4C65D77D2BA9DEFE17A0E5D5E00B08DADB96DAC368D1ECF36D67B83AFB95872EDB5D79E71F7DD779FE9AEE1AD2AAD11BEF9E69B9B0C1B362CCEAC7B0B7D3500D779F8EDB9FCB6B3F6E666BCF88FB3C6069C1E145BA3AF7D46705C7C52DB49790E91E7CF5E3EB42D3F0FC033C2C2C2E69D7EFAE9DDEEBBEF3EA76E3C4F96799DA873CE39A7635E5EDE7F6B20006B0DAEF64B5A7D82C78D2BE736AD7DD651A117BA9627A5FCE6617A5B8EEB2022C52C33E44873E939AE305CA7DB20AD8D30E5397BCC9831013D7BF63CE9D76BDEBCB97E4FA101010133CCC1598F1AFEB87F2F53E669153C2ED555E67A80A635FADDA5B8B6FD59296EE2DE945F2700B6B127BD8D4D73EDD7CE2BB58D7D4E8ECCAD8E3AA24D9D1D0EC7ACDFFDEE778103070E6C5C13AFF99BDFFC26D604E0483F3FBF39BED804BACE07BC0A0F8CF87C506C9F809AAAF12D4B6B8047C45DF1C5D4D47993CDD58BF89900356BECD8B1FF0D0909E9356EDC38A736B1494F4F973BEFBCF398C7FDDFFFFD9FED63E2969D9D2DB7DC72CB318FFBE73FFF29D1D1D1625EAFD1134F3CD171E3C68DEF9A8DFBE09318F932B5826D5F65B67FC16CBB950000200049444154EE50E5A607005AA3AB813CABD46BE9D40F3AB2F3615708D600FC82149F31EFE3FA7BBA59FAD7C577A4FDCF0E1D3AF4A9D6466833BC8ABEA3BFFDED6FB6C6E1A802A8E0B1FA3D9D73CE397EE3C78F0F7AFEF9E7E70E1D3AB4C7F4E9D3D7D7D0479E5BA6CC5BB94E449476B714F7BF3EEC7ACC6A3932D8580FD7090F2DF34BF89502601B5B23DBD84DA5B6B12FB08DAD7B4D9A3479B6478F1E3135157CDDFAF7EFDF30353535D71C7B3DAFE7767CA9CCEAB4E677C8BAC7EEF473385ADCD0F84A8FBECFA3678CBA2CC82F3086E6CF40CDBAEBAEBB6699C07BC5830F3EE87437B3D1FE4A575F7DF5518FD39DFD7BEFBD77D46DB366CD3AEA20C0E170E8C6D6065FA54DA7EFBFFFFE58B361BFD82C6FE8D9CD1AFCE8E12708BFF952FE20557A5BB259EE9523F31F2A9DDE48E7F94D72ED2426B90E1CC6BA0E1EF47983EAE23BD211478B8A8AFEAB536DB86B23F43B1A3B76AC4444441CF5D8975F7EF998E74F9E3CD97E376E0D1A3490912347967C4F5DBA74F1BBE5965B82CD7AF0F94936918A3F4E99EB7D7F2B73C096E3FA0EF4B6DB5D653EC275D9C275D26310BF52006C636B6C1B7B07DB58EFA1A33A878484DC64B4F0C4EB0F1D3A34CE1C8B0D1F366C5817C26F0D395878E891094D873A829C011E7FAFA7CEBC6DB7A3A8E8F6FAF605990DDD9F74C0831A3EF0074E9A09BC534DE0BDFA91471EF12BBB831F3C78B036852EB99E9A9A2A1B366C9075EBD6D9EBDBB66D93A54B97DADBDDF4F1FABCD2B409F5934F3ED9282E2EAE7F0D07E017A5E2E98D94F6019E5DC17D7AE6FB02B3AC2F1594E7B82ED7BB0E0C4A2FF35D8FABF50142CC0EB1BBBFBFFF47F7DE7B6F60D9FE67DDBB7797C68D1B4BE901317EF9E51759B06041C9F565CB96D9EFCC1CD895DCA607757DFBF63DEAB52EB9E492A06BAEB926E62447EA4E3A4E99EB7775BE599696BAED755799EB6D8F9429F37FB91E93C62F1500DB58B6B1BEC8AC0FCF5F7BEDB58EEAF6F13D113D0633EB5B9059C7FFEE4BE5E657576FFCFC2F49E7FF90BD69DCA3678C72381D9ECFE06D42CE68FECACE0F8B626E6E3F3BED8DE4F4FAF20575ECD8516B94124D3018D3A953A78E6639A47376998D656E659E3F72E4C8497B9AEC610BE1251AEF6C2CEFBCF3CE63B57D02C5AC37D13131319B5252520A6BE235274E9CF8567A7AFA88871E7AC8D9B061C363EE773A9DB6BFD292254B4A76EA7ADBC68D1BED4E5D9B40676464E85C73F6BEA0A020DB04BA65CB96C76EA4FCFCE4A28B2E0AFBFAEBAF9B9B0D7093E4E4E44F7D71DD30DF5391F9BD4FEAD0A1C3D8EAFCD6CBD281570A0A0A3E33E51AA80761E5D1E6799F7FFEB9E4E717B728378FB70762975F7EB9BDFEF4D34F4B56D691CCAE27391E7CF0415B335196F9ACFEBB77EF0E4E4D4DEDDFA54B97B757AF5E9DCF2FDEB3EB8A59469BA58959F69BDFC58ECA3EBFAEF60B2BDE5F21C191C112D220A4528FFF79D9CF92BA2155625B1EE92E51545874542D59698BDF5A2C4DDA3711A75FC5C714FA98809000098F09975FD7FC2A917191F6F67DDBF655FA73F9C27EE114FDDDD4E8BE906D2C6A685B3EC22CEDCDB2AB2ADB711DE4CA6C0B5FF8C31FFE107E32838C9E488B162DFC3EFAE8A3D8B3CF3EFB3DB3EEEEF38572AFB3DAC41DF97BC6F76ED0C57132531A55D5F9116D377D93917CBD66EFFAF64599155CFB0E8E3041628459C9D3CC0F668EB96D86090D0BA74C9992E30D9F31635786A4EF489733CE3DE3A8DB0BF30B253B3DDB1E6C5445416E81F805FA557800D37D68F70AEF773FA6658F9612DF26DE1EE49CDEE9F492839CE866D1A7D2F6F5710DA0717171D9AEF5E64DB3235EF4FEFBEF57AB26D204DF7F9B1DF00D8F3DF698A3741FDEB23A77EE2CCD9A3513739061AFEB0E5E77E8AFBEFAAAA4A5A5C9FEFDFB4B1EABCD9F2FBCF0C20A5F4BCF6A9AF78B32070523860C19B261C68C19FFF0D52FAB267EEBB7DD76DB15870F1FB603AF1C6FAA0DAD61B8EAAAABC4ECD82437B73863E7E5E5C9EBAFBF6EFF3E78F060C963030303B5F6E198FE6AA5DD7EFBEDA1999999EDD6AF5F3FBD4F9F3E834EA29F362A4707F4BA4F17B39E680D4C92D3E97CE3DD77DF5DED8D1FF6BB19DF49F419D1156E7FD7CE5B2B0EE791609BF25D4A49E0B5DBEE5FF6C98F5FFC28374FB9D96EFBD37F4D97A8D38F4CCF1D141A24BFACFA45CEEC7E66C96D651FB363ED0E39EFFAF3ECDF1FDCFF81FC7EF6EFED6BBD73EB3B32E6BF638E7A7FF8E6BED06CC332CCEFE523B35D9D56DD7D21DB58D4A056AEE50EB35E6A7338AD9D9F919A9ABAE878DF6F4141C1802E5DBA1C0C080808F6E487D3607DDE79E71D5EBC78F1B5F5313F7955F8DD99B3AFE7C8F82B6BF53D0744F70C5E9C91DCBB9E7F79FA43D0262FA3CC467C544E4E4E96F9B1CC341BF10F77EEDC39A72E3784DF257D278D5A3492669D9BD9839CB0E8307B20F1EDBBDF4AEB8B5BCB853715879B83FB0EDA30AA72B373EDF56DDF6F93F697B7973D9BF6D883A39CAC1C49DF9E2E978FBFBCDC03180E72AA15AAB45DCC60B3DE0C3607C89966BDF9D8DCF64E5542D55FFFFAD7A7376CD830EAD1471F3D6EF075BBFFFEFBE5DE7BEF2DD9E99B75F4A8A6CEF6BB0C0AD2E98D4EF85AFA7E7FF9CB5FA21E78E081C7CC67CF4F4A4AFA978F7F6505D5F9ADEB88A3E6A0ECE33BEFBC33A032734C0E1C3850BEFDF65BDB1CCF6E60F2F365F5EAD5B686420FD2DCB4FF59D966E9E5B9FBEEBB43264E9CD8CFEC905F369FF1368E6B6A459E6B5DB9BBB0B0F06EB39E6C37EBCC5C3DB837BF9385DEF221776FDA6D4F8456A4C3951DEC763C2D25CDB61409082A6E2E1A1C1E2C05F9051277769CF4BAA557C9E357CC5C21F16DE34BB6E5997B326DCDF2BACF8BBB576C5AB4C9EE872EBBF7327B1236EF709E14E6154ADA9634BBDF896A12557202B561D38604DF538756F7BB4F30EE7305E14A9F60641B0B0F1DA3159A7552CF7C68BFEA3BE2E3E3B70F193264AEB96DC6EEDDBB1796DDE70707070FE8D5AB57546D7CB68B2FBEB8E1AA55ABFA137E4FD2AFB96971ED429BD7EA7B768B68A767C99BFBD077A6CD76C2DD07C7E687923674E850ED5FF8566DD7086B2DADD6FCEA41C6FA05EB2561508238FD9DB69635AC515849F0557A30A20731C97393A5CB355DEC81CDCFDFFE6CC3EF77FBBE93961714377D751FC07090E3918DAC76D21D66D69B612654E5989DFF7FCC6DEF1F2F543DF6D86393D6AD5B77FF830F3EE868D2A449A5DEC7DD77E9D34F3FB5CD9FCD81B96DB2E86E0AEDEFEF6F6B7C2BFB7A7A70F0E4934F464F9830E119B3AEE74F9F3EFD751FFE9A4A376B28AACC6FDDDCD62F3B3BFBC3BBEEBAABC26678151C4C698DBE1C3A74C85E775FBA69CDFBADB7DE2A95695AA57D84CC6B053FF0C003379AE7A44D9E3CF9210E6B3C2EA0CC7E419BC38D3697A35D35C236089BDFCBDCBAFC90EE5640C7F3CBCAE280D0E6D236B625913AFD9CD3ED365EAFB7BEA8F53181D94DEFD7ED7B930EC5DB93B8D671F684AC3D3B60F60999BB32ED3628242AC4DEBEF49DA5F6F3F8051C59AF270F9B2CC35F1E2EA151A1AC55A78668397282F1A0F9BDBC7FBC138C6C63E129661D2CDB5FC36EC775898B8B4B77B5029BE6DEE79BBFCFD326C9B5F1D9F418CD7CBE4EBE52D675167EF7E76704C40644D5EE8AB53F37B2C9374511098989937CE4FB7396FAD114991F428CB948345713B52FE590214336EDD9533BFDBA964E5B2A57FEF14A7B20B1F8CDC5B6F6D73FC85F3E79FC137B70A2073D1A86DD1A9CD6C01E70E863349416E415D820BB237987F80796BF5AD6F7839C43BB0EC9CA952BB58F877BFDD32AD09C528134BFA0A020D5E974E69709AAA9E67B3DEA4486795C5A759B2D97B72F7507616D0E6676EEF3CCF57F970E55AFBCF2CAC4152B563CAAC1B7BC7EB9C7336CD83059B46891EDE3EB5A574BEE0B0909D19132ABF47A5A036C8278833FFDE94F7F3765999E949434D35B7E9083060D8A37072FC1C7D9B9C59BEFB33A4D941C27FAAD9B03221DC4EB6FE3C68D0BD026E755A1CDD3AFBCF24AF9F8E38F6D6DC4513B097F7FD1114CDBB76F5FE9D7D303B949932605DE7FFFFDE3478F1EFDEBEBAFBFFE4F5F3F70D1F9A8CD77115FC9839C4AAF07D558679C6582B0D608DB5A2EF37BD1D7ABB5FDC251DBACDC0239A3EB19929371E273B23BD7EF14FF607FDBDFD76EA02283EDBEA149C7A34F92E9C9CE79CFCD93665D9AD9EBBB36EC92F0E870BB7FD026D2FA5E7DC7150F1C14141624412D83EC3E474F94EA63749FB0F99BCDB6B591D2D7BA72C295B51A7C0FEF3D5C76BF5056BE6B1F50AD565DE5ED3F6AEA39665B9163F643A93EF4330E93232718F7997DE16752EA04A309BC3D0F1E3CF811DBD8FAE544FB650F6C834B3F375CF7D727FB3F94EE0EE5DEE7E7E6E6368A8C8CAC9532D4BEE8F9F9F991BEB24ED459F83D5478D811EA0CAED5F75CFECDB70D9B2CB3C790137DEDC7ED2867041073532B6D6AD3A25F0B8FBEB7F6CBD2E0AA070C9BBED924835E1824F987F3E5EBD7BE96817F1968FB6BCD183743DAF469235D0776B5D7350C6BE0CD48CDB04DDC34946ACDAFD6D29EDDFB6CFBBAA56B7E7DE12067EFF2BDB27DD5F60AD73F0D85DAD4AFBCDBCBD2B3C37A205BC65161DAA5AA2331469AF7D3A90B06B937B06DDBB65D60D6A3D166875FE5E0EBFEAC3A98D58B2FBE78D4FFA2ABECF5D75F6FCF6257950EA665C26FD0134F3CF1868E86AE07F4650E608EB7B3897705FE8AB6894D8FB3238B72ED84AAFB3BF5D86FDDEC085FBAFDF6DB1D553D2873D3EFE2CB2FBF2C3949E1A6FDD04C1957F9F5B496DE7C47818F3DF6D8DF870F1F7EB139E0FBF1380FD73357E1D52C92F0137CDF555D07AAF558F7E06D35BD1E9CE43AE3ACABFD42591BBEDA605BEFE8B65F5BEE44C44694FF0334A1B7E939C7FE04A39A46D9E79595F6739ADD962B6D7DA435C6BA0FD8B2648BECFD65EF518FD5E76B6BA0E5EF2D97F313CFB7DBFF4E571557661C483D20892F254A604860AD96CB9EA57B8EBB5FA8681F5085836F8F3DA782FD50853F11297FCEF59A7E4E4D3D3FBAF40946B30DDC69826FEC4D37DDE4CF36B6CAAAB2BDF5C4F34F769F5B27CF3DC1EBB6D293289E1AE5B92C3D4E33E13788F07B9234F86617E6486D06E06E17F5287869FBCC2213809FAC47DFD1C493F8716C4948486899E6E191E85B9CDFC20E40A20737E70F395FB2D2B2ECD2FF81FE258F19FAD25099F5D02C1B7EB5C9B10E5AA20721DA1C590F402A53F35BDF0F721A253492D81DB1B26AD52AF7A89E716536E8FEE63B8B373B5CFF4A6CF863CAD9919557EB745247B8BA81DDB061432B9D7FB753A7EAB778D11A5E0DF6A5CF78EBF5EA045FB7366DDAF8C5C4C414A6A6A60EF7A29D60792720AA727F9FEA7E36734096D7BB77EF6AAFD47A20AB351065E981597927652A7B92A269D3A6CE8D1B370E16DF579503ED13AD07A5D7B9F26AE1469DC4E7FCD9EC17CE4CABE5194A7E5AF8939C37E83C3BBAF2A237161DB57F284D4F82BA696DB1FBB69FBEFAC96EBB577EB0D2EE47DC344CBB4F94EE5CB753421B84DA00AD7F47C61FA9A8D0FD84BEAFEE0B1206271CB3FD6F10DFA0D6F7092AB6476CD9FDC2313F4D57CD53758FD7AA131C2AFB9CE00AF63B153DB63AFBA3B6DEF0E336DFC169663F5668B6B1D57E0DB6B175A6D2DB5B0F3C5F5BE81D6F633BAA9AEBE366B32E35CFCECEF6AF8D00AC2780CCFBE5FACA0A5167E1B7A17F44DE9EBCF480E641F1B5F7A60D02F6ECB8D091FFF5B8A449F5E50B4A4C4C9C58851FC301B383FCDCD52760AE36D3B9F9E69B8B6AE32067FB9AED36B46A33633D60090A0FB22377EADF7A20B2F1EB8DB67FAF5BC7FE1D256B6F96B4EAD5CA0658AD992D5DF3ABFD80CB9EE5AFEF0739217121D2A16B071D04CA23EB5F054D7B34247F57C9F527BFEC01969E403181F5CDAFBFFEFA61133683ABD2C7A9E400D604DE37DE78E398A65E7AFDBDF7DE936EDDBA552B04CF9F3F7FF5AE5DBB5AE8FA5EA6E6F7B83B9BE335E9D3A6E7E6BEED151EBD0507A79BDF55BA077FEF4595FCAE32CD679DE7FEAD9B1D60AF356BD6CCFCE28B2F8A2EBBECB26A9D9D2D3D1A6999F7B2F755662096B27EF8E187822D5BB6E49ACFF99F32DF51D9F748338FA96E33FE131D5C54691D28E73B4FF59611F54BAD27953E6032FF67966BBFF0B67BBF70CB2DB714D566F8D5EDFBDEAD7B4B5AEEE8767ECFE63D127BD69141F3747C885F7FF8F5A811FC7520441B1ACC6D7A9FBE8E8EE0AF2757DDB30768771A77602E7D5254F721A54F8AEA5812BACCFCE3F17B49947EEDDA10D428C8A3FB056F51956E01A57EA7C1AE0180AAA59CE7BF5989A7E9A04385E5EC0B77666666469A6DAC3FDBD82A7F0F556E7AEFEDDBE0DADE96BBB6E39F98658ABB19BE39BE4FCDC8C888AB8DF06BD67D9DAF3A93F07B925A069F96F963F6D6E8DA0CBF3F1CDCAC5FDC061FFBEDE838F93AEFE98C909090F99E3C30AFF047595824B31F9E2D6D2E6923E75E776E493F5CF5F6E8B765E4EB238F3A9B5FF6B93A6A73DB4BDADAA0EC6E0EBD7FFB7E39B8FFE051A337D7F7831C4FABA0EF55CAF19AA5990D6A81D998FAB97650FEE67ABAB99C5FFA048ADE3774E8D085FFFCE73FBF34212B40A762A88AB973E7DA0D6779F44060D6AC59556EF2B570E1C255FFFEF7BFCF30017A9009D0F3E5D470C87C3FFF35DF4D5239BFF5F9C3860DEB636E9BBF7FFFFE82EBAFBFBE4A7BC31D3B76C8BC79F38E9A6FD2EDC08103B6A95E42428254A5D9BB1E94FDE52F7FC9C9CFCF4F9C3163C61C416DCA718FF65C57FB85D2E63C3647AEF9F33525D7B505CF6B435E93DB66DC56D2FC59A73FD245074C8C8889B02752DD035E697369EDDAD220B741490B1E379DCAAEBC93A27B53F6DA81154F7850B727D3769D71DBBA62EB51E34BA066B8F62529D578EAFA1A0C1A15855FED1BAF676775E038A7F9DD38CBDB179A6D6C17B6B1A84507CC7AF81FA7D3F95E6A6AEAFCB203B0050606AEDDBA756BDCF1A6C6AA29BAFE9ADFC14F84DF93D434B8F1B2C519C9FDFB35EC5E6BEF3967DFE27D45225FF948E07DDF2C9F040707CFA9EB3362DA8CD93D759086D78DFFDB78CC889CA569C8D58395CD8B37DB66A43A32B406E0C3D987ED54185A63AB35C7210D4238C8A9797A563BCF947B902BF06AF0D5BDF1DCE39D40993E7DFA22B3E3EF3675EAD46F4CE00CD5119C2B233D3D5DFEF39FFF8809CD47D69752A33D6B28FEE28B2FEC88D095993AC9FE8EE7CC59F3EEBBEF9E615EA39F09BECB7D3DF09A45CFE27C74A2DFBACEED3A7CF8F02E1F7FFCF1E283070F168D183122ACB213DF6BCD7CE983327D9E7B746EFB210E1DB2F3523EF5D453957ABDD5ABFFBFBDFB00B3AABC1306FEDE9901860E22289648D058B145B1AC2968D4609A292A6349246ABE98982F9BB669BB0846779358369BFD8C4663023E6A04D144578D2524F6D8A2220A36C2824AA8024A9B19A67CEF3BF70C5E2733346760EE9DDFCFE7FF9C7BCF3D7766FCDFCB39E77FDE72A6D75F76D965354ECAB66EC11BFF6DDD143FB7DB3BC37161FDC5AF9FDE1D0E3BEDB0B0FDF0B7870CA682F7E3E33E1E2E3BFAB230FAFBA3C3C19F39B8E94266922E84A68BA2E978928E05E515E54D4571EA59D47CBFDF42693E88668517455B4AADC6B5AB6BC3BAB5F95BCBA49FF5FA8CD7C3F45BA7870F7EE9834DB7D76BDA67C582FBB5E9AFAD6FA5A664ADCB5A78D397A52C8B0D1E0BED63D90A9667E7F737C6FDF8631BDA8FC7F3ABA98F3FFEF851871F7E78878FC57DF4D147D7C5F3B55B15BFEFD23FF5DD7FE24F5EBFFE84FAC6FA509EDB2A33758747DF9AB96BB7FA7073317E50A94B735CDC575656D63CF3E08ACEF2B7A5EE6BF75E766FD358AEF71EF6DE365B79D37D7753AB703AC94845EE69979FB6FE9643CDF7EB5DB9786553AB6D9AA82A6DEF24A7DD956507FB555951B5C91750D281BFAAAA6ABF58703E150BE0EDD2CC951B73F5D557879A9A9AF5CFFBF7EF9FC6A686A79E7A2AC49387FC197B7575B8E28A2B9A6E03B131B1909E79F3CD37F78B07FC23A64E9D3ABB443FA3D5F1DF7BFAB7FEEBCDFDB77EC30D37BC3E76ECD803FEFCE73F3FB87CF9F2F79E77DE797DBA75EBB6B18B0961D1A245EFE88EB7CF3EFB345DA498397366D3C9597A2DB54EDC72CB2D4DF7ACDC90BFFDED6FB5975E7AE9BAF8BE93E249D9DD818E3C2EACCA8E0BBFE96CC78574B1F17F1FFBDFA67D6EDA9FB7948ADCD3AF3C3DCCFBEBBCA6DE3E856A56D784E9B74D0F77FDC75DE1DC5BCE6D5A978E2F1B937E4EDAAFA7D9FF5B4A85749AF4301DAF9A8F1B275E78E2FA0BA0E9FEC18F5DFF5853919DEE2440C9EB96CDE1B059C742FB583AC0FC187F48A74C0B172E9CDED6ED265B2A2F2FBF239E4BFD3CDD2B7A63DFC177230D517BE289271AE277F4778ADF77E98441874FAD7AE182B50FBEF96CCFA307BCBFC37FDF836F4E5F56DD50FDBF2F1F39796E917D46E3E20E726EDC29DFDC59C73CA4715BA3BF3B7AFDAD869EBBF3B9A62ECAA9B04DE37C9B5B6B6BD7D486BE43FA365DF56F2E64D3D8AF3436B8B9FB71EAC29C5A649B8AA2B7AA9B6E7191AEFA3BC9699713E574627CFFBBB9803279F2E4D48DFA905400C79DF48033CE38A3ACAD2BDF73E6CC09B366CD7AC758DF34B6F79C73CE09F3E6CD5B5FFCA6D7E7CF9F1F9E7DF6D9B0A15934AFBDF6DA57EEB9E79E748B9F4F946AE11BFFAD7F3E7E36EFEADF7AFA5C4F3EF9E47F9A3E7DFAD4F1E3C77FE0073FF8419F749B82D6A496F9D42DFD8D37DE1E36107F7FF8FAD7BFDE74303DF7DC73D75FBC58B66C59532BFD873EF4A1365BE95337BC4B2EB924DDB2EB6BF1BBE2A4AC0B1F17D27EFE804F1EB0C16D520FA1D67A0955F6AD0C479C714438FCB4C337EB9EEC479C7EC43BC60CB794BA4C17769B2EECF9D3D6455B1C0BED63E94047C773A98737B5E06D7921E64B5FFAD2E37FFEF39F3FB8298D115BEABEFBEE4B5DAC9F2FA5F3AEF26DF9CB3FF72F67F6BF79E97D47550D3E2694E5CA3AF47755BD3861D1EA86DA4B96FDEAF919C5F4013DFFFCF30FC6981177B25B748FBF2F7CE10B1396ECD4F1F7742CBC6550EA823C648F214D45F10E7BEDD0B44C91C66DB56CA94D134FEDBCFFCEEBB749EF6D7E3C74DFA1FFD0F5B9D9CEFBEDDC5448B725FD9CC34F7FBB4B7DFA7B0A8BF5742B8D14DD7B6DDD89AF862C1812AEBBEEBA0BB6E6EF1C3162441AD73B319E289F1D779637C4EFD38BF1FB54FD2EBE932BF6DA6BAF9B162C585015A3F7FBDFFFFE5C6B33554E9830E11DB77448B765F8CA57BE12D2F894F8FED48D66FD95F0B44C57C08F3FFEF8D05A319D15BEDDE349CB07E2017F56A91E05DFCDBFF542B366CDAA7DF6D9676FD87DF7DDDFF7D8638FED7DC8218774EBDDFB1F5BDF2EBBECB2A693B3E693AFF439A6DB711C70C0014DB392A67B08A68B12CDDDD4D367933EA7638E39A6B593B2DA8B2FBEB836EB867793731AC78576B818B459DB97959715E5E7B92D8E0B5D517B1E0BED6369A77DF9DCA8614BDFFFBEF7BDEFC93973E69CF5918F7CA4A2235A7F53CFBCD4CB203A29FE5B995F2A79DFA6478A0B867DF1BB9565DD574E5C745787FE9EAB16DEB660D9BA37E7EFB27AC164FFD44AE4AA4DF77249D844B158BCE8C61B6FBCBE3D5B88520B707D7DFDBE716738FBEAABAF6E683993F3B469D3DE71A53BDDEA284DE4B1EFBEF9D6955D77DD351C71C411EFB8475D1AF374E79D77FEC3EFBAF2CA2BFF3716BE69ECEBA1E9F7FA4437DDB5D75E7B563CF1BAF4FCF3CF5F9B26AC28F4D7BFFE352C5EBCB8A9ABDDFA93F02143C28927BE3D31513A014BB7D268965AEBD3E794AE04174A276FA935C2F833A02B1D0BED63D996E277E1F9EEDDBBFF362E6B3AE2E7FFFEF7BF6FE8D1A3C72D13274E7CBC94F2B6CD2F931EDFFFD0CFFC7AE11D8DD357BDD2213FFF8535F3EA7FFEFACDDD4359EE9CFB8FBEBFCE3F15681FA9EB576D6DED81F1A0FCF27FFFF77FD7A7712749BACADDF2D646E9607EFAE9EFBC1D6F9AE1B97022AC748531EEC09BBA7E358B85F5FC871F7E78493CE01F154F5A96CAFA167D4EE7C7CFE69BE3C68D5BF7CA2BAFACFF8C528B443A312B94BAE2B5F48D6F7CE31DCFD3095E1ACBDDFC3965DDF056C7CFFB734ECA00FB58FB58B69E9933677EF9B1C71E9B77D75DEDDB90982EC0DC7FFFFD7F5FB468D1974A2D67B9CEF0475CF8EAA46BA62D7FEAEC1BF61A1776EE31B8DD7EEEFC9A25E113B3BEBF6C55DDDA7F9E7DD88DD777C57F147FFCE31F1B671E32D3DEA193D8EFA9FDC271C71D972BA5FFA7934F3EB9CFC08103A7EDBAEBAE877CEF7BDF6B97AE37A9708E05F5C2A79F7EFAC58A8A8ACF74A6897C8AD599679EF9F174DB846F7DEB5BDD3734B67A7334CF381A4FFCC63829735CC071C13ED63E96ADEFF4D34FDFA5B2B2F2B9CF7DEE73034E38E18476297CA74E9DBA64F9F2E58795628FBB4E314066DC7BC69EF3D181237F77FA4B1786F66A017E61CDBC70E2AC1FBEB9AA6EF5255DB5F085AD21EE2057D5D6D68E9A3F7FFE133FFDE94FEB520BEEBB91DEFFE31FFFF88DACF03D41E1DB3EAEBDF6DA3BE389D9A77EFEF39FD7A6EE78EF566A8D4827655A2300EC63D976D2E457F1DC69FFDB6FBF7D4E3C675AB7A5E761E97D37DE7863432C785F2FD5C237E9340327FFF4B3DFDFF4F9EF7F69F0CFE6DF34B22C57963BB0F7EE5B3C09D6A44577D57C7BCEE5AB57D7AFFDC6ECC3A65CDE95FF4114CBC4265D45A94E6C9226DE193162C46F57AD5A75683CE8EF76D4514795A7C93C3657EA3A7DFEF9E72F9F3367CE23DDBA75FB74679DC9B658C593A9BFEDBBEFBEE9F60867F6E9D3A75B1A87BD859F77ED25975CD234F14A3C38FE41661D17705CC03E966DE7B9E79E7B2B7EE7AE880F87DF71C71DFBC673A8F2F7BEF7BDA1B509495B4ABDED1E78E08134B9555D2C7AEF5CB870E13137DD74D3E252CD55A79A35E8C1FFBAFD0F677FF7DC3F3CB272E667AF5F7C6FAF5D7B0C09BB55EEB8C9EFFFCB5BCF852FBF72D99BF72C7BFC859ADCBA8FBF3272F23427394E729CE46CBD02F8E9A79FFE6D3CF01FF8C8238FEC71E4914796A75B3A6CAA34FE3716BE6FC59DEE9DF3E7CF3FF5D65B6FADF58DE99003E4C23DF7DC73CAECD9B3CFACADADAD6C9E846C334EEED2F8B3DA748F4927658E0B382E601F4BE790668E7EFCF1C76FDD638F3D7E1FCFA38E8A05ECE0458B163555BFA9084E9186A6A516DE58E436DD92F2B6DB6E0BD75C734D5DFCBEBEBC7AF5EACF5E71C51517A7D9CC4B394F9D6ECADC07FFFBF6BFBF78C543171FFFED93EAFFB4FCA983AF58706BCF39D57F0F758D0DA1227E68DDCB2A42B75C4558D3501D16D72E0FD357CF0E9397FC29FC70EED5D5772E7BF4A5BFD72E397F87D5F3FFF9A9A3EE58EC9F81931C27395BDF534F3D3575FFFDF73FF0BEFBEEDB73E4C89165ADDDFEA1A5254B968471E3C6AD59B162C53DAFBEFAEA195B72CF3B365D3CB02DDB7DF7DD272D5EBCF80BF100D9FBA0830EDAA4ABC3E9561BF1A46C9DD608C7051C17B08FA5739A3973E6E2279E78E29723468CF84D4D4DCDB2E79F7F7ED0B469D379A9178A00002000494441547ADD72CB2D1553A74E2DBBF3CE3BEB1F7AE8A13571BB39CB962D9B180BE4B3264E9C78E1B3CF3EFB5A57C84FA79F60E14773AF3D78FEBAC5DF78A3F6AD7F7AB576D18E2BEBD7F45AD7505756912BAFEF555EB9B66F79AF97E366772F5AB3E4572F1EE936282D99D8A473E94A139B7CF9CB5FBEB6BCBCFCD458D4764BF7F66DCBCA952BC30F7FF8C3D5CB972FFF5D3C49384BE1BBF58C1D3B7640DFBE7DA7EF169D77DE79A1B2B2B2CD6DE7CC99537FFEF9E757BBD586E3028E0BD8C7527CAAAAAA9E8B8B11315E9E3C79F25E5D350F159DFD0F3C7FD899CFC4C599BEB2505CAEBAEAAA33BFFAD5AF3EF7A31FFDE8A27840EFD15A019C5A7C274C98B02616C03F8985EF4F14BE5B579A4C6CD4A8517BF4EEDDFB81F1E3C71FF9831FFC203760C0807FD82ECD387AE9A597563734349CEBA40CC03E96E23276ECD8CAEAEAEA11D9D33DD3F3AE3AAF4A99AF03D051AEB8E28A4BE3E2EBFFF66FFF5697C696149A376F5E6AF1AD59BB76ED77AEBBEEBA8B14BEDB46CAFB4F7EF293A37AF5EA75CFB871E31A172E5CF88ED75337BCECA4ECA41B6F34733E807D2CC52616BE47143EAFA9A919D55573A1F8053AD495575E79754545C53F5F78E185F5B366CD6A5AF7D24B2FA516DFFAF8F0DB13274EBC5296B6BDF8799C306CD8B09BCE3FFFFCD07CA1229B78A52E75C38B276577CB12807D2C45E9CC8D3C57FC02B497ABAEBAEA8ACACACA332EBBECB27593274F0EFFF99FFF59D3AD5BB773AEB9E69A5FC84EE7F19DEF7CA7EAC0030FFCAF8B2EBAA8F1FAEBAFAFBBF8E28BABD7AD5B3746373C00FB588ADA270A9F3434348C1E356A546BC35FBBC7F8B4E217E05DFAE52F7F39B967CF9E63D2B4FA8D8D8DA7FCEA57BF9A242B9DCFC30F3FFCF30103063C7CE79D7756A46E784ECA00DACFD7BEF6B56FBEFFFDEFFF45B68F3DCF3E968E76EAA9A77E202EB62F5C97CBE5060C193264542B9BF78DF12BC5EFB673D3367E3FD08E7EF18B5FFCBEB2B272602C7CFF47363AADB10B162CF8605CFE54373C80F6F7C8238FBC91968D8D8DEF950D3A406AD1DDB9B9CE8BDFB331AD6D140BE0312DDE33B4AB24A7B3A8CC3EA43505EB3ED5CA76BDB2E59A4DF8999FF2FD87CE25CD7E290B45A15A0A00A0A87C31C6B763BC18E380185F8F716C1BC5EF27B2599F4F8D4F2F8EF1788C618ADF8E978AD9DBB2BFA52646BAEF54BA1276458C1E31E667DBA5F52FC598939D94ED19E3E3319ECF5E6F8CF1CD18DF8BF1508CA5ADBC7F957F1300004089D923C6BFC4787F562BED3674E8D087E3729736B6DF71DEBC79A9A1F02731F68DB124C6E018B314BF1D6B748CD5E1EDC1D53B67CBAFC638ABE079C88AE2DAECF1B9217F65E38B05AFAF2CD8BEA195F7030000949AC363F48C31717D75BBE38E1BAC83BA77EF7E4E5CFC392B7C9BEBA792D6198ADF7475E1A8EC83BA37FB00DA92FAA69F1CE390ECC3BDA7C5EBBFF6BD070000BAA0BFC4F872F3933DF7DC33CDE1D16601DCAF5FBFC3CACACAEE686868E83209EA0C135EA53EE923624C8B717C8C17DAF890527FF5D4D2FB95ECF5B37CBF0100009AC6ECA65A2ACDD8BCEAB4D34EDB2397CBA59AA9B1AD37949797F7DF6EBBED3E121FF6C9561D50EA49EA0C2DBFBBC548B3DEDD90C503213F9E378DD5AD0BF9BEE7A9297E87182F87B7C7F0EEB7093FBBF0FD000000A568768C6FC5F86B8CA75E79E5952377DF7DF7B43EB7A137EDB7DF7E4B1F78E081BFC5870B62CC54FC76BCE1319E88F1688C41213FA1D57DD96B97C5782CC6E290EFF23C2EDBAE6FF601AFDDC8CF2E7CFF71C1845700004069BA2E8B5EC3870F7F3AB4B8BF6F6B860E1DDAB35FBF7EFBBCF5D65BA94EAA55FC76BC54E8A656DD34EB735D8BA48F8FF1EFD9E3B47EEFAC405E1EFE7140766B57355ABE1FA02B48B78EFB46C8CFE0D8727D9A5F21CD8CBF509A00DE95D4C276682BEB538FC3349FCDCB52C4B63066CC980372B9DC5E9BB8F9EE1FFBD8C70E983C79F2FD5D21379DE93EBF6DDDB7B765D1FAC666FE5C452FD0950C8B3137E46F7390C6F014F67849B33A5EA6F00578573E1CF2C3F47E5E702E5D963DFE8F906FD4699026B6952953A6A49EAFEF6818ACAAAA9A10F20D8317C442774257CD4D85AF07404949F73A4F13034E0FF9D6DFE6F9119E8A717D8C1D43FED672B74A15C016199B15BF8F64C5EE91D9FA3466F294186986DD6352912155A0F805A0E3DC12E36731EE8CF17056F026C342BEC537B5087F42F10BB0C52E09F90B8C9F8DF1CB183FCED60FCC960F6545B1E2173A9932290028197DB222F717A1F571686784FCE4172E7C026CB934FFCC41213F696B4B695E855D836ECFA0F805A0438D0DF96ECD6936FC34DEA7B2E0B583B2A277AE34016CB14BC3DB1710E7B4786D8F18D7C4784D9A40F10B40C7BA3C2B7A6F0CF996DF1D0B5E7B31E4BB3AD74913C016FB4E8C79213FDEB7A574E1F1CD90EFFEDC5DAAA0F3D1F5ADC4ADEBBEAEBEC7DA1EE5353D6B24631BEB5EDDFDADD0F6ACE6D05E52B7E62FC63822E45B2176C9D6A72ED197648F6F91A6AEABAE5B5D4D3C2EF4705CE814C785D0181A17CB44514AB7324ADD9ED3AD3A0765EB762E287E3F2D45A0F8652B5BD37BCDECFE2BFAEFB5B8A763EBB63668E9A0D71B1B1B67C8045B4175C1F2D8ECF1EB217F5B8EB46EB614755D6B7BAD9D118F0B231D17B6BD01CB062C88D5EF03325174FAB478BE3AE4C7F8A67DEBCA183D632C9226E87C747B2E71B57D6BCF19B0644063CFD53D25631BEA51DDA37EE0E281831A1A1AC6C9061DECE68293B334D3F3842CD238B4B931BE1CE35C69EABA1A7A369C3360F1807AC7856D2BB5FA0E5A30A8C271A128CD28D8CF3E1F6356C80F2D498F5397E8BD639C2C4DA0F8652B3B6DAFD31E5ED97FE5F777FDDBAE0D43160C693AD8B2754F6E062F1C5CB3FBACDD979785B273468F1EADC58D8ED63CA6F7E1565E5B15E35FC2DBB73FA20B3A69FF9366ACEDB7F6BC5D67EF5AEFB8B08D8ADE45831A86BF307C7979AEFC2CC7859228825B4AF32B4C951EE87C747BEE02C61C3CE6E29BA7DFFCC7DE2B7BFF66E092817B55ACAB28AACBFD4B972E0D4F3CF14418397264183C787051E5BEA1AC61556368FC73435DC3B78F1F7DBC131CB6A6151B786D95F4746D9F3BE47357DDF6E46DF7F779B3CFF503970EDCB7A2B6A297AC6C1DF565F5AB43597830AC0B5F3F76F4B18E0B008A5FDADB49079DF44C5C1C5C8C7F7B555555EA46B4DF6DB7DD367BCA9429EFF369429BD20457699295A51BD8268DF94DADC2AF4B57D776E2C8135F8A8B9132019B65688C9B3661BB2F857C576840F10B9B66ECD8B195D5D5D5FBA5C7B95C6E8FF47CD2A449D53203AD4AF7F54DDD9EE76E609B74FBA3DB43915E0C03D8C616C4F8CA46F6B3FD63BC12F263821BA40C14BFB04962E17B44E1F39A9A9A517171B7CC40AB5277E6E9CDFF7CB293B315E1EDD99F93BDB3133700B64C9AD1F99F62CC09F9199E9B677F4E73E9A4DB1AF688B1BBC21714BFB05972B9DC171B1B1BD73F8F8FCF56FCC246A5A277588CB131F6CAD6A52ED1A91B5EEA12AD2B1EC0BB736FC8DFE7F7C3317A6705F13931CE8CF186F440E764B6673AB5868686135AAC1A75F2C927F79119D868F19B3C16E38B59FC3A2B7A974A0F40BB49B7397A30C64352018A5FD862A79E7AEAE85C2E5738BD731ACBB87D7979F968D901000036876ECF745A0D0D0D1F8DC56FE1AAE62727C6B85986A04DBB64CB013126648F0F0CF9F1C0D3A507A0DD0C8CF1C790BF407F508C5B62FC8FB480E21736D9A851A3D277F39C16ABCBB3E5A7CDFA0C9BB46FBFBF45B1BB426A00DA4DBF6C1F7B905480E217B6D8D0A1438F686C6CFC87B1BD715D6D2E97EB53535393BA3EDF2A53F00FFBF4C293B0B64EC8D2ACD07F952E802D926E15377023FBD910F4B401C52F6C8A58E4FE9FD6D6C7C2B73C7BFD44C52FFC8374C12875BD1BB691EDB657FC026CB11931EA37B24D0F6902C52F6C54EAF21C8BDBD12DC6FB366B2E7E53D7E76F4E9A3449374E789B31BD001D6F8E14407132DB339DCE90214346B598E5B9A5B5F1F5016BD7AEFD806CC13FA894020000C52FC5F0A52C2B3B71239B343509C702F84CD98277F8468C235AAC4B5DA16F8CF133E90178D7C6C418D1CAFA4762DC273DA0F885CDF5858DBCDED4B2D5D8D8786C362B3490D7DA38F81FC7981DE35FA407E05D9B12634D8B75FF15E3F218474B0F287E61939D72CA29C786FCAD03362A757DDE61871D4E9235586F6E8BE7A362BC14635CC84F840540FB4AB33DDF11F23D6C00C52F6CBA58D01EBA99DBEF2D6BD0A61D43BE3502808EDBCF4E9306280EBA8CD2A94C9932E52771F193C27555555513E2627C8C0B264F9E3C41966083BE1CF2F7F11D1063618C0F64CBC296DF3474E045A902D82277C7F87C8C7401FEF16C59A82C3BC79E2155A0F805A0E33C1BE35F63A42104D7C478B3C5EBBD63AC8E3141AA00B6481A729526BEFA61C85F607CB345E1DB2DE85D098A5F003ADC6321DF7B62748CEFC5F86670EF5F80F6947AD7A48B8CA9575A1AEFFBCBD0FA84834027E3AA1440694ADDF23E19F2DDA047480740BB4BC349D285C67D629C2A1DA0F80560DB49AD135F09F9EE79DB4B07408748B794EB1B635FA900C52F005B4F9F56D6A55B1D7D426A00DAC5E056D65D1DF2B7970314BF006C258FB5B1FEE6A0F517A03D3CDEC6FA2BA4063A37135E019496A56DAC5F9505004097A4E517000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF000000A0F805000000C52F0000008A5F00000050FC02000080E21700000014BF000000A0F805000000C52F000000287E01000040F10B000080E21700000014BF000000A0F805000000C52F000000287E01000040F10B0000008A5F00000050FC020000A0F805000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF000000287E01000040F10B0000008A5F00000050FC02000080E217000000DEA50A2900E89AC68C1973442E977BB48D97C75755558D2F5C3179F2E49CAC0100C54ACB2F40173565CA94C7E2E2C54DD9B6B1B171A18C01008A5F008A522C6AEFDEC44DEF902D0040F10B40512A2F2FBF7653B6CBE57237C81600A0F805A028FDF6B7BF9D1E17AF6F64B3E50B172E7C58B60000C52F0045ABB1B1F1E68DBC7ECBFDF7DF5F27530080E21780A295CBE56EDBE081A2ACEC1659020014BF0014B5AC4BF3ECD65E4BB33C2F58B0609A2C01008A5F008A5AD6A5B9AD599FEFD0E5190050FC02501272B9DC94365EFA93EC00008A5F004AC28D37DE98BA3E2F6DB17A79434383FBFB02008A5F004A4ACB42F7CEA953A7AE92160040F10B4029B9B6F0492E9733CB3300A0F805A0B45456563E56F8BC478F1EF7CB0A00A0F805A0A44C9A34A93A2E5E4C8F73B9DC9CF87C85AC0000A5A2420A00DAD77DF7DDB74B5D5DDDB71BCB1A4FCA35E47629A6BF7DE9D2A5E189279E08871C72C8F0B3CE3AABB198FEF6C6D0B8241772B7D4D7D75F367AF4E8D9BE890080E217A0834C9B36EDD8DAFADA1B960F595EB77CFBE53BD5F4AC29BAFF87DD3EBA5B589AFD574CBA57771F3C60D980CF0C5A38E8B3F17338FBD8638F35533500B09E6ECF00ED24B5F8D6E7EA7FFBEAFB5E1DB070D7854559F816B3DACADAB078A7C53BCCDD7BEE80FAC6FADFDC7DF7DD7BC80A00A0F8056867EBEAD67D6FD990653D56F75DDD5D36B69DB5BDD6765FBAD3D2CAD02DFC54360000C52F40FBEF514F59B1DD8A7E9BB269C59A8AD07D59F750B1CAE8938EF0E6C037FBE61A73C7C80400B0FEFC4B0A00DA47AE213764635D9DCBD7968701CF0F08DD57BCDD385CD7AB2EAC18B122ACEBBF4E12DB49EA025DD6583640260080665A7E01B65671DC980BDB4DDFEE1D856F925A81D3FAB23ABB640000C52F4091AB78ABA2CD6ECE65B565A1C7921E920400A0F80528F2E277CD86479A54AC3512050040F10B50E452B767000014BF000000A0F80528668DB9C60DBF1E1A25090040F10B50DCD6F5DDF0AD8CEAFBD44B120080E217A0B8D5F5A90BAB765FD5EA6B6B87AE0DD583AA25090040F10B50FCD60C5DD3FAFA9DD684C672DD9E010014BF0025A0C7F2D6EFE5DB63450FB34103007420379504D80ACA6ACBC2805903428F25AD17BF7DFED627F458DA23AC18B122D4F5AA93300080F63E1F9302808ED57341CF30F8D1C16D16BECDBABDD92D6CFF97ED43AFD77B6905060068675A7E013A48F9DAF2D07F56FFD063598F4D7E4F2A7AFBBFD03FF4FA7B2FADC00000ED48CB2F4007E9B5A0D76615BE85522B70CF853D251100A09D68F905E820F595F5A176BBDA77F57E000014BF009D5ABA7D510A0000B63DDD9E81CEA27B8CE363FC7B8C1DDAD85F7DBA8DF756C6D87B033FFBC8189FDDC0EB4363F46965FDA53E160080D2A0E517D8565241DA37C6BA181F8FB13AC6A331FE2BC69BAD14C6212B8EEF8EF1B91837C4F85A8CB9310E8FF14C8C17DBF85D036374DBC0DFB224C61D3146C7F860F6772523637C2CDB577E20C6777D6C00008A5F804D950ACCFE311AB2FD509AD2380D8E2DCB0ACEA362AC8AF1E36CFB0F65EFF95D8C7131DE08F9D6E1B4EDE559E1DAD20D593417B169F6A895D9F36FC7382DC6A2EC795DF6B393276354678F3F1FE30FD9EFFEA18F0D0040F10BB0391E8AB173C8B7B8A6A2B76F56D04E8B313C2B4097146C9FD6A716D8E742BE95F73F37E1779465856BB3BE05CF3F5F50F836FB6DC1E39343BE257AA7ECF72683632CF0D10100287E0136472A62F78FF1488C1121DFD29B1C1BE3E1F0766BEEAE21DFF23B332B5A53EBEDB9315E8DD13BC66E59C1FCC9901F2FFC46F6BE2105856BCB96DF1D0BFE8E3D427EBCF045314E08F9AED5CD85F73305DBFD20C605053F1F0000C52FC0463577794EE379BB153C4ECBC231BFAF85B7BB2FA72ECEDF0AF96ECAE9FD6362CC8B5195AD2FB4386CB8E5B7D9EC2C4E0FF996DD6B637C35E4C712DF9B6D73608CF13196FBD8000014BF009BEBA9AC202DECF63C28468F16DB1D9FEDAF8685FCA454A925776207FE5D6932AE6B0A9E9FAAF0050050FC026C8954ECEE13F25D930F0EF92EC9A9E537CDCCFC648B6DFF1CE31B21DF1A9BE2F1901F933B77033FBF70BC6ECB6ECF43DA784F1A277C40568C1F5EB07EA08F0B0040F10BB025FB9E1DB3A236DDEA6878560CA771BD7342BE5BF2BF166C9F5A5E532BF1B090BF9D519A99794A7867B7E696D26CCEF30B9E17767BBEBB95EDD3F8E13493F4BF677F5F5FFB4A0080D2512605C03690C6EC4E0DF9B1B669CCEE922CE665C56D2A7C8FCAB6ED9EC52305FBACF362BC27E45B8093C1ADFC8EF91BF8FD0DADAC4B935E4DCAFEB637B242B93916F9C800008A9BD60C606B1B9415B67505EBFA64056E7337E5D40AFBE1909F802A7555FE75C88FC31D16F2B7463A22C62505EF1FB191DF5916367EB1EFA0186B5AAC4BF712FE661BC53500008A5F8036A556D5FFD984EDA6B678FE68561CA722764A8BD73EB5919F756F56346F4861E17B76B64C2DBEDFF7910100143FDD9E8162D35A97E58D15B6B59BF93BEAA4B96B3BE594538EADAAAAFA37990080D2A1E517802E6FD4A8511543860C195556567662C8DF377AFBECA58B64070014BF001491FADAFAB0FCF5E561FBE1DB87C686C6A675B9B2DC3BB6A95E591D2AFB56BE63DD5FAEFD4BD8EFF8FD42FFA1FD9B9EFFE9E77F0A879D7658E83BB86FD117BC43870E3DA2B1B13175733F36C62EBE2500A0F805A0C895772F0F8F5EF76838F05307865DF6DF254C1C3B311C79E69161E63D33C3B091C342EFED7A87FB7E715F38EFD6F39AB69FFDC8ECB0DD7BB60B739F9C1BDEF781F785C76F783C0C3B6C5858F0C282D0BD57F750B3BA26CCB863461839666451E5E1D4534F1DDDD0D0F0D1F8706C2C7C0734AF8F8F1B73916F0A00287E012872479F77747873C19BA1ACA22CF4DFA97FD8F7B87DC3F37F78BE69995A8107ECB4BE160C7D87F40D7F7FFEEF61D5D25561D1CB8B42CDAA9AA6D6E37E3BF40BF367CC0F77FDF4AE70C2F74E08AB97AD6E2A9C3BABB163C756565757A719C2CF8C716CAC717729A871531378D313852F00287EA1B3185F5555250B745A4F3FFD74D3CD987A0CEAD169FFC6D5CB57879DF7DF79FDF319B7CF082B16AC686ADD1D346CD03BB67D63EE1B4D45726AFDDDE723FB8487AE79282C9EBD38ECF1813DC26E87ECD654280F3F7278A7FD7F5DBA7469183366CCCC58F8EEBB81CD3658F0C67DCE04DF6CA0BDCF67A40014BFE08041517BE69967C22E3BED1276F978E71B3ABA72C9CA30F789B9E181AB1E08675C794618B0F380B06AC9AAA6D6DE6E3DBA35B5E8CEFAE3AC771E20BA5784DA35B5E195075F092F3FF472D398DFBD8FD9BBE93D977FEAF270D2252775EACFE3C9279F4CADB9FBDAE700008A5F8AC52429A0181C7CF0C1E3C3119DF36F4B9353EDFFF1FDC38C3B673415BE499FC17D9AC6F0A6F5A96BF3019F3C20DCF0D51BD6BF67CF0FEF19EEFEE9DD61C7BD760CE515E561E14B0BC3C19F39383C32F191B0F747F66E1A037CDCB78FEBB4135F8D1C3932DC76DB6D2FC6877BBF8B1F73816F36E0FC0614BFB0554C9E3C796E5C4C90093ABBB3CF3E7BFCCC41338BE6EF4D05ED1D3FBAA36902AC07AF7A309CF1CB33D6BF965A8A5F9BFE5A38E6EBC78427273F19F6386A8FA696E0D43A7CE82987366D93667DBEFD82DBC327C67DA2691C7067B3FDF6DBA7FDC73E69CC6F4D4DCDA8C6C6C6D373B9DC0971396833F63FF63D00A0F805A058BDFACCAB61970377097FFBCBDF9A26BB4AB336F7D9BECFFAD7536B6E5AFFC29F5E681A0B9C667E9EF7D779615DCDBAA622384905F1EE47EEDE348B74673669D2A4EAB8B83B452A84D7AE5D9B6E6B74622C844F8FCB9EBE0D00D03594490140D791EEEF9B5A6B97BDBA2CECB4EF4E4DEB96BDB6ACCDEDD34457CFDFF57CD8EDD0DDC2CE07EC1CEAD7D587BADABAA642B8DF8EFD3A7DE1DB5A213C65CA943B627C69E1C285FD524B705ADDD8D8B8CAB703004A9B965F802EA4CFA03EE183E77C30FCF5A6BF86834E3C288CFEEEE8A631C0637E36A6CDF7A45B1CF5E89D9FC17A970376696A114E91A4EED19D75CCEFC6DC7FFFFD75E1ED16E1AFAC59B3E603656565A7C742F8D3B1281EE0DB02008A5F008AD4A7FFFDD34DB730DA6FF47E4DCF9B27BF7AEDD9D7C203573ED0D4BADB6CE63D339B66764EB73A4A637DDF5AF45653CB6FF3ACD0CDF7FFFDE4F84F167D5EB2AED1D3528C1A35EA4B43870EFD442C8247F8C60080E2178022D5F27EBEC97B0E7E4FF8FCD59F7FC7BAFD3E9A2F909B5B79BB8AAC45F8D62C00801261CC2F0000008A5F00000050FC02000080E21700000014BF000000A0F805000000C52F000000287E01000050FC02000080E21700000014BF000000A0F805000000C52F000000287E01000040F10B0000008A5F00000014BF000000A0F805000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E217000000C52F000000287E01000040F10B0000008A5F00000050FC0214A186F286653DD6F690884EA07B75F7505F56BF52260000C52F403BAB2FAFBFA3FF8AFE0D32B1EDF55BD12F349635FE45260000C52F403BEBD9D0F35FB75BB4DDDA9EAB7B4AC636945A7D072D1CB4265793FB9A6C00008A5F807676F4D147BF5E16CA4E79CFECF7AC1DB260485311C6562E7A170D0AEF7DE9BDD515A1E2F3A3478F9E2D2B0040B30A2900683FC71F73FC1FEEBBEFBE3DFB2FEF7FED764BB63BAC7C5D799F62FAFB57AD5A155E7EF9E5B0E79E7B863E7D8AEA4F0F75E5756BEB2BEA9F0E8DE1ECE38E39EE25DF460040F10BD081520B705C7CA418FFF6AAAAAA097131FE99679EB960F2E4C9137C9A0040A9D0ED19000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF0014182305004057532105002563B718BF8FD1903D1F15E3C1186363CC28D8EECA1853A40B0050FC02508CE6C53829C69C18C363AC8AF15C8CDAACF8FD718C33630C932A00A0ABD1ED19A0B4F4CA968517375F8CF1E518E363CC8FF1963401005D8D965F80D2F2468C81319664CFD345CE3D623C1563EF90EF1A3D22C6F352050074255A7E014ACBE8ACB8FD54F67C568CD9312ECA9EA7AED1C74A1300D0D568F905282D0F84FC98DFF9D9F3FBB3E52F0BB6B92646BFA0FB3300A0F805A00855C6B87913B65B1BE328E9020014BF0014A363627C2118CF0B00A0F80528618FC63820C6F4184363CC6D659B1E31BAC7787F8C6A29030014BF00149BE5213FE6F7A090EF023D2EC6E331FE476A0000C52F00A528B5EAFE6BB69F4F512725004057E6564700A56BD7ACE855F802008A5F29002829B7163CBE5F3A0000F2747B06282DDF09F949AFD6C47838C615318EC85EDB37C6ACE056470080E2178022B72EC68C18C3B3E797C6581CA367F6F8CC909F080B0040F10B4051FA63C8DFE2A8217BDEBB8DED2E942A0040F10B40B13A2EC66E31E6857CCBEF7829010050FC0294B2CA6C79748CFF1BF2333EA7D99F9F0EF996E143A5080050FC0250CC0687FCC456699CEFAFB3383EC6BD52030074556E7504505A5297E725D9E30905EBEFCD8AE04A290200BA222DBF00A557FC4E8BF1C31833633CD7E2F5749BA33411D61AA9020014BF0014ABDD0A1E5F1FE3F3520200A0DB334029BB5C0A000014BF00A5EE71290000C8D3ED19A0B4A47BFB5E1063DF182BDBD8E635690200BA1A2DBF00A565765600EF1963C71817B558EE1FA35A9A0080AE46CB2F4069B921DBB7A796DF19D9BA275B2C3F254D0080E2178062755D8C4362D4C5688871501BDBDD2B550080E2178062D57C5BA354F4BE251D00008A5F8052F5871857C41814E38E18EF8971708CE121DF2A9CE67A7823C607A50A0050FC0250AC3E16F2637AD3C45787C65823250000667B062835BBC59815E391906FFD9D18E3FFC4182835004057A6E517A0B4FC264655F678488C2FC6E81EE347314E0FF9C9B0DE0C6D4F860500A0F805A0D3FB48B63C2AC627633C15A336C6FFCB0A60DDA00100C52F002563518CEF173C9F2F250080E217805292BA3A5FD7C66BBF0BF9D9A0A76DE4678CAFAAAA924900280DE3A540F10B508A3E14E37B213FA9E10531A684FC58DFCF66AF4FDBC49FE3400900287E01E8B42E8C31277B9CEEEF7B578C7E311E282880DB3249FA00A06439CE03505252C15B912D2F0FF96ECEBBC6F863C8DFFE080000008ADEC742FE7EBFDD0BD6ED9C2D7F10A3528A0080AEA65C0A004A46EAD2DC27C61B315664456EEF2CBE13E399184FC7382FC6C3D20500287E0128462FC4F8708CB5317E18F2E37E0F8D918BB17B8CA531B68BF16A8CD7A40B00008062B55BB6BC365B0ECF967BC718283D004057A5E517A0B4A4F1BE7D43BEC577518C0342BE2BF490181F8DF1A81401000050EC46C618DC46CC971E0000004ADD7029000000000000000000000000000000000000000000000000000013EF7BBF00000088494441540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A068FD7FDE8CD9EF8E2563740000000049454E44AE426082, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('212511', 3, 'source', NULL, 0x7B227265736F757263654964223A22323132353130222C2270726F70657274696573223A7B2270726F636573735F6964223A2270726F63657373222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C2270726F636573735F617574686F72223A22222C2270726F636573735F76657273696F6E223A22222C2270726F636573735F6E616D657370616365223A22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566222C22657865637574696F6E6C697374656E657273223A22222C226576656E746C697374656E657273223A22222C227369676E616C646566696E6974696F6E73223A22222C226D657373616765646566696E6974696F6E73223A22227D2C227374656E63696C223A7B226964223A2242504D4E4469616772616D227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D41453336323135452D353838452D343946332D423734332D383330454243423330344130222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5BC80E5A78B222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D38323934394441432D433932442D344241422D393932342D314632373945353044424338227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A37392E32323232323232323232323232332C2279223A3131367D2C2275707065724C656674223A7B2278223A34392E32323232323232323232323232332C2279223A38367D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D39434334443631332D313435312D343133432D414638352D383046383839314244313934222C2270726F70657274696573223A7B226F766572726964656964223A226D616E616765222C226E616D65223A22E7BB8FE79086E5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A7B227461736B4C697374656E657273223A5B7B226576656E74223A22637265617465222C22696D706C656D656E746174696F6E223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C22636C6173734E616D65223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C2265787072657373696F6E223A22222C2264656C656761746545787072657373696F6E223A22227D5D7D7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D43423837323236392D433930412D343839342D394538382D304538384238364543384446227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3238382E32323232323232323232323232332C2279223A3134307D2C2275707065724C656674223A7B2278223A3138382E32323232323232323232323232332C2279223A36307D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D38323934394441432D433932442D344241422D393932342D314632373945353044424338222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39434334443631332D313435312D343133432D414638352D383046383839314244313934227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3138372E36303530353132333635343432382C2279223A3130302E39303833313534363834373331327D2C2275707065724C656674223A7B2278223A38302E31373533333037303739303031392C2279223A3130302E32393039303332383135323638387D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31357D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D39434334443631332D313435312D343133432D414638352D383046383839314244313934227D7D2C7B227265736F757263654964223A227369642D32323745363933372D423435362D343735432D424332332D453842383539374238354131222C2270726F70657274696573223A7B226F766572726964656964223A226872222C226E616D65223A22E4BABAE4BA8BE5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A7B227461736B4C697374656E657273223A5B7B226576656E74223A22637265617465222C22696D706C656D656E746174696F6E223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C22636C6173734E616D65223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C2265787072657373696F6E223A22222C2264656C656761746545787072657373696F6E223A22227D5D7D7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D37363332463035442D343046342D343145362D383039352D323634444444333541324332227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3439372E32323232323232323232323232332C2279223A3134307D2C2275707065724C656674223A7B2278223A3339372E32323232323232323232323232332C2279223A36307D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D43423837323236392D433930412D343839342D394538382D304538384238364543384446222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D32323745363933372D423435362D343735432D424332332D453842383539374238354131227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3339362E34323134343039373232323232332C2279223A3130307D2C2275707065724C656674223A7B2278223A3238392E30323330303334373232323232332C2279223A3130307D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D32323745363933372D423435362D343735432D424332332D453842383539374238354131227D7D2C7B227265736F757263654964223A227369642D42383042363037442D363646352D343834422D383041312D373935334238444445363943222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E7BB93E69D9F222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3632382C2279223A3131347D2C2275707065724C656674223A7B2278223A3630302C2279223A38367D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D37363332463035442D343046342D343145362D383039352D323634444444333541324332222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42383042363037442D363646352D343834422D383041312D373935334238444445363943227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3539392E393730343836313131313131312C2279223A3130307D2C2275707065724C656674223A7B2278223A3439372E37333433373439393939393939342C2279223A3130307D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D42383042363037442D363646352D343834422D383041312D373935334238444445363943227D7D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A313230302C2279223A313035307D2C2275707065724C656674223A7B2278223A302C2279223A307D7D2C227374656E63696C736574223A7B2275726C223A227374656E63696C736574732F62706D6E322E302F62706D6E322E302E6A736F6E222C226E616D657370616365223A22687474703A2F2F62336D6E2E6F72672F7374656E63696C7365742F62706D6E322E3023227D2C227373657874656E73696F6E73223A5B5D7D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('212512', 2, 'source-extra', NULL, 0x89504E470D0A1A0A0000000D49484452000002A6000000BE0806000000E761CD40000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000000467414D410000B18E7CFB5193000000017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA793000000097048597300000EC400000EC401952B0E1B00001B104944415478DAEDDD097C54D5BDC0F1FF9D992C6C090442202C52A4802B8BA855A1202250B18A169B44C402DA67DD5ADBBEF7146D2D7EACFADADA576DA9FAEA82C56042D14FA90BE256A3E02E104411102112246058122021093373DFF9E7CE984B4C3090643299F97D3F9F6366EEDC593CDCFF9CFF3DE7DC33220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4178B2A0044366FCEB9FAC081E3675556669E5A51715CE76030914A69EE978B15908E1DB797272595AE32B7EF1B39F2D667A8156208C41040620A34E2D34F677E7FEFDE11F36B6ABA77CFCC7C41BA76FD4852533F118FA786CA69264D4CF6EF3F5ECACA4E96929249C160D0F7597575CA65E3C75FBA86DA2186400C0124A680CBA64D33EFFAE28B0BE60C18906FF5EBF7AFDADE09B49EE2E28B65F3E619871213F7CF3CFBEC594F5223C4108821A03E2F5580786D5077EE1C3FE79453EEB43232969B06D5A6525A596AEA06E9D1E33D6F49C9F7BE3F6BD60FD7CF9FBF781DB5420C811802484C11D70A0B6F1B5D5A3AE6316D5075C8B1BE9A83A9B2FD93F1F2C5DAC952B27EACECDBF96DF1FAAA25B9CB2E2AAF991213CB242DED03EFB66D174EB9FCF259CFE4E6E67E49AD1043208680300F558078535595B948871E1B6A50FDD59DE4B3B77364EFB693C55FD3A176DBC17D3D656BE1F7654FF1A9545E0BE8DCB948060D9ADF2131B1F2116A83180231049098226EAD5A75D7797E7FD7DE3A1FAE21BB3E1F2187AABA34F8D88E0DDF15DB26645A42BF7E4B3C3EDFC1C12FBFFCF277A80D6208C41040628AB864DB093FCBCC5C6A357691C6C1F25E8D3E577B7FB437082DA34F9FE7F5CF0FA8096208C41040628AB8545DDDFD0C5DCEA6D14637E8FB8646999069296969ABBA793C3593A8096208C41040628AB85459D93BBDA1797188BC2E5D3E936030E1446A82180231049098222ED976828785BFA3E4CBA7F6DFC16265106208C41040620A3424A143F9911F4FAAA092006208008929D0FABAF75F2309C9FBBFB6DDB282923EF07DB13C7E2A09208600909802ADAF63D7ED92D66FEDD7B66B43DB7B68011504104300484C81C8F1D7247F6D5B3090585B00104300484C810834A61DA4F8C3EFC99EADC31B7C6CE31B3365DF97C75351003104A095F8A80240E4C0EE7E52BC664AA3BF58A3F4F7BF8B3EB854BAF72F945E43DE106F42351507104300484C8196113894243B379D23BB8B463479E1EFDD5B87CBFED26F49E689AF494AC6A7542288216208400B61281F714D7B78766D39EDA87F8DA6B6E767E5D423FEFC22400C114300484C81266BEEC518017F02950862881802D04218CA475C1B78663E9500104300A2043DA6000000203105000000484C01000040620A000000D4C7C54F0000006D60FAF4E97DFD7EFF54CBB2C69ABBFA9369BA7E5A6753AA4CD961DB76A179EC4DAFD79BBF70E1C26D24A631E68C85975FD6B928382BB95C4E4F2EB7527D07ED044F8D48D06BDB810E96BFBA8BECAC49B13F0874F3DDFDEA4D0BDF27640000404BCBC9C9996AFE5C1FF4FBBF6B12CF86D65C4B366580796C80F93B351008FC213B3BBBC0DC7F342F2F2F97C4B49D3BEF7739BFEF506A5F9FB022D8715F1F91D253450EF6B0A5C69C9304CDE1E0A9B12C5F952474D8257D53B65A7DBB6E084CBDF8869C2F2D4BEE59F297BCFB08210000D05C26B91C60D9F643B66D4FAADD60128DA330CE3C6F9C798D6B4CA23A6BF1E2C59B484CDB9931F3B2CF4BD9224FFB8AEDD46DA345CAF5BCA38159B59A9CD6684931FB0C14291E27925A64F7CC5C21FF3BF59AAC9F275404272ECE5DBC8190020000C7222B2B2BDB63DB0F042DAB5B789BD7B6E5E41D3BE4CC6DDB64D0AE5DD2B5AA4ABA54574B6562A29425274B51D7AEF25EBF7EB22A33530E79BDE1A78DF67ABDAB737272AE8DC5DED3984D4CCFFD5DD62369AB64F6CE5162ED1829477D999726B1A6583D575BFDFBBCE35B3BF5C69CFFA6F71400001C43527AA1C7B2728326170D27A4DFDBB041267EFAA9A457547C6DFF8E3535B52573DF3E397BEBD6DA24F5F9A143E585214324E0F4B276B66DFB09939C269BE4F49158AAAB98BC2A7FCC5FB39FE8F69975D5A68B4D523AAA79FF975F8E10D930CD4EF054D97FB8F867D9B7125E0000E02892D26C93942EB14349A9269BF72C5B26D30B0B1B4C4A1BA23DA9BABF3EAF5F79F957DB4D72FAB0494EAF20318D62E7DE9D3DAFC71A99BEFE872215BD5BE6352BD345D66789CF572173A75D95733561060000BE89CE2935D9E803E1A4744869A9CC7DF5D5C392CBA3A1CFD3E79FB273A73B397DD024A743494CA3D079F7649DDE7D9375EDE62962E97CD196A4AFF7E9259260F9EDFB63E900000000AD96643D129E53AA3DA5BF5CB1A2760E6973E810FF4D6FBEE94E6E7558FF6112D328D469A767E98E51B6A7A57A4AEBD39ED32FCE968E8712ED45841B0000688C2E091514394F6FEB9C524D269B9B94BA93D31BDF7AABF6754346C7CA907ECC24A613EFC899631DB2BBEB9CD0D6A4AF7FA8A31C1F6B733ADA8BECECEC5F69B08F1B378E1F87008821209A63E5FAF00DBDD0E95887EF1BA3AF77E1FAF55FDDB76DFB9A58A8F798F9624A2AB3FF73DB18B182DED67FAFADE3A5D3C0A5C19BCDCD5C4237E2EE34C127191919E5E64BE359CBB216FAFDFE158B172F3E108D1FB6A44464DB3691D34F3F7CBBDF2FB277AF487AFAD1BD9E394996C4C4861FFBDBDF4466CE6CFCF1F03EA3478B9C78A24861A1C8F0E1CEF6CF3F1739EE380EAE788AA15EBD7A556465652DF1783CB9D11C436E0B173AC76F538FD537DF14D9BF5F64F2E4BA6DC1A088C7430CE1A862A5CAB437AF9AF6665E5363457FD12918089CABB76BAFC0DFB8B1553EE06493F02E1D3C38BC94D4689DD39A9F9F5F4462DAC626FC317B846F8374AB5DA73402F61FA76BE27AFAC7C201D05E992F8854F3E70AF3A57185D7EBDD63FE2D9E31DB16252525153CFEF8E355D1F239172C10193850E4B4D3449E7842A47B77A7517CFC7191F1E3457EF21367BFDDBB4556AF766E57563AF757AE14B9E00211FD3E1B30C06960B76E15B9ED3667BFE26273C6DCAFEEBD3A751279FF7D9173CEA9DB567F9F0F3F14B9FC72E7F68D378ABCFAAAD308EBB6E5CB1B6FB011933A9998996E6268BA89A17D2686FE65EE3F196D31E4A631A4B1D05802F8DC73871FC36FBF5D978CAA22F36DBD6C99C8534F39C73D318426D25F619A6262658A3991AB34B1F2A2B9FF687272F2AB8DC54AE867466BB3C561252592A65FECAD40AFD61FB97DBBBC5B77904E33E55E12D3B6FE9FD823D7EF1B2056242726EC1D6CFBD30BDBFF011023D24C9969BE346656555555982F8DC5E60BE15F252525CF151414F8DBEA4369EFA6F698DE7CB3C84B2FE919B439567D4ECF4A8F1E7549A9D284F58413449E7D56E4B2CB44BA741179EB2D2731D52475CC1867BFA54BEB9EF3E49322279D54D710EA459AA9A975FB141438AFABEFAF3DB4E6FB4B0E1D12D9B44964D72E91BE7DEB7A86FAF7A7418D737AB9E80C1343334C0C55E5E4E4FCC3DCFF675BC7507D1B3638230D8DB9F0422791DCBCD9399E93939DED1A4F1A031A63D75D470CA1599D221DCD9F4BB49850A931EDCDF366DB82FAB162B68D0DDF3E430FCA56A4AFEF4A4CC792984681844A19BBFB84C8BE67D90049EBF1919C4F621A7DBD40E124B557AF5E7B4C036B5242F97B5BF4023DF698C86F7EE334A40F3DE4F49A262589DC7AABD3806A43E77345609F3EE6584E70F6D1C64E135B6D20D7AC697C68515F274CA70C68E378EAA9CEFDA1439DDE5AA50DEA8E1D4ECF51B76ECEF6471F753E9BBE67D8451799CAFABBB30FE2B777C8C4CF95E6EF952686B427F525FD7DEE68E8490D4F813912EDF15413273A31A1468C70924CBD7FEEB9C4105A8C7E335F62E2E5928C8C8C4AD3DE2C37F7EFD3583149EBF0F04E03F7EC69D50F31A0ACCC7D77787BAFD498484C13F7591995E97644DFF3600FF39F803DC27C69CF2536A3569AF9C2C8367FB3CD97842E72BCA9B4B434226FAC43889A546AE3F4FAEB220F3EE8346C7FFEB3C8BC794EE376CD35221326E8959BCE7D6D74B53766FB76A7C74793D1708FA9EEA7DC3DA6DA8B73E79D4EC2ABD6AD737A62B571D5214B9D673F678EF358E7CE2283063949AFF600E93EDAA0EA67D3A151A5AFF5EB5F47B6413D70E0801043514D7B52A799389AA63164FEAD3E8B540CD5A7276A3A57BB29D78F7CFCB1D35BAA31A1B417544FF0860D3B7CBFF61E43A5A59D64D5AA55C45014D09E54132793CCCD491A2BC6574949D7AAD63D9FABF7FA3D484CA380B7DAEE78A85384CFDC7588C8B67408F9378464BBF9E218F4DE7BEFD52682ADEDACB39C796CAFBC2232638636204EB9E38EBA7DB4B7E5A69B9CC454870075EE9B0E11EAF0A0366C4DE931D5FDB521543A6D407B89B401D5B96EDAB0BAE930A5EE9F9B2B72E595CE7B4C9DEA3CA6C9B07E9E8E1D23FB6FB2D1B92080186A3F8E8F540CD5A7B1A4C3EE7A02A7C7724646C3FB69423AA281D559B427D4B526794CC4D0EBAF7F4B563B93D389A1286C72C2375A6A89A8C6E8D251EE1020318D021EBF788389917D4F7D3FCBF925873B88BF883AE62F6093986E1E3E7CF8C0487D506D2F34A10C2799DAD8E9C5197A5B1BCF7FFFDB994F1AA643809ABC8E1BE7ECABBD31EE1E539D2757BF61D5463ADC8BBA76ADF35EFADA7A3B33B36E3F6D641F78C079FC8A2BBEDE78EABE914E4AD5E0C183B5612586A22F8602B66162C6573F86468D1A35B02D3EB426A63A4FBB572FE758BEA391A34663262CDC5EEB367DBE269E7979725862DD9E6368ECD82DB279F30C62A8EDDB1BBDBCCE532F568226846AB7ED4F4A6AD5E4B4F2F09E8BAAF65EE931919806BDE2F7D4882F92C9A9793FB1C5AE5E94BF682EB11B39D9D9D94D4E4CCD974299F972784597944A4A4A5AA6F3E366CF9E1D91391F3A34FF8B5F38BD2F59597573D694368ADA38BA1BD0FACFD57972FA5C6D58B5E1D4BF7A45BE26A9EE2B84758E6AF875DCBD3D9AC4BA7B7BF4E2292D37DC70E4CFAD89F1D12E61D51C9DCD87CDCFCF2786A220864CBCE8851B41132FFA4DEA357FDB3486DCF4244DA7B78487DC350EB4B3DD9CD77C452F2A0C9F0C86E9CA164AB7E963FA3ABAD493FB386FCF31949E5E2123478E949B6FBE99188A7C7BE34E463DF563A5AAAACA9CDAC8207DB0CC9CE9B466625A967C5827E92E12D368484C93A522A14252AB239898FAAA6A4F897613BA6D2BD4AB63B936E9FA72CB4C59D4A14387574C435AD6169F4B87E6C34BC76862F9DA6B5FBFE8C22D3C6CFFC61BCE73B4674893D38A0AE74A64EDA5D1C6B2FEDC355D4BB1A1DE1E6DC48736E18773B507D6DDF8BEFBEEE1178320E6699F62C0940EAEDED1A88821B75B6E11B9D77599A90EBD4F9922F2FCF37543FABA8494165D01A3674F2716C2173FE914009D2FAA71161E7A2786700CED8DDF15279E23C58A496A0BC389E9E6B4B4165F5CDFADA86B57F7DD4212D3281048904F3A96CA77AA2378D146A71DB2CDB2DBFF01D0DE859252FD7278CA94E79393939F8B863518B537E7AEBB447AF71639FBECC67B47754D44ED4DD5354A35019D3FBF6EC999F05A8ADAF0694F8D5E70A1FBBBE9C51B61EEDE9E867A9C0E985A3A7830743217747A90162F767A80F4FD9536E4DACB14EE9942CC4B7425A3511543613A64AF8BDE0F1A54B74D93D1BBEF1619354A64EE5C6754227CDC6B0C8417D1D72453AF98D784557B4DC3EB99124338C6F6C6D7D4583149ECEB667F5D5252DEEBD74FC66ED9D26A9FEB3DF7309AC8EB24A6D170B0F8E5D994AD72C6DEC1915BC9B4DB46DB7C4D59AF13AA6D76E6AA67A6051E8F27BC145459347D3E1D62D4A5A2C24BCD2C59E20C196A63A9F34AC33D34DA23AA8DAC967003A9C3943A17353C1CA8438ADA0BA3F4A45BAF306E688171BDA25F1BC5867A79C2AB0368C21C6E74B5072ADCB3A36B3BEA851B7AC5B15E240262A8ADE90999FE7293267D7A52569F2690FA0316EFBCE31CFB6E9A406AC278FBED222FBEE86CD393C46F420CA1A562C5E7F32D0904027FD29B6BCCC1B7A763C75659645F87F1576666EAF49AF0C8E15324A651A0C341EF026B53E0579F8F970E914A4DBB1659DD63E10068877E6DCE428BCC99EA53D1FAEB3461035D9788D41F3E3C126D847FF4A3A37FBFD9B38FFC538AFA19DC9FC33DDCD8588F2E88A1B6A2276B975E7AE47D747A4C435364525244AEBA4A64D6ACA35BF49E18424BC5CAC2850BB7E5E4E41498A47642C0B2E485C183657A61CB0FB22E1B3244FC5E6F38295D110BBF46191389A91E00D366E77C9C5A648F2A8FC0F5A2DD36DA1F5935529E9FBFA888B88D2C1374BFA5161A9698481D8018723BDA5F622286D0C2B1F257536A57A17EC12490DFDDB2A545E79A16A7A6CAB343877ED55B6A92E8FF8B89B88D950328E1A0DCD5FF356BBF045BFFBD06BC6CF93C96E721C216000034242F2F6F89F953A0B7B5D7F4BE73CEA95D3AAA25E81251F79F734E205877F1EF8A9292927C12D3283B00122BECB5BD3F90565DC9B6DF6BF61BDE6AD9152B070000006835B324B484D3F69414F9E3E8D1CD4E4E35293549AEFD454A8A37B4E980C94F7F5C5050E027318D32965FA6F77E47AA3A6FAF5DFEA4C575DE2145196B3C4363E900000000AD43E77CDAB67DA3B9599B336C484F97B9E79D573B0C7F2CF479B74F9810589B91F1D532892627B9362F2F6F7DACD49927D60E00EB90FD93414BACFD89FB5AF6B593CA65C790459260D9F2CB583A00000040EB59B468918EB0FE389C9C6ACFE99CC99365E1F0E1F517C76F94EE973F6C98DC3279B2BBA754570C98637292DC58AA2F5F2C1E00D9D9D9C9272D907B375E2A5D2A32A5D9D3D93B9758EB86FCC34E15BF3D2F6F517E2E610600009A2A3F3FFFF1ACAC2CBDB2FF41CBB2BAEA9CD3E7860EADBD286A5849899C515C2C03F7EC91AE5555B5BF12A5C3F59A8CEAE2F92BFBF695957DFA04ABBD5EED4C0CF794EA7AAA379A9CE7F158AB2B5F2C1F004317590F947C47766D3F53328FB16FD8DFFF6579B9E747F648B1E596FC183C00000040EB0B759CBD6312D387751929DDA609EAAACCCCDAF20DDC59CC0A9D5218ABA3B7BE583F00FABC633D9CB1DA0E6C99248965C74B46539F9FF689FDC680973D291EBFDDC51C00E3F2F219BE070000C72EB4CEE8F9263F9966728B6B4C823AEE2872B115A63CBA63C78EDC58BECEC5172F07C0B79FB1AE09786D39D05B8A779F2C29077ADA9DFC5D24239068F9BC35B2DB77400E74DE21C53DD64975972FAC4112D0B313FBFE583F00000040C4F313FD819EA7A64F9FDE37180C4E3309AAFE08F528537A99A2134F75D85FAFE6D755F9F557269F8A85C5F3E33E316DE80048DD169C9652AC0780A507803F54079D4CD15F402E730E003B6E0E000000D036F40782CC9FFB4205F192987200000000443F0F55000000101159A61CE7BAAF1D84BF6FC2F396C54BCE46620A00001019634CF9DC755FA714760CDD0E2F6FA9734C4F0B25B0E152634A3FD7FDBB4CE9168B15E48BE38363B029E9A6BCE9DA7653E8AC247C05FE99A69C250CFD030080E6196ECAFC50FE3138B42D68CA00532E30E574531E30A5D49495A184B532B45F852BA1D515866E8BD54A8AF5C454CF4CBA9832DE94BDA6AC0E9D89CC0EFDE3EFAFB7FFB07A49E845A1FD0000008E95F6868E3065A13843F7F798B233F49826A54B43C5ED5953FE18BA9D19DA4FCD34253B94D49298B633CB437FBB9B5262CA2BA6740E25AAEE03A04FE880E91BFA87D7B397BCD073BE30657228B17D97D8020000472939945CCE31E56953768B33DF543BC8B45774AA381D694FB89EF3A52B5799E1BA7D4AAC26A5F1909836E50CA626947CEA01A1BF675B60CAEDA1339AA75D6728DAFD7EA9D40DF303000034C53E531E136764767928FF7821B43D9C70A6D77B4ECF500EA2CFE96FCA2C717A59CF8AE58A8AE5C4F444530686CE2AC2FFA889A1B39601A17FEC8B4D992B4ECFE8845022AABDA96F859E5B2DCE1CD49AD0D9CD6E620B00001C835C53FE29CE34411DC1FD2F53DE0E3DA6B989F684DEE1DA5F87F1DF17A767756B281759EA7A0E89693BB32E54944E320E5FD4E41ECA770FE7A78712543D13F95DE8AC242394B04A28B965281F00001C8B4952F7C33E43433947380FD1DCA453BDFDFF6DCAFDA6FCC29479A6BC64CAFF88D3A14662DACE9D24DF7C65BDF6ACEA4F8269D7F9BE50325B2475F3542F21A60000C031E81E4A3035BFD02BEE5F09E515E1CEAFE47AFB6B67D9D5A6DC22CE352E4AAFD6FF9B38530034697D2494DC9298B633BACED7F626ECA7DDE73F15679DB0D389210000D042742AE022533E746DDB164A50556757EEA149ACF6A8DEE3DAB726F477B32953C419C52D89C58A8A87C4F43FC4199AFF267A76A2DDE87A65DC0DE20CE59F2DCE4551F152570000A0757C58EFFE7CD7ED03A6BCE64A6297D7DB7796EBB65EC51FB3F34C6339D9D2330E5D205FE76754B9B66BF2B9B181A4F42CD7D9C9BDE24C4ED649C7E1ABF00712530000A00D04E3E57F349613533DE358DAC076ED09FD73BD6D3A6FE3997ADBEADF9F475C000000B41E0F5580786259FE403098484544C3E97FEDBF831DA02688211043008929E2526262D9E6F2F213A88828505E3EA4C4A439ABA9096208C41040628AB864DBBEE7CBCA4E0952136D6FE7CEB1BA60740135410C811802484C1197AAAB53FF5E5C3CB5D2B6BD5446DBF297944CD60B149FA62A88211043008929E2D2C489130BFDFEE4F7B76EBDA49ADA683B1B365CB73C10482A3AFFFCF3DFA13688211043008929E296DF9F70DD679FCD3C585E7E02170DB4817DFBBEBDA9B878EA89C160F0E7D4063104620870632C067127373777D79557CE5EB973E7D8C9DDBAADE9909CBC8B13B48835A8833FFEE083BF249BAF9E6B274E9CB8821A2186400C0124A6887B0B162CD83C63C6D585DBB74FBCC8B67DC5DDBAADED6E593615D37A0EAC5BF7CBA5EBD7FF748836A813264C788E2A2186400C01F5595401E2D98B2FBE38D4E3F1FCC9EBAD19DEB3E71B9B32320AD2D3D2561FEFF1D4F013B4CD140C2696EFD933ECA39292F37797968E19120CFA8A75E871D2A4491F513BC410882180C41468C44B2FBD34DCB2AC1F989BE34C19654A32B5D26C7E530AC559CEE6692ED22086400C010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022E0FF0121C2023A02FEDB030000000049454E44AE426082, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('247534', 1, '请假流程.bpmn20.xml', '247533', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0A20203C70726F636573732069643D2270726F636573735F6C6561766522206E616D653D22E8AFB7E58187E6B581E7A88B2220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D22737461727422206E616D653D227374617274223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D22757365723122206E616D653D22E7BB8FE79086E5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572223E3C2F61637469766974693A7461736B4C697374656E65723E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D227369642D30443235384332342D314631392D343233332D413937362D4130443843423944414541432220736F757263655265663D22737461727422207461726765745265663D227573657231223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D22757365723222206E616D653D22E4BABAE4BA8BE5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572223E3C2F61637469766974693A7461736B4C697374656E65723E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C6578636C7573697665476174657761792069643D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D227369642D33334642463234452D464537302D343730412D394442352D3942313838314531333834372220736F757263655265663D22757365723222207461726765745265663D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E3C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E3C2F6578636C7573697665476174657761793E0A202020203C757365725461736B2069643D227573657222206E616D653D22E8B083E695B4223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4C656176654C697374656E6572496D706C223E3C2F61637469766974693A7461736B4C697374656E65723E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22656E6422206E616D653D22656E64223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D227369642D34373638373538312D333535422D343335342D383433432D43333034323333323836414622206E616D653D22E5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D46423539344242452D383030352D344544432D423343382D39373831454432323643393522206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D39394343413337462D413233352D343835332D383437322D44453233334144324544333222206E616D653D22E9878DE696B0E794B3E8AFB72220736F757263655265663D227573657222207461726765745265663D227573657231223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D35313046453036322D433042432D343643382D394231372D38413338303732413242433622206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73756250726F636573732069643D226368696C6422206E616D653D2273756250726F63657373223E0A2020202020203C73746172744576656E742069643D22737374617274223E3C2F73746172744576656E743E0A2020202020203C757365725461736B2069643D22616C6C6D616E6167657222206E616D653D22E680BBE7BB8FE79086E5AEA1E689B9223E0A20202020202020203C657874656E73696F6E456C656D656E74733E0A202020202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572223E3C2F61637469766974693A7461736B4C697374656E65723E0A20202020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C2F757365725461736B3E0A2020202020203C656E644576656E742069643D2273656E6422206E616D653D22656E64223E3C2F656E644576656E743E0A2020202020203C73657175656E6365466C6F772069643D227369642D46333946364639322D463330412D344630452D423946382D45304444454231313530363522206E616D653D22E5AEA1E6A0B82220736F757263655265663D22616C6C6D616E6167657222207461726765745265663D2273656E64223E0A20202020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A2020202020203C2F73657175656E6365466C6F773E0A2020202020203C73657175656E6365466C6F772069643D227369642D33453941414432332D343444412D344138352D383242442D4436433833304134433439382220736F757263655265663D2273737461727422207461726765745265663D22616C6C6D616E61676572223E3C2F73657175656E6365466C6F773E0A202020203C2F73756250726F636573733E0A202020203C73657175656E6365466C6F772069643D227369642D41453541454438342D303734362D343738372D393836462D36413739323743333443333422206E616D653D22E5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D227573657232223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D227369642D30344339463239412D304242352D343639312D383034432D37363445344530413237313622206E616D653D22E58F96E6B688E8AFB7E581872220736F757263655265663D227573657222207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D37463032463244352D413642412D343233342D413732342D3346383938443233354134422220736F757263655265663D226368696C6422207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D38344442433035362D303639312D343733452D383243462D44333235454637333641373222206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30413541464638362D414541342D343231322D423146342D3932373541343430364332442220736F757263655265663D22757365723122207461726765745265663D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30443039333043392D394241312D344636382D383545412D33383445313642343039413022206E616D653D22E5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D226368696C64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F70726F636573735F6C65617665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2270726F636573735F6C65617665222069643D2242504D4E506C616E655F70726F636573735F6C65617665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227374617274222069643D2242504D4E53686170655F7374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D2233302E302220793D223232382E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657231222069643D2242504D4E53686170655F7573657231223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939342220783D223132302E302220793D223230332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657232222069643D2242504D4E53686170655F7573657232223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2237392E3939393939393939393939393937222077696474683D2239392E39393939393939393939393938392220783D223531302E30393038383236333634343631372220793D223230332E3730333730333130343131343233223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222069643D2242504D4E53686170655F7369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223731352E353435343431333138323233312220793D223232332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222069643D2242504D4E53686170655F7369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223337302E353435343431333138323233312220793D223232332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2275736572222069643D2242504D4E53686170655F75736572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E30303030303030303030303032332220783D223334302E3534353434313331383232332220793D223336382E37303337303636343732373932223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22656E64222069643D2242504D4E53686170655F656E64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232382E302220783D223838302E353435343431333138323233322220793D223232392E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D226368696C64222069643D2242504D4E53686170655F6368696C64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D223136312E3130323038303930333236363036222077696474683D223238342E36303837323832303738373235362220783D223234382E32343130373732313432383638362220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22737374617274222069643D2242504D4E53686170655F737374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2232392E39393939393939393939393939372220783D223236362E373539353935363738323937332220793D2237312E3035313034303435313633333033223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22616C6C6D616E61676572222069643D2242504D4E53686170655F616C6C6D616E61676572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939372220783D223333382E32343130373732313432383638362220793D2234362E3035313034303435313633333033223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2273656E64222069643D2242504D4E53686170655F73656E64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232372E39393939393939393939393939372220783D223436352E302220793D2237322E3035313034303435313633333033223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222069643D2242504D4E53686170655F7369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223236342E39393939393939393939393939342220793D223232332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136222069643D2242504D4E456467655F7369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223434382E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223439342E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223439342E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223235372E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732222069643D2242504D4E456467655F7369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223330342E353930383639353736373134332220793D223234342E3131323833343432313436393437223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223337302E363430313837323338373936332220793D223234332E373938343439393138373537223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D46333946364639322D463330412D344630452D423946382D453044444542313135303635222069643D2242504D4E456467655F7369642D46333946364639322D463330412D344630452D423946382D453044444542313135303635223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223433382E32343130373732313432383638362220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223436352E302220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336222069643D2242504D4E456467655F7369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E393837353134343839383930352220793D223236332E32363136333038323635313634223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E36363730323138363333373736372220793D223336382E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143222069643D2242504D4E456467655F7369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2236302E302220793D223234332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223132302E302220793D223234332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437222069643D2242504D4E456467655F7369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223631302E3039303838323633363434362220793D223234332E3834353738353439363831313337223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223731352E393838343436343031363631392220793D223234342E3134363730393038313632323632223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146222069643D2242504D4E456467655F7369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735352E313035353637393030353031362220793D223234342E3134333537373431353930353333223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E3534353531303937373036392220793D223234332E3734373836373831363239343733223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130222069643D2242504D4E456467655F7369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223238342E3637393931353936313034392220793D223232342E3032333738383033373133343735223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223235332E33343530333333323234383436352220793D223136312E3130323038303930333236363036223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442222069643D2242504D4E456467655F7369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223136312E3130323038303930333236363036223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E353435343431333138323233312220793D223232332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332222069643D2242504D4E456467655F7369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223334302E3534353434313331383232332220793D223430382E37303337303636343732373933223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223430382E37303337303636343732373933223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223238332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935222069643D2242504D4E456467655F7369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223236332E32303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223430382E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E35343534343133313832323332352220793D223430382E3730333730363634373237393236223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334222069643D2242504D4E456467655F7369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223431302E31303138303630343037373735352220793D223234342E3134373333393237353632393338223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223531302E30393038383236333634343631372220793D223234332E3835313539323539373636343134223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244222069643D2242504D4E456467655F7369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231392E39393939393939393939393939342220793D223234332E393230313534323134363334223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223236352E343133303433343738323630382220793D223234342E31313637343734373634343437223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938222069643D2242504D4E456467655F7369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223239362E373539353935363738323937332220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333382E32343130373732313432383638362220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); -INSERT INTO `act_ge_bytearray` VALUES ('247535', 1, '请假流程.process_leave.png', '247533', 0x89504E470D0A1A0A0000000D4948445200000396000001F80806000000316A727D00004B3D4944415478DAEDDD09985C559D37E0282232A3830B88382AE038E0363A220CA2A3068619409045A8AEBED59DA4D982B208B20884C1B083AC437001648DC8221F46C8B048164242482420888160420264212121040890B0DEEF9C9ABA6DA5D3DDE9AE7477AABADEF779CE53D55DD5DDC9A97BCFF9FFEE3A6000D0AF5D71C5159BEFBFFFFE0F6FBDF5D6AF872F534DD3B49E6A5B6EB9E55B43860C993176ECD82F196D0100FAA961C3866DBADD76DBBDB6C71E7BA4D3A64D4B57AC589102F48437DF7C33FDCB5FFE92EEB7DF7EE917BEF085D7E3462CA32E00403FB4EFBEFB8E8FA112A037C57019C69BA9465D00807E68F3CD377F31EEA904E84D3366CC483FF5A94FAD34EA0200F44F0E7F05FAE4B0D801FF77DE250000FD315802F405C1120040B004102C0100E8FB60592A24D3C6C646553508968225008060597931F9894F7C62B5EF0F1E3CB83578AEBFFEFAE957BFFAD5F4B1C71E537D836009008060D9B56059FEDADB6FBF9D0E1B362C1DE0D05C102C0100E8BFC1F2FAEBAF4FB7D8628B74BDF5D66BDDD3181D74D041C5E73BEFBC73FAFAEBAFAFF25A564C1E76D861E9E73EF7B9E2F34B2EB9A4DD6079CC31C7B4FE5CF9EFB9E28A2B56F99D8B172F8EF7C36BFDDE11471C517C7FE6A5975E4A9B9B9B5B5F1F356A54EB6BF16777DB6DB7D6D7E2D76BFAFFADE93540B00400102CBB5714AE71AFE46F7FFBDBE2D70F3CF0C02A3F17C3E371C71DB7CAEFF8F8C73FDEFAFA17BEF085F4CF7FFE73BB7FF3F9E79F5FED7BF136293118B6FD770D1D3AB4F8F5B3CF3E5B0C956D436EF6F559679DD5E16BDDF9BF038225008060D945F3E7CF6F3D5C35EEB99B3B776EBBC1320B73E5C1B26DE8ECCA61B2D9EB1FFDE84757FBDEBFFDDBBFB57EDDDEEFDC7AEBADDBFD7D5FFFFAD75B4362DBB0D8D9FFAFB3D700C1120040B0AC40477BFBE25EC933CE38A3F8FCC1071F5C6D6F5F3C6CB5BBC172A38D366A77EF61BCE17A3CECB56D40CC0E837DE185178AAF8F1C39B2DD7F676C1D5D2CA8EDFFAFABAF018225008060D989DD77DFBD35987DEC631F4BAFBBEEBAD6D76288CC5E8BE7509687BDF818DF9B7D6FF6ECD9C5EF975F1576F9F2E5ABFCADF8F580367B16B3F328E3E1AFFBECB34FEBF78F3CF2C8E261B1E57B17070E1CB8DADF8B162D5A94EEB2CB2EADAF4D9C38B14BFFBFCE5E03044B0000C11240B0040040B004044B0000044B40B0040040B004102C0100044B00C1120000C112102C0100102C01C1120000C11240B00400102C01044B0000044B40B0040040B004044B0000044B40B034E4020008960082250000822520580200205802822500008225205802002058020896000008968060090080600908960000089680600900806009205802000896008225000082252058020020580282250000822580600900205802089600000896806009008060090896000008960082250080600920580200205802822500008265ED9A3B776E3A65CA9474DCB871E9983163B43E6C63C78E4D274E9C98CE9A35CB82285802002058D66EA89C346952BA78F1E2F4F5D75FD7D6415BB264493A61C28474E6CC991648C1120000C1B2F6C43D9542657584CBB8C718C1120000C1B2E6C43023D855478B87C6225802002058D69C1866843AC152B0142C0100044B7A3D58BEF2E2C274CEB4ABD3C7C69E566CF179FC9E4028580A960000089682E51A03CFF2650BD2E97F3839FDF3EDC7ADD2E2F7E26B42A1602958020020580A969DB6798FDDB65AA8CCDAFCC7460B8582A560090080602958761E7866DCF3D30E83657C4D28142C054B0000044BC1B2D3367DCC291D06CBF89A5028580A960000089682A56029580A9600000896F45EB08C5781ED2858C6D78442C152B0040040B0142C3B6DB326FFACC360195F130A054BC1120000C152B0ECB42D5DF0683AFDEEE1AB1F061BBE175F130A054BC1120000C152B05C637BEAC191AB05CBF83D8150B0142C0100102C05CB35879E952BD359F7FF72F5C360C3F7E26B42A1602958020020580A961DB6E5CB16A433275FD2E13996F1B5F81EC150B0142C0100102C05CBD5F6522E9C353EFDCB5DC33A0C95598BEF89EFB5F752B0142C0100102C05CB2EEDA5B4F752B0142C0100102CE9345876652F65677B2F8544C152B0040040B0ACF3605969A8CC9A9028580A9600000896CEB1D4044BC1120000C112C152B044B0040040B52B580A9608960000089682A526580A960000D449B09C33674E7AF5D557A7A79D765A7AC41147A443860C491B1B1BD3418306A5871D76587AE69967165F7FE69967044BAD6E82E5ECD9B3D38B2EBA283DF4D043D3E6E6E6344992E27A115B535353FAFDEF7F3F3DF7DC738BEF132C0100A8DB6079F3CD37A7279E78627AE49147A6975D76593A75EAD474C18205E98A152B8AAFC7C7C58B17A70F3DF4507AEDB5D7A6471D75543A7CF8F0E2CF09965A7F0D9637DC70437AD04107AD1224D7D40E3CF0C0F4CA2BAF142C0100A89F60F9C4134FA4C71D775C7AECB1C71643E35B6FBDD5E59F7DE49147D261C38615DB8C1933044BADDF04CBB85E1C7CF0C15D0E93EDB5FDF7DF3F7DF4D147054B0000FA77B01C397264B1781E3D7A74B702655B77DD7557F150C05B6EB945B0D46A3E58C643BD0B85C22A21311EEE7AF6D967A7E3C78F4FE7CE9D9BBEFCF2CBC5F7BEFAEAABC53DFB93274F2E1E2A1B0F192FFFB9B8A7B396F65E0A9600008265B7C41018CF179B3973668FFCBEA79F7EBA784E66AD1E1A2B580A96D16F7FFBDBD5CE9FBCEEBAEB8A878177C5B265CB8AEF8F3F571E307FF18B5F08960000F4AF6079CD35D7144365578BE5AE8ABFAF56C3A5602958C63D95E5A1F2E8A38F2EEE9DAC44FCB978887979B8AC853D978225008060D9E573C70E38E0801EDB53D9DE9ECB430E39A4E6CE2D132CEB3B58C6F5A27C2F63BC305576B86BA5E261B2F12ACAE587C53EFCF0C382250000B51F2CE32D436EBBEDB65E2D4EE33997C71F7FBC60A9D54CB02CBF504FDC53B9B6A1B23C5C96EFB98C17F4112C0100A8E960196F9D106F27F2C61B6FF47A811A83E5F5D75F2F586A551F2CE37A517E4E65A587BF7676586CF9DED06A3E2456B00400102CD7E8F0C30F2FDE52A42FC443614F38E104C152EB956019DFD753E27D2AB3D0172FBCD3DBE1B59AF75A0A9600008265A766CF9E5D3CDC6F6D6E2BD25D471D7554AF9DCBD99DD070F7DD770B96FD28583EFBECB3C5DB7BC410D859C0ECCA671FD78BEC823D71AFE2D2A54B7B65398C578B2DBF15493CA753B00400A0E68265BCC7DECF7FFEF33E2D5263E17FE9A597AED342392BE463C818376E9C6059C3C1325E7578C58A15AD5FAF5CB932BDE9A69BD2471E79A4E2CF3EAE17D9FBCE3DF7DC5E5D16FBF26F09960000F44AB08CB701993A756A9F16A9F1B0DB934E3AA92A8265D6E25EDBF6F6620996D51B2CDF7CF3CD4E6F8DF3D4534FA5BFFAD5AF8A17CAE9EE671F6FBB93BD3E61C2845E5D16E35ED6EC6FC52B270B960000D45CB01C326448BA70E1C23E2D526318887B8BAA295896EFC52A0F1982657506CB78D8EBDB6FBFBDC6CFF99D77DE295E8DF88E3BEEE8D667DFDCDCDCFAFD9EBE684F5B0B162C68FD5B854241B00400A0F682652C64CB0F23EC0BF1EFC5C2BD1A8365F95EAC7898A460595DC172F9F2E5E98B2FBED8EDCFFB85175E48AFBAEAAA6220EDCA675FFE754FDD62A423718F6AF9DF132C0100A8B960B9AE0AD93515F7D5D204CBEA69A3468D4A478C1851BCE04D2517C9893F5BC932D0D7EB8360090040CD05CB75B5C7325E69B31AF758C643837FFBDBDFB65E55B4378365BCF268F9EF8F9FE999679ED9EE7BE3219AF1F5B877EBF6DB6F4F070F1E9CDE7AEBADE9EEBBEF9EB6B4B4F4E8BF2BFE9DF3CF3F7F8DEF39F6D8638BCFE38572E2679A7D3FBB2A6B6FECB18C7D76CC31C7A4F7DF7F7F973FEBB8C7F1473FFA51FAFDEF7FBF78D5D5AE7CF6D91561EDB1142C010004CB2E88B73A5817E7581E78E08155152CDB06CABE3AC7327E8E53A64C29EE518BCFE3855C3A7ADF85175E580C215988CBBE7FE28927B67EBD68D1A274A79D762A86CE18F076D86187E2FF2F7E9D85D1912347A61B6EB861EBCFDC7BEFBDABBCBED9669BA5DFFCE6378BCF63BBE5965BD22DB7DC72B57FCF15575CD1FA3CFECEEC790C9ABD7D8E65BCFFE3E9A79FDEE9DECB787E65FCB7C4C3AEE3FBBBF3D93BC752B00400102CBB215EFD72E2C4897D7E55D8B8D7A91A8265DCDB17434747F73DECAD60397DFAF46260DB64934D8AE16D830D36287EFDF9CF7FBE1820DB1E029AFD3BE2E77EFCF1C7B73EDF679F7D56FBDD317CC6D7E29ECDEC7DF1FCC2F818C3630C9C9FFCE427570989E561307E1D435BF6F5FAEBAFDF1A5EE39556E3BF37BEE75BDFFA563150C6E7714F60F6B38F3EFA68F1F1E28B2FEED5ABC2C650396CD8B0F477BFFBDD6A17F2896170FFFDF74F4F38E184F4F9E79FEFF667EFAAB08225008060D90DF11E7AF1B0C7BE14834DFCBBEB52477B28FB2A58DE79E79DC5C0D6F6FB1B6DB451BAD75E7BB57E9D85B4183A0794ED9D8CCFE3EF8881303EBFE79E7B56DBA3180360F63C06D9F878FDF5D7172F60139FCF9B37AFF87ABC204EBC5051B68732BE76C00107149FC7E01AC3687B7B50CBF7586EBAE9A6AD87EBC6BD9B712F685FDDC7326E18F9F18F7F9CCE9933A7B837F7A73FFD69313476B4C1A42B9FBDFB580A960000826537C473D662A1FDD65B6FF559917AF8E18717F770D582751D2CE35EB9182EE3E1B2DB6CB34D3120C6F7C4AFB3F73CF3CC33C5C23FEED97CE9A5975AC3610C7E975C7249F1F9CD37DFDCE11ECB2C1CC6F7B40DA5F1DF19FF5E7BC132EEB17CF0C1075B0FE7CDBE1FFF665FDCC7B25C7CFD820B2E2886B3F8B8A60D065D592FB2B017CF075EBA7469AF2C5FF1F32D3FECB65AD70BC1120040B05CA378FFBE78385E5F8821E9073FF8415A2B7A3358C6CF305E502686BDECFCC6F8BDA38E3A6AB5C366E36B3134C620173FAB6CEF6276186DB6F730DB03197F4FDC839885BD6C2F65DC63195F9F356BD66A41F11BDFF8C66A7B2CE3F9966DF7A0C68BF6C4F75C7EF9E5ED86D2BE38C7B2B380D993EB4516F86218EF0DF150DCEC6FC44377AB95600900205876A9B88D45745FECB58CA1E4CA2BAFACFB60F9F8E38F175B16C64E3DF5D4E2F318F8E6CF9FBF5AE88B6DD2A449C5433DE339946B0A7103CAF63AC6809905C6189076D96597D50E6FED6AB08C17078A7BF306B439D4B63C586687EFB6FD7FF445B0ECADD017F75AF6F4457CE2EF8BBF37FB1BD5BC5E08960000826597C4ABB45E7BEDB5BD5A9CDE71C71DE9D0A1437B74AF522D06CB786E630C7BF1D0D61FFEF087C53D9159108BA12D1E221B837EDB9F8B812D5EF1B5A38BEE94B70F7DE843C5DF1FCF758CBF3F7B7FDC63D9D11ED4F642693C34330BC09D9D6319FF6DD961B1F1023F3168965FBDB6168365B65E64C1EFE8A38FEEB15B8FC48D03F10256E57B2BAB79BD102C010004CB2E890122DEEA208688DEF0F4D34F172FA8F2F0C30FA7B5A4A783653C576F40E9B62231FCC5F3EBCA5F2FBF6D47F9F993F16AB131B095DFC3327E7FDF7DF76D7D1E4364B63771ABADB62A1EFE1A836876FB9101A5732CB3E7F182406BDADBD9B6C5C368B3436DAFB9E69A55F6A8C620191F870F1FBEDA6D506A3558C6F5A2FC9E96F1FFB6B6E13286CA33CE38A3F577C6DF5FEDEB85600900205876D9D5575FDD2BF7B58CF7AD8C7BE06AE910D8DE3E1436BB8D4816CAE2B996F15613034A7BFF3AFA99AEEC058CC1AF3BEFEF4EB08C2DBB426DF9057BCA2F26D45B6D5D04CB6CBD28BFEF65DC7359E961B1F1E7CAF75456FB21B082250080605991CB2EBBACB8172D5E30A6A7F654C6C309CF3AEBACB416F566B0D46A235866EB4579188CE746C6F355E3555DBB7AF5D778CE66F93995B1D5CA7A21580200089615EDA18987E7C5431DD7E6823EA3478F2EEE018D4579AD122C05CB8EF65C660133DE7B72C28409C5BD91D961B2F170D7050B16140F791E316244F1963EE53F17D7AF5A5A2F044B0000C1B2E273CBE2E1ABF1A222F7DD775FB77E369E2F76C4114714AF2C5A6BE7540A96826557D68BB601B33B2DAE53B5B65E0896000082E55AF9F5AF7F5D2CA4E3E1B1F18223F7DC734FF1EAA5AFBDF65AF1F5780E5FBC05C51FFFF8C7F4E28B2F2E16CD3150C6BD31B574F557C152B0AC64BDE86EA0ACD5F542B00400102C7B44BCDAE805175C901E7AE8A1AB9D2716AF261B2F3C130F098C7B74FA13C152B0B45E08960000822582A56089600900806029586A82A5600900806029586A82A5600900806029586A82A56009008060896029582258020020580A9682258225000082A560A909968225000082A560A9099682250000822582A56089600900205822580A9608960000089682A526580A960000089682A526580A9600000896089682258225008060896029582258020020580A969A602958020020580A969A6029580200205822580A9608960000822582A56089600900806029586A82A5600900806029586A82A5600900806029586A82A560090080604925C68D1B27D4099682A5600900205852B9499326A58B172F16ECD6715BB4685131E4235802002058D69CD9B367A713264C489F7BEE39016F1D87CA9933675A20054B000004CBDA0D97E3C78F2F1E8AA9F57D132A054B0000044B40B0040040B004044B0000044B00C1120000C112102C0100102C01C1120000C112102C0100102C01044B0000044B40B0040040B004044B0000044B40B0040040B004102C0100044B00C1120000C112102C0100102C01C1120000C11240B00400102C01044B0000044B40B0040040B004044B0000044B40B0142C0100044B00C1120000C112102C0100102C01C1120000C112102C0100102C01044B0000044B40B0040040B004044B0000044B40B0040040B004102C0100044B00C1120000C112102C01005807C172C58A152A5EA057BDF9E69B822500407FB5E9A69B2E9A366D9AAA17E8553366CC4837D9649365465D00807EE8C31FFEF0B93BEFBCF32BCA5EA037EDB9E79EAF7DF4A31FFD99511700A07F7AFFFAEBAFFFF0F6DB6F3FFF81071E783D1EAE46EF58B972A54EA0EE0E7F9D3163C65B3BEEB8E3820D36D860761C6F0CB90000FD385C8676CABBDEF5AE2706FCDF39505A0FB6F7BFFFFDE90E3BEC10F7D8A4EBADB75EBFF97F353636FA7CB535B677BFFBDD31509E27540200400572B9DCFB9324393B04B015F97CFED5D08EEE4FFFBF52B0040000A0378410B947085E4FC5F0155BF8FAE5534E39E5DD82250000009D2A140AFF1A02D7A42C509605CBD1FDEDFF2A58020000F4A02449360E41EB9278D86BDB50596AA70B960000007414B006E6F3F9651D04CA6C8FE5E182250000001D4A92E4A010B41676142C1B1A1A76162C010000E8542E97FB58085B7776B0C7F28B82250000005D0D5CC3437BAB3C58C6D02958020000B046F1DE9521703DDDD0D0B06F78FC7529582EE9A7015AB0040000E885B015AF0C7B65D9D7FBC5C363054B000000D6A8A1A1E11B216CCD6F6969F960F9F7070E1CF81EC1120000804EEDB6DB6E1B84A03523B47DEAE5FF2C58020000F46CC83A33B49BEBECFF2C58020000F4847C3EFFE510B29E4B926453C1120000806EC9E572EB8580F560682DF5F67F172C0100007A4092243F0E01EB0FF5F87F172C010000D652A150F8E7788FCAD0B6102C010000E8AE772549726F08573FACD70E102C010000D62E547D3FB4FB4F39E594770B96000000744B5353D32742A85A9CCFE73F57E7E15AB0040000A830508D0EED64FD2058020000745B128440F5E7A14387AE2F580A96000000DD0D951B8730B530B46DF58660090000504990FA4D68E7E909C1120000A09210B57B68B372B9DC867A43B0040000E896A6A6A67F08216A6E6803F58660090000504980FA656897E909C1120000A0DB1A1A1ABE1502D4BC5C2EB791DE102C010000BAA5A5A5E57D213CCD0C6D4FBD215802000054129CCE09ED463D2158020000745B3E9FDF2604A745B95C6E13BD215802000074CBC08103DF1382E5C3499234EB0DC1120000A092C0342CB43BF48460090000D06DB95C6EEB10989684C74FE90DC1120000A0BBDE15C2D27DA11DA62B044B0000804A82D261A14D8A01536F0896000000DD120F7D2D1D02BBB5DE102C0100002A094977264972A29E102C0100002A094883E2ED45E26D46F48660090000D02D83060DFA6808488B42FB8ADE102C0100002A094737254972B69E102C0100580B699ABE67CE9C39374F9D3AF5ED71E3C6A563C68CD1FAB08D1D3B369D3871E2F3A1355B1AFB563E9FDF2B84A3BFB6B4B4BC4F6F08969817CC0B00B01662F13069D2A474F1E2C5E9EBAFBFAEAD83B664C992F4DE7BEF7D291413FB5922FB462E97DB2804A379A17D536F08969817CC0B00B096E21669C543551411AF8F1933668625B2CF42D1E5A1FD424F08969817CC0B00D003E2614E26F0EA68A18078D312D9FB1A1A1A760CA1E8993DF7DCF3037A43B0C4BC605E00801E10CFE73079574D01A150EF65B95C6EC310889E2C140ADFD11B8225E605F30200F47101F1CA8B0BD339D3AE4E1F1B7B5AB1C5E7F17B267E05442DC9E7F3E72749729D9E102C312F981700A08F0B88E5CB16A4D3FF7072FAE7DB8F5BA5C5EFC5D74CFE0A881A0995DB8530B43004CB8DF586608979C1BC00007D5C40CC7BECB6D58A87ACCD7F6CB4C95F0151F5860E1DBA7E08968F86D6A837044BCC0BE60500580705C48C7B7EDA6101115F33F92B206A20049D1CDA683D2158625E302F00C03A2A20A68F39A5C30222BE66F2574054B35C2EF7F910821687C77FD41B8225E605F302002820141074CB29A79CF2EE1080A624497288DE102C312F981700601D1610F16A7F1D1510F13593BF02A25AE5F3F92343009A109EBE4B6FAC55881C1D83E41ADA343D655E302F981700504074D8664DFE598705447CCDE4AF80A8D230B445684B72B9DC67F4C65AF7E5B6A1BDD959B00C217E0F3D655E302F981700504074D8962E78349D7EF7F0D50F770ADF8BAF99FC1510551A86EE0E61E7383DD163FD796727C172CAC08103DFA397CC0BE605F302000A884EDB530F8E5CAD8088DF33F12B20AA510894FB87B0F3602E975B4F6FF458B0DCB6A3609924C9DE7AC8BC605E302F00A080E8BCAD5C99CEBAFF97AB1FEE14BE175F33F92B20AA4908931F0B61E7B9102EBFAC377A3C5CB677AEE5347B2BCD0BE605F302000A884E27B5E5CB16A433275FD2E1B934F1B5F81E058002A25A8440F9FF922439434FF44AB05CED5C4BE7569A17CC0BE60500E8B88058B9325D386B7CFA97BB8675583C642DBE27BED7566A05441584CAEF85B03363B7DD76DB406FF45A1F8FB2B7D2BC605E302F00C01A0B88356D8DB6955A01518D0A85C28742D05910DAD7F546AF06CBAF959D5BB9AB1E312F9817CC0B00D06E01D195ADD19D6DA5560C2820D6C2072BFDC11072AE0AA167842EEC7D0D0D0D77C560696FA579C1BC605EA0BAE64280AA2A202A2D1EB2A61850405428EEFD4A4B8FDD0D3A3B87A0F3542E977BBFB5BAF73FA70F7FF8C3C53D96BAC2BC605E302F503D732140D515109A02621DD839B465A15D547AECF20561060D1AF4F721E4CC29140ABB58A3FBEE732A054B17EE312F68E605AA602E045040680A88BF4DA4D9041AB7D22EE9EA849ACFE72F4A92E45A6B73757F4E981734F302C6584001A12920FA6A225DD3F7DB86CA7821996773B9DC87ADCDD5FB39615ED0CC0B1863010584A680E82DBBAE61C2CC5E6FF73C931026DF9B24C963215CE6ACC9D5FB39615ED0CC0B1863A1263435357D221496870F1932E4B6E6E6E6A70B85C26BA54BE1AF0CCFE796EEB9766C7C9FDE52402820AA6E225DD344D9E1D6DA102A4F8DEBB7B5B8BA3F27CC0B9A7901632CD59BA1424EBA39B459A12D2F65A815F182887595A14251B9F7D0A143A71D72C8212F8E1831E285A953A7A60B162C4857AC589146F171F1E2C5E9942953E65D70C1057F09C1737EE89C7BC2CF355B9414100A88756AE76E6E7D5DEDFD6190FB97B03E2F6E6E6EDECC5A5CBD9F13E605CDBC803196EACB50A18D2905C8B48BAD7F66A8F01FDB2284C93F1E79E491AF3CF4D043E95B6FBD9576550899330E3CF0C099E1774CCAE5729FB16829201410EB6C22DDA3829F5B1E27D4B0EEAE17D6E107423BD01A5CBD9F932E342F68E6058CB15457860AEDCE6E84C9F65AFFC9502D2D2D830E38E080D76EBBEDB6B7BB1328DBFACD6F7EF34048DD8BECBD544028206A62225DE5E777DC71C72BC3C036CE1451DD9FD300876C991734F302C658AA423E9F0FA553E392F290D8D4D4949E7DF6D9E9F8F1E3D3B973E7A62FBFFC723127BDFAEAABC5A340274F9E9C5E74D145E9A04183DA86CBE5359FA1860D1BD6F2831FFCE0F5993367A63DE1C9279F7CAAB9B9797EE898831410266F0544AF5BD3C509BAE4EFFEEEEFF60ADEDE7CF3CD0F324D54EFE7D483BF07F382790163AC3196B50B957B8430F86679A0BCEEBAEB8AA70C76C5B265CB8AEF8F3F571E306B36431D73CC3187066F74B503BA6AD1A2450B4BE1B26EF75C2A2014107D3891F6C8A13B215CEE6E42ADFECF6980ADEAE605CDBC803196751D2A1BCB43E5D1471F5DDC3B5989F873C71D775CDB70595B196AE8D0A1FF74F0C107BFD1537B2ADBDB73593A2CF6B30A084D01D1E3DA5E6CE05DA10D293D7647DB9F7311039F13E605F302C658632C1D289D53D97AF8EBF0E1C35B0F77AD543C4CF6CC33CF6C7B586CED64A8638E3966CEE8D1A3D3DE74F5D5578F8D27A32A20340544AF4CA47B944D88578696961EBB3AA176F47326549F13E605F302C658632CED285DF9B5754FE5DA86CAF270D966CF656D64A8534F3DF507C71E7BEC3B6FBCF146DADB060F1E3CA31E0F8955402820FA68221D50DACA9A96B5AE4CA8E51369D60697BDEE3C139F13E605F302C658632CAB86CABDCBCFA9ACF4F0D7CE0E8B2D3FE7B22632D409279CF06CBCA5485FB8EFBEFBEEADC7BD960A0805442FE868826B6F62EC6C426DEFFD57B4F37EE799F89C302F981730C61A63F95BB06CDD5B192FBCD31B6EB8E186DAD96B79E38D376E77F8E187BFB336B715E9AEE6E6E6A7E3F1C80A084D01B1D613E9AEDD9820DB9B50BB3A91B69D501D0AE473C2BC605EC0184BDD6A6A6AFA4476C19EB85771E9D2A5BD929BE2D562DBDC8AA47A33D425975C72E315575C91F6A533CE38239E6B796C7FD95211DABF2B201410BDBD0C5530A1AD6942EDEE445AFEF797D4DBD65A9F13E605F302C65863AC653293CFE70FCFC2DEB9E79EDBABD929DEE7B22C58566F863AF5D453E74E9D3AB54F83E5F8F1E3EF0B9D32BA3F2C7465C73C8F090BD8D714100A88DE5A86DA4CA45D9DC83A9A50DF5DE144DA762B71DD4CA83E27CC0BE6058CB1C658CB64D9EB3767EF99306142AF66A7C993279707CBEACD50471C71C4EB0B172EECD36019FE5E3C14765E7F5AE8CADA9DED6DDD50402820D676191A50F9791DED4DA87F5D8B89746DFF3DFD7A5DF739615E302F608CA5FF2F93E1EB59D96B3D7DD19EB6162C5850FEEFA8DE0C3564C8907756AC58D1A7C1F2B5D75E7B3E74CA8A7EBAD0B56EDD285FF814100A88B55C86D676AB687B13EADA4CA46D27D45DEB7082F139615E302F608C35C6D6E93219EF2D997DAFA76E31D2D9AD47CAFE0D2BAABAD3D685F877FBF34257BE7523EE3E574028202A5D86F6DE7BEFB1A549EFA2B5FC53EF6E67EBEC5F4BDF5F1B17957ED707EB7182C95A2E971BFB918F7CC4E7444DCC0B715928140A5D7EFFADB7DE9A6EB5D556DDFAFDE79F7FFE1ADF73ECB1C7169FDF74D34D69DCC89D7D3F5E5D51B0B4DE980BA9F2B1BCB5F55576CA5AD5765A4B4B4BDAD77B2CC3DF7BB33B1F567F687D5D40DC7DF7DDC5C1326EE1B8FDF6DBE3FD438B85C1EEBBEF9EC6CFBCA70B945A2B206A6DF9F9F6B7BF9DBEF7BDEF4DD7626B68675B69BB73E3E80EB7D2D6DB3ADD59F339695D6DEB3258EEB4D34EEDBE16C7E7EDB7DFBED8B2B963B3CD362BB6F83CB6ABAEBAAAF83BE6CF9F5FFC997BEFBDB7F8FDF2F77FF39BDF6C7DFF2DB7DC926EB9E596ABFD1BE2C503B3E723478E6C7D1EE709F382662ED46AA5D9635972C41147BCD1D7E7582E5AB468613F3EC7326BD3F2F9FC1E03070E7C4F7C5F5F07CB38485E78E185C505310B71D9F74F3CF1C4D6AFC367512C2EE2C41F03DE0E3BEC50FCF797170871B2DF70C30D5B7FA63F1410B5B80C9526AEE5037AE7BC924A26D47A3FC7D2E7444DCD0B6DC7E44D36D9A4C3D7E3DC316BD6AC74975D76592D58DE7CF3CDE9673FFBD9D57E5FF9581EBF3EFDF4D35BBF5E7FFDF55BE79EA79E7AAAF87BE27BBEF5AD6F15E783F8FC89279E68FDD9471F7DB4F878F1C517DB6369BD31C65295CB64787CD239966D9C75D6594BFBFAAAB093274F9ED9DFAE0ADBC90038A0AF0B8851A346B5EE218D03E5F1C71FDFFA7C9F7DF669B78088AFC53D9BD9FBB2ADD1313CC6C0F9C94F7E5201B18E97A1B65B45D76222BD6240FB57C2EBCE845AB75785F539518BF342DB3D927159DA60830D3A7D5F0C901FF8C007560B961B6FBCF16A73C9F2E5CBD371E3C6B56E608CBFFF80030E283E8FEF8D73497BE1B67C83E3A69B6EDA7AB44DDC381937623A14D67A638CA55A974957856D4718D4EFE8EBFB589E77DE7953FBCB7D2CCB3EE4294992ECDDC100D867054416D2E25EC301657B27E3F33BEFBCB31808E3F37BEEB967B5093E1600D9F3E9D3A7171FAFBFFEFAF4D9679F2D3E9F376F9E02621D2E43156C1D5DD3BDB9BA7AE3E8B6B61D5087F7EEF23951ABF342DB3665CA94E272F4A10F7D6895235ADAB6B84131B6B6C1F24B5FFA52BB1B29E3EF8C61B4ED9C12E79E8D36DAA8DDF7C70D8E0F3EF860F179FC7765DFBFE4924B9C6369BD31C652D5CBA4FB58B6E38F7FFC63EE88238E48DF7AEBAD3E0B962D2D2D0B42A76CD14F16BACEB6A8F57901B16CD9B262B88C13F436DB6C530C887142CF26ECD89E79E699E2C019F76CBEF4D24BADE13006BF389967C5C1800EF6582A20D6CD32D4CDADA45DBDE1737727D4EC10A4BDEB7082F1395193F34247E757C60D8CF1796787C366CF63988C2DBB904FFCB9B6A1347EEF1BDFF8C66A1B1C6320DD6BAFBD56D9001ACFB98FEFB9FCF2CBDB9D53EAFD1409EB8D3196EA5F269B9A9A3E11DE53BC6E4C789E2E5DBAB4577253ACED070D1A541E2CAB3B439D7AEAA9AF3DF4D0437D122A1F7EF8E1A5A143EEABB785B32F0B881826E3641E43630C7271F779B67731B678F853B6F730DB031907D1B807319BD4B3BD94718F657C3D9E6BA380A83A1D6DADEDEA44DADD0935FB7B26529F1335362FB43D0C369EEE908DC1E79C73CE2AEF89A730ECB6DB6EC5D6DEC57B4E3EF9E4F4A8A38E6A3DBAA5BBF3423CB77FF6ECD9AB1D29533E2F6447DF641707322F608CA51AC55B8F64812FEE88E90D37DC704379A89C54F59D72F5D5579F7BDC71C7F5C95ECB430E39E4A9F021342B207A776B746C93264D2A1611D956E7CE425CF9041F03665618C495245EBCA1EDE1AD0A88AA11B7D6B63D1467C880EEDF9BABBD09757037B60AE373A20682E580D29128D9D78F3CF2C82A1754CBC2676CE557145FD33996D9112BEDCD29F19CFAC71F7F7C8DA748C4B9203BAA2586DB384F7476A8AE7901632C55102CF7CE425FDC6BD9D317F189BF2FFEDEB27B68D646863AE9A4935E1E3D7A74AF86CADFFFFEF7CFC6BD95DD3CCC4101B116E75B965F4EBEB36019CFB58987CEC6731DE39ECEECFD718F657BEF574054DD845A7E1183F289B13B377CEEE8E7DCF8D9E7443F981706747001B7B80131BE16E6E6550E7FCD0266769BA86C8360DC4BD9DE38DFD1C6CAB62D1E05931D2973CD35D7ACB24134DBA33A7CF8F0D5AE626E5EC0184B350AD9E69E2CF81D7DF4D13D76EB91381EC71D7FE57B2B6B26438D1A35EA3F0E39E4907766CE9CD92BA1F2E9A79F7EABB9B9F9F990B43FAB80E8BD969D3FF9F9CF7FBE18D8CAB738C7EFEFBBEFBEADCF6388CCF626C61B5FC7C35F6310CD6E3F926DD9CE9EC70B022920AA56DB4381DE55DACADADDCBA6B7FDB95D4DA43E276A7B5E88175E8B174C8BE7D577F49EB8B1308EC36DFF4D7143637635EF78718AEE84D88EE685D8B20BCC959F6F5F7E2D80BE6E82A531D618CB5A04CB2D425B9205C058D7AE6DB88CA1F2CC33CF2C0F95CB6B2E4385C2FF8A78219FC58B17F768A88CBFEF80030E585A8F87C0AEAB2DD3E55B9CD7F49E18FCBAF37E0544CD4CA83DB1F5D715EF7C4EF4B37941132C8DB1C6587A563E9F6FCC2EE493EDB9ACF4B0D8F8736DF654A6359BA1468E1C794B0C973DB5E7F2E9A79F4E0F3AE8A01743879FA08030792B206A664275C3679F13E605F302C658632C5D1402604B79B88CE746C6530DE2555DBB7AF5D778A19EF2732A63ABF90CF5AB5FFDEA67210CBE13CFB95C9B0BFADC71C71D2B870C19F262EC680584024201D167D6F6901D87FCF89C302F981730C61A63E9A6B8E732B465E5C13006C5782AC18409138A7B23B3C364E3E1AE0B162C28DEBD61C48811F1768CAB04CA78F86BBFC950975F7EF976279D74D2F371576CBC6A5C77C40BB3849F7B71F0E0C1D3EAF59C4A058402A24A26D4EE6E657571029F13E605F302C658632C158AE75C96DF86A4C236A95F66A80B2FBCF0BF8317E2E1B1F1AA9ED3A64D4B172E5C583C172F8A8FF11CCA183EE3EEDEC30E3B6CC5C1071F3C3D26EC7ABCFAAB0242015145BA7B088F437E7C4E9817CC0B18638DB1F44CC0DCAF1430DFEC4EA0AC8B0C75EDB5D77EE5BCF3CEBBF6E4934F9E3574E8D0E5CDCDCD6F9776EFBE75E081072E0FC1F3A1D0CE8C29DDA2A4805040D4DC84BA6D68CB07B8E1B3CF09F382790163AC31961E13B2D22742C03C2A64A49B437B2AB4156541725E68A3433B56864201A180A805BB9626CA5D3B797D8989D4E78479C1BC8031D6184BEF2B85C9D4D19D28201410B5A8A3ADB50EF9F139615E302F0896C658632C7D249FCF7F2D3B3C364912E7F1A2805040F48B09D544EA73C2BCA00996C658632C7D1B2C47951D0A3B4D8FA0805040D4FA847A9189D4E7847941332F18638DB1F49D1024B76D7B319F10342D7F28201410352B1E76910E7019759F13E605CDBC608C35C6D297C172743B57829DE65C4B14100A885AF6415D501B9F539C7474837941332F608CA5E643E5B61DDD7A244912178D4201A180805E9F882CAFE605CDBC803196DA5FD6EEECE4FE9553F4100A080504287A302F981730C64267CB59877B2B9D6B89024201018A1ECC0BE6058CB1D095E56C7467A1D215625140282040D18379C1BC803116BA65D0A0417F1F96BD57F4040A080504287A302F981730C6424572B9DCFBC3B2B75C4FA080504080A207F3827901632C5464CF3DF7FC4092242FEB0914100A0850F4605E302F608C858A343535FD4358F65ED21328201410A0E8C1BC605EC0180B15C9E5721B8565EF453D81024201018A1ECC0BE6058CB150919696960FE6F3F9657A0205840202143D9817CC0B1863A1228542E14361D97B414FA080504080A207F3827901632C542497CB7D382C7B4BF5040A080504287A302F981730C64245060F1EFC91B0EC3DAF275040282040D18379C1BC8031162A9224C9C661D95BA2275040282040D18379C1BC8031162A92CBE53609CBDE623D81024201018A1ED6DAB871E38CC9D5D1568479E14D4BA43116FA4A92249B86656F919E4001A18000450F6B6DE2C4890B172F5E6C5C5EC76DC18205378679618625D2180B7D2597CB7D2C2C7B0BF5040A080504287A586BE3C78FDF6BC284092F3EF7DC73AF199FD7CD86C638278C1D3BF699D0F6B3441A63A1AF3437376F1696BD67F5040A080504287AE811613CDA63CC9831D3E29114F1307DAD4F5BECF319E60463AC5E601D2C771F0F6D819E4001A18000450F8031162A92CBE5FE312C7BF3F50475ABA1A161670330287A008CB150B9A6A6A64F84656F9E9EA09E07DF49A1BDA32740D103608C858A97BB4F8636574F50AF2BC0C038F8C69624C9BFEB1150F4001863A1FB72B9DCA7C2B2F78C9EA05E07DE7BCA82E5183D028A1E00632C745FA150D83C2C7B4FEB09EA4E0892BB66A1D25E4B50F400186361AD96BB2D427B4A4F508F0BFFA4B6C132B4D17A06143D00C658E89E5C2EB76558F6E6E809EA6DC0DDAF9D50596C8542E15FF510287A008CB1D075A186FE7458F666EB09EA6DC0FD4B47C13249921BF410287A008CB1D075B95CEE3361D99BA527A81B2138EEDD51A8CC5A3E9FFFA29E02450F803116BAA65028FC7358F666EA09EA46088D0FAF29588676B39E02450F803116BA5C636F1596BDBFEA09EA5692241B879560899E00450F8031162A93CBE5B60E75F5137A82BA3568D0A08F8601F8393D018A1E00632C542684CACF86656F869EA06E3537376F16568267F504287A008CB150997C3EFFB9B0EC3DAE27A85BB95CEE1FC34A305F4F80A207C0180B15D7D49F4F92E4313D413D0FBE9F0C6DAE9E00450F8031162A1342E517C2B2375D4F50B70A85C2E66125785A4F80A207C0180B9589B7EB8BF78AD713D4AD5C2EB7655809E6E80950F4001863A1324D4D4DFF12C2E5A37A82BA1556807F0A03F0937A02143D00C658A84C92245F0ACBDE9FF50475AB5028FC73580966EA0950F4001863A132F97CFECB61D97B444F50B7DCCC15143D00C65858EBE5EE2BA1FD494F50B7DC7307143D00C65858EB9A7A9BB0EC3DA427A85B2E8D0C8A1E00632CAC9D42A1F0D5B0EC3DA827A85BAE60058A1E00632CACF572B76D68D3F40475CB89C6A0E80130C6C25AD7D4DB8565EF013D413D0FBE4E3406450F803116D642A150F8B7B0ECFD514F50CF2B81E3C141D103608C85B55BEEB60F6DAA9EA06ED96D0F8A1E00632CAC754DFDB5B0EC4DD113D4FB4A60EB0A287A008CB150A124497608CBDEFD7A827A1E7CBF1EDA643D018A1E00632CA8A9A1224992FC7B580926E90950F4001863A1320D0D0DDF08CBDE7D7A827A5E09BE15C2E5BD7A02143D00C658A878B9FB666813F504F5BC120C0CED1E3D018A1E00632C54C6CE1AEA5E5801760A03F0383D018A1E00632C545C537F3B2C7B13F40475ABA1A161E7B0228CD113A0E80130C642C5CB9DA300A96FF97CFEBFC24AF0073D018A1E00632C54A6A1A161C72449C6EB09EA565801760D03F09D7A02143D00C658A8B8A6767A19F5AD50287C279FCFDFAE2740D103608C858A97BBFF086DAC9EA06E8550B947580946EB0950F4001863A132AE5B82C1B7B171CFD06ED513A0E80130C6426542A8FCCFB0ECDDAD27A8E79560EF7C3E3F4A4F80A207C0180B9571414CAC04F9FCF7C24A708B9E00450F8031162A532814760975F55D7A827A1E7CF70BED663D018A1E00632C54C69D16B01224494358096ED213A0E80130C64265DC6901C1320803F0F57A02143D00C658A878B9DB3DB4FFD513D4AD7C3EDF14B2E5757A02143D00C658A8B8A6760B3FEA7EF01D14DA483D018A1E00632C54264992EF8670799B9EA09E5782216100BE464F80A207C0180B152F77EE0D4F7DCBE7F3FB877079959E00450F8031162AAEA9F70ACBDEEFF504F53CF81E18DA157A02143D00C658A84C92247B8770394A4F50CF83EFC1A15DAE2740D103608C858A97BB7D42FB9D9EA06E254972483E9FBF544F80A207C0180B9509F5F4F7C2B2778B9EA09E57821F8495E0177A02143D00C658A84C9224FB86BAFAFFE909EA79F03D2CB49FE90950F4001863A1E2E56EBFD06ED613D4AD24498EC8E7F323F404287A008CB15099504FE7425DFD5B3D413DAF04478695E07FF404287A008CB150F172970FED463D413DAF043F0AED423D018A1E00632C54269FCF37264972839EA06E8515E098B0229CAF2740D103608C858A6BEA242C7BD7EB09EA560895C785F5E05C3D018A1E00632C54BCDC1542FB8D9EA09E83E509612538474F80A207C0180B15D7D44D49925CA727A8E7C177586867EA0950F4001863A1322154368765EFD77A827A1E7CFF3BB4D3F504287A008CB150F1723728B4917A82BA95CFE77F9224C9A97A02143D00C658A8B8A61E1C6AEA6BF504F53CF89E12DA703D018A1E00632C542684CA2161D9BB464F50CF83EF69A19DAC2740D103608C858A97BB96D0AED613D4AD2449CEC8E7F327E90950F4001863A132A19EDE3FD4D557E909EA79F03D2BAC0427EA0950F4001863A1E2E5EE80D0AED413D4F34A704E68C7EB0950F4001863A13249921C94CFE77FA527A8E795E0DCB0121CA72740D103608C858A97BB8343BB5C4F50B742A83C3F84CB63F404287A008CB150F1723734B4CBF404F5BC125C18DA8FF404287A008CB1509924490EC9E7F397EA09EA7925F89FB0121CA92740D103608C858A97BBEF87F64B3D41DD0AA17244089747E80950F4001863A1E29AFA0761D9FB859EA09E07DF9F8576989E00450F8031162A9324C9A1215CFE5C4F50CF83EF2FE216163D018A1E00632C54BCDC1D1677D8E809EA7925B82C5EC54A4F80A207C0180B95C9E7F3878765EF123D413DAF04BF8A3774D513D06B05CEE858E4ACA14DD353008225B52B5EB3245EBB444F50CF83EF95A11DA027A0D7D6B16D437BB3B3601926A23DF4148060494D2F773F0CED623D413DAF045787D6A227A057D7B33B3B099653060E1CF81EBD04205852BBE2EDFBE26DFCF404752BAC00D7861561B09E805E2D72B6ED28588675706F3D04205852F3CBDD8F42BB504F50CF2BC1AF4361DBAC27A0D7D7B5F6CEB59C666F25806049EDCBE7F347879AFA023D413D0FBEBF09ADA027A0D7D7B5D5CEB5746E25806049FF1042E531615E3F5F4F50CF2BC10D612568D413D0FBC2BA36CADE4A00C1927EB9DC1D1BDA797A827A5E096E0AE1B2414F409F04CBAF959D5BB9AB1E01102CE93773FC71616E3F574F50CF83EFCDA1EDA727A0CFD6B9E2B996F656020896F41F2154FE3884CB9FEA09EA79F0BD25AC04DFD31354BB344DDF3367CE9C9BA74E9DFAF6B871E3D23163C6687DDCC68E1D9B4E9C38F1F9D05CF00B102C61D5E5EEF8D0CED113D4AD78CE97DB1D500B62A89C346952BA78F1E2F4F5D75FD7D6515BB264497AEFBDF7BE1442A6231D00C112FE56539F106AEAB3F504F53CF8DE1ADA9E7A826A17F7540A9555132E5F1F3366CC0C4B252058C2FF09A1F2C4B0EC9DA527A8E7C177B45B1E500BE2E1AF425DF5B4102CDFB454028225B42E77C3423B534F50B742A8BCBD50287C474F50EDE2397E025D55054B851B2058C2DF6AEA93922439434F50CF2BC15D6E7B407F0A96AFBCB8309D33EDEAF4B1B1A7155B7C1EBF270C0A96806009BDB8DC9D1CDA697A827A5E09EE0EC1F23FF504FD21582E5FB6209DFE8793D33FDF7EDC2A2D7E2FBE26100A96806009BD219FCFFF24D4D4A7EA09EA79F01D1BDA7FE809FA43B09CF7D86DAB85CAACCD7F6CB4402858028225F4D672373CB453F404752B4992F10D0D0D3BEA09FA43B09C71CF4F3B0C96F1358150B004044BE8A5E5EE94182EF504F5BC124C08E1F2DB7A82FE102CA78F39A5C360195F1308054B40B084DE100F838D87C3EA09EA79F09D18DA37F50482A5265802822554BCDC9D162FE0A327A8E795E0BE8686866FE809FA43B08C5781ED2858C6D70442C112102CA19796BBD343FB6F3D413DAF04F72749B2839EA03F04CB59937FD661B08CAF098482252058426F88F7B08CF7B2D413D4F3E03B35B4EDF504FD21582E5DF0683AFDEEE1AB1F061BBE175F1308054B40B0845E5AEECE0C6D989EA09E578207F2F9FC767A82FE102C637BEAC191AB05CBF83D6150B004044BE8C5E5EEAC24494ED413D4F34AF060A150F8AA9EA05F04CB952BD359F7FF72F5C360C3F7E26B02A160090896D01B42A83C3B9FCF9FA027A8E7C1F74FA17D454F50EBC172F9B205E9CCC99774788E657C2DBE4728142C01C1127A61B93B27B4E3F504F5BC123C92CFE7BFAC27A8D960B97265BA70D6F8F42F770DEB3054662DBE27BED7DE4BC112102CA1272549726EA8A98FD313D4ADB0023CDAD4D4F42F7A825A0C966BDA4B69EFA560090896D047CBDD79A11DAB27A8E795607A92245FD013D462B0ECCA5ECACEF65E0A8882252058424FC8E7F3E7879AFA183D413D0FBE8F8715E1737A825A0C969586CAAC098882252058424F08A1F28250531FAD27A8E7C1F7AF6125D84A4F508BC152132C01044BAA64B9BB30B41FE909EA79259895CBE53EA327102C35C112102CA132F97CFEA224498ED213D4F3E03BBB50287C5A4F20586A82252058426542A8FC9F102E8FD413D4F3E0FB54685BE809044B4DB004044BA878B9BB38B41FEA09EA7925782697CB7D4A4F20586A822520584265F2F9FC8824498ED013D4F3E03BAFA9A9E9137A02C152132C01C1122A5EEE2E09E1F2703D413DAF040B42FBB89E40B0D4044B40B0848A97BB9F8576989EA09E578285B95CEE637A02C152132C01C1122A93CFE77F9E24C9A17A827A1E7C9F1B3468D047F50482A5265802822554BCDCFD32B4EFEB09EA7925589224C9C67A02C152132C01C1122A93CFE72F0D35F5217A827A1E7C97E672B90FEB09044B4DB004044BA878B9BB2CB4A17A827ADEBAB2ACA5A5E5837A02C152132C01C1122A5EEE2E0FED603D413DAF042F353535FD839E40B0D4044B40B084CAE4F3F95F254972909EA09E07DFE5B95CEEFD7A826A3070E0C0F7089682258060490D2E77578476A09EA09E578257BFFBDDEFFE9D9E605D4B92A4391603A1ED27580A9600822535B6DC5D19DA017A827A5E0956B6B4B4BC4F4FB0AEE472B9CF1C7BECB1F73DF9E4938B9E7FFEF9B1871F7EF88361B9BCA4ED722958D65EB00C9FE3B6F97C7E94A51C102CE9EF9224B92ACC79FBEB09EA79F07D63E8D0A1EBEB09FA5A3CEC75D0A0413FB9E5965B9E7FEBADB756A47FB3ECF6DB6FBFBBB9B9796A0C9D8265ED05CB1828431B1DDA9B0A3C40B0A44E96BBAB436BD113D4F34AF05628DED7D313F4A52449FEFDA73FFDE99C175E78E1F9B4032FBFFCF213279C70C282ECD058C1B2FA8365DB4099354B3C20585207CBDD35A1BE19A227A8E795E09DF0F02E3D415F88B7B639EAA8A3AEFBD39FFED461A06CE3CDBBEFBE7BC1C1071F7CE95D77DD25D05569B0CCE7F35F8B87BCB60D9482252058522F42A8BC36CC8583F504753DF8C67019DADBA5A2F08D78DE65682BE2857D427B25AC282FC7DB92C47B5E86C717427B3EB425A13D17DAA2D09E0D2DEE599A17DADCD09E09EDA9D0E684F66468B342FB6BF83D4F84C7C7C3E363E1F12FE1F73D1A1E1F098F0F87C787428BE7D63D10DA1F439B12DAFDA1DD17DAA4F033F786C709E1717C781C171EC784C7BBC3CFDE151EEF0C8FB787C7FF0D8FB785C75B4B45EEEFC2E3FF0B8F37877653683786767D68BF09EDD7A18D8C83403C74211E171FAFE6152F151D6F701B1E2F0D8FBF088F3F8FE7FB85C711E13DFF131E2F0A8F1784C7F3C3E3B9E1F1A7E1F1ECF09EB3C2E319E1F1F4F0786A783C25BCF693F07872783C293C0E0B8F2784C7E3C3E371E1F1D8F0787478FC51783C323CFE303C1E1E1E0F0B8F3F088FDF8F37D98DF7438A57188B2783C7E3F6E396B03868C50BDD84C7A6F09884C7C6F0D0101E73E171DFF0F8BDF0B87778DC2B3C7E373CEE512814BE131E770B8FBB84C7FF6A6868D839FCCEFF088F3B86C781E1F15BE1F19BE1F11BE1F1EB312884C7EDC3E376A5F3E4B6098F5F098F5F0EBFF34BE1F18BE1F10BE1F173E1F1B3E171ABF0BBFF393CFE5378FC742E97DB323C6E1E1E3FD5D4D4F489F0F88FCDCDCD5B5F76D965E98A152BDE4ABBE9E5975F7EE997BFFC653A77EE5CA1AE8A8265477B28DBB678BE6C5806368C170A1B3468D0DFC72B51EFB9E79E1F88B73A0ACF378A2D6E7408CBCC87C2F30F0F1E3CF82361B9DA383CDF24B6F0331F0D5F6F1A9E7F2C2C479B85DFF9F1B84CC5652BB6F0F527E3B21697B9F07C8BD2F2F7E9D8E232190FA92E2D9F5B85E75B9796D9CFC516BEFE7C6959FE62F85DFF525ABEBF1C5BF8997F2D2DF7DB84E75F2DAD0BDB85E7FF165B691DF95AF8991DE27A13D79FB8373EAE4BA5F5E95BE1EB6F97D6B11DC3F39DE27A575AF7760E5FFF675C1FE37A199EEF5A5A47BF135B78CFEE71DD8DEB7078BE67697DDE3BB6F0F53EA5F57CDFB847BFB4EE3784E7F9D84A6342129E174AE344BC30D6A0D84AE3C79078B8561C53E2D812C7987889FCD84A63CED0F0FC90380EC5F1283C3F34B6D2F87478787E4469CC3A323C3F2A8E63A5B1ECE8F0F531A5F1EDB8F0FCC7A531EF84D8C2D72796C6C23826FE77697CFC4969AC1C1EC7CDD2F8795A692C8D63EA99A5765669AC3DA734EE9E1B9E9F175B693CBE203CBFB03446FF4F787E711CB7638B6378683F2B8DE7BF08ED97718C2F8DF3F186E69797C6FE7845C72B4BF3C1D5A5764D699E1819E78DF0FCBAD21C12E792EBC3D73794E6969BC2F3DFC6F926CE3BA5B9E796D23C14E7A3DF97E6A6DB4AEBCCE8D29C15E7AE3B4AF3589CCFFE506A7797E6B9B1A5392FCE7DF7C479B03417C63971629C1F4BF3E4E4D29C797F69FE9C5A9A4BE39C3AAD34BF3E546A7F2ACDBB8F84F6E7D25CFC97529B5E9AA31F0F6D4669DEFE6B68334B6D56695E9F5D9AE3E35CFF7469DE7FA65403C45A607EA92E88F5C1C2525B54AA1B16976A88584B2C2DD5152F946A8C1763BD51AA3B96C71AA4D4623DF25AA9368935CAEBA57AE5CD527BAB54C7BC638316EBB0A68EE3C4203D41BD7BD729A79CF2EE78CE5B3CDF72B7DD76DB201682591198158059E197157D59B197157A5981575EDC65455D56D065855C56C465C55B56B865455B56AC65855A56A065C55956946505595688654558567C658557567465C5565668B529B00E2C1556C5A22A2BA8B2422A2BA2B2E2292B9CB282292B96B222292B90B2E2282B8AB282282B84B222282B7EB2C2272B78B262A74D919315385961532C6AB262262B64B222262B5EB2C2252B58B262A5AC48C90A94AC30C98A926231921522590192151F658547567094171B5991F1ECF0E1C397CD9B37EF9DEE06CB65CB96A523468C28160BD51A2E972C59120B99F4E69B6F4E5F7DF5D574F3CD374F77DA69A734AC2FC576EBADB7165F6FFB73F17BE79C734E875F5779B0EC6A5B512A0A5F2D1589CBB30D56A542F2C5B20D574BCB365E2D2EB56C23D6C2B20D59F34BCB56F906ADA7CB366ACD2EB56CE3D6CCB20D5C334ACB6EB6A16B7AD9C6AE3F9796F36CA3D79FCA367C4D2BDBF8F5C7D23A926D049B9C6D082BAD4B13B30D62A575ACB851AC1414C6661BC7E2FA986D202BADA3B7671BCA4AEB6E716359697D1E956D342BADE7C50D67A540936D3CBBB134261437A295C6895F970A9E6C63DA35651BD4AECC36AA95C2D5E5651BD77E996D602B85B29F651BDAE298956D6C8BE358692C2B6E742B8D6FC50D6FA531EFEC6C035C692C2C6E842B8D8FA7661BE3E2B8996D902B8DA5C58D72B195C6D8E2C6B9D2B85BDC40175B693C2E6EA82B8DD1C58D7571DC2E8DDDC58D76A5F1BCB8E12E8EF1A5F05CDC80571AFB5B37E2C57921B66C635E69BE286ED02BCD2149B661AF34B71437EE95E69B7DB38D7CA579A8B8A1AF34371537F6C516E7AC6CA35F691E2B6EF88B2DCE6FD906C0D29C57DC0818E7C1D25C58DC18589A1F8B1B04E39C195BB661B0349716370E96E6D76DB28D84A579B7B8A1B034177F31DB60589AA38B1B0D4BF37671C3616CA5F9BC7503629CEBB38D88B1C51A20DB9818EB82581FC40D42B1C57A21D60D716351AC21622D113724C5BA22B65863C48D4CB1DE887547DC00156B90D8623D12374EC5DA24D628E1F97B63BD12EB96D8E2293DB18E19E0082CD6ED1ECBEBE218A12700FA48C889EF993C79F25D2B57AE7CBB2BA1F2FEFBEF5F70E08107BEF2939FFC247DFAE9A7AB3A6C3DF0C003E9669B6D16F7CA1603E2E38F3F5E7CBCE4924B5A4363F6DEEDB6DBAE356C5E75D555E9C61B6F9C3EF8E083C5AF77DF7DF7D6D7E2EFA8F643614B05F0948E82A5A51E80FEAE743443414F00F4B11B6EB861BFD9B367BFD651A07CF6D967579E7EFAE98BE35E8AB825BBD62EDE1343E1C891238B8F03070E4C274D9AB44AB09C356B563A6AD4A8D660B9C30E3BA4A3478F4EAFBBEEBAD69FBFE9A69B6AEAE23D71AF4B698F9D600940BD05CB781459A22700D68178A8530857F7AF58B1E2CD2C50BEF1C61BEFFCFEF7BF9FB7FFFEFB0F89873865EFADE660397FFEFCE21EC60D37DCB01820B36078E9A597B606C7B8D7B23C58C6F79F7CF2C9AD0174BDF5D64B43902E06B6C9932717BF1FC3672DDE6EA4B4077392600940BD88A721C4C3E3F504C03A74DA69A7B5C4301582D4E2CB2FBFBCDDF313AA7D8F6576F8EB2DB7DCD21A2CE31EC9B67B31B3E74F3DF55471EF64FCDE17BFF8C562D08CDF5FBA7469F17B219CD5EC7D2CCB26D9B807738A251C80FEAE749E7B5E4F00AC63E57B276B3158B60D93F1F9F5D75F5F0C8CF1BCCB458B16AD122CB7DF7EFBF4F6DB6F2F7E2FEEF1DC6AABAD8A87C25E73CD35AD17028A2DFE5CAD064B00A8A360192FA4D8A02700AA5CAD04CBE9D3A7A72FBDF452EB61B0D91EC8F8FD2C58CE9B37AF78E5D8183AE3A1A2F171CB2DB74C0F3DF4D0E2F3B8D733BE77DCB87135BDC71200EA45E9EAFC393D012058F648B08C81F2B39FFD6CEBC57AE20578E2633CF475409BDB8DC4C367A74C99527CCCAE021B1FE3F996D9457C044B00A87EA5FBA6EFA7270004CB1E0996F150D6F818F748C6C7679E7926BDFBEEBB573BC7B2FC671E79E49162A08CF7BEAC95ABDE0A9600F037F1DEC2F11EB67A0240B05CEBB67CF9F2F489279E281EF65AFEFDECFE94F1DE95EDDDC73286D1E1C38717EF6579D2492715BF9F05D478BEA5600900D5ADB1B1F196102EBFA7270004CB3EBF8A6C2DFFFB054B00582558FE2EB47DF4048060A909960050917C3E3F2A4992BDF5048060A90996005091C6C6C65B43DB534F0008969A60090015C9E7F3B72549F25D3D0120586A82250054A4B1B1717408977BE80900C152132C01A0D260F9BFA1EDAE2700044B4DB004808AE4F3F9DB0B85C277F4048060A90996005091C6C6C63B42B8DC4D4F0008969A6009009506CB3B9324D9554F0008969A60090015C9E7F377150A855DF4048060A90996005091C6C6C63F8470F95F7A0240B0D4044B00A83458DE9D24C97FEA0900C152132C01A02221548E696868D8594F0008969A60090015696C6C1C17C2E54E7A0240B0D4044B00A8480895E31B1A1A76D4130082A526580240451A1B1BEF096DA09E00102C35C112002A0D96139224F9B69E00102C35C112002A1242E5BD0D0D0DDFD2130082A526580240451A1B1B2786F64D3D0120586A822500541A2C272549F2EF7A0240B0D4044B00A83458DED7D0D0F00D3D0120586A822500541A2C2787F6753D0120586A822500541A2CEF4F9264073D0120586A822500541A2CA7E4F3F9AFE90900C152132C01A0D2603935B4EDF5048060A90996005069B07C209FCF6FA72700AADCB871E304BAEA692B42B07CD3520900ADC1725A68DBEA09802A3771E2C4858B172F16EAAAA02D58B0E0C6102C67582A01A035583E582814BEAA2700AADCF8F1E3F79A3061C28BCF3DF7DC6BC2DDBADB531943E5D8B1639F096D3F4B2500B406CB87F2F9FC367A02A0068430B3C7983163A6C5C330E3397EB5D8468D1A95D6EABFBDD4EF33844A00582D58FE29B4AFE809007ADD73CF3DB7EF881123D230F16CA13700A0FFC8E7F30F170A857FD51300F4AA344DDFF7C20B2F2C0BD2A14387FEAF1E0180FEA3B1B1F191102EBFAC2700E855F3E6CDFB755A72FFFDF72F4892646FBD0200FD2658FE39CCED5FD21300F49A575E79E5CB6FBFFDF63B699933CF3C735E4B4BCB07F50E00D4BE7C3EFF685353D3BFE809007ACDA2458BE6A46DBCF8E28B8BC20474B1DE0180DAD7D8D8F897102EBFA82700E81573E7CE3D39EDC0A851A316B9993200F48B60393D49922FE809007A5CC88E1F5BB972E51B1D05CB77DE79E7F51FFDE8478F0E1C38F03D7A0B006A5708958FE572B9CFEB09007ADCFCF9F3A7A46B3067CE9C7961323A4A6F0140ED6A6C6C9C11E6F3CFEA09007ADCE4C993D7942BD3152B564C089351DAD2D2F23E3D0600B52984CA2772B9DCD67A02801EF7939FFCE4B0CE0E858DB972D8B06137D9630900B5ADB1B1F1AFF97C7E2B3D0140AFB8F1C61BFFDA51AA7CF2C9272F0D13D114E7580240CD07CB998542E19FF50400BD2297CB7D2604C815ED5CB8677A5353D374578505807E112C67C5395F4F00D06BCE3BEFBC4B42907CBB3C585E71C51557E6F3F98BF40E00F48B60F96498D7FF494F00D06BE2A1AE77DD75D7E22C54BEF8E28BD7C72D9B2D2D2D1FD43B00D02F82E5EC42A1F0693D0140AF3AFCF0C3775AB66CD9CAD0D2A143878E4D92646FBD0200FD2658CEC9E5725BEA09007ADD65975D76E7881123D27C3E3F4A6F0040BF0A964F85B6859E00A0D7C5435FE33D2B9DDC0F00FD2E583E5D281436D71300F4D5C493EA0500E877F3FB33B95CEE537A0200C11200A8747E9F1BDA27F5040082250050E9FC3E3F97CBFDA39E0040B004002A9DDF1784F6713D0180600900543ABF3FDBDCDCBC999E0040B004002A9DDF17E672B98FE90900044B00A0D2F97D5192249BEA0900044B00A0D2F9FDB94183067D544F002058020095CEEF8B73B9DC267A0200C11200A8747E5F9224C9C67A0200C11200A8747E7F7EF0E0C11FD1130008960040A5F3FBD25C2EF7613D0180600900543ABFBF5028143EA42700102C01808AE4F3F9652D2D2D1FD4130008960040A5F3FB4B4D4D4DFFA02700102C01808A2449F2F29E7BEEF9013D0180600900543ABF2FCFE572EFD7130008960040A5F3FB2B83060DFA7B3D0180600900543ABFBFFADDEF7EF7EFF4040082250050E9FCFE5A2E97DB504F002058020095CEEF2B5A5A5ADEA72700102C01804AE7F795BBEDB6DB067A0200C11200A8747E7F3D97CBBD574F002058020095CEEF6F0C1D3A747D3D0180600900543ABFBF3970E0C0F7E80900044B00A0D2F9FDED534E39E5DD7A0200C11200A8747E7F273CBC4B4F0020580200E677006A63E2D1344DD334ADFF35550E00000000000000000000000000000000000000000000000000000000000000B04EFD7F52A9DA10FF9FDF790000000049454E44AE426082, 1); -INSERT INTO `act_ge_bytearray` VALUES ('247539', 1, 'var-userLeave', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF2E18C78737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000163FF066800787400203266643739336364643964333432663862303335333063383566326233303533737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('247541', 1, 'hist.var-userLeave', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF2E18C78737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000163FF066800787400203266643739336364643964333432663862303335333063383566326233303533737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('247542', 1, 'hist.detail.var-userLeave', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF2E18C78737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000163FF066800787400203266643739336364643964333432663862303335333063383566326233303533737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('247554', 1, 'var-userLeave', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF7CF0278737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000164042CC400787400203765393832666139393863303434386538306231353832346333303439633562737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('247556', 1, 'hist.var-userLeave', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF7CF0278737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000164042CC400787400203765393832666139393863303434386538306231353832346333303439633562737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('247557', 1, 'hist.detail.var-userLeave', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF7CF0278737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000164042CC400787400203765393832666139393863303434386538306231353832346333303439633562737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302553', 1, '请假流程.bpmn20.xml', '302552', 0x3C3F786D6C2076657273696F6E3D27312E302720656E636F64696E673D275554462D38273F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0A20203C70726F636573732069643D2270726F636573735F6C6561766522206E616D653D22E8AFB7E58187E6B581E7A88B2220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D22737461727422206E616D653D227374617274222F3E0A202020203C757365725461736B2069643D22757365723122206E616D653D22E7BB8FE79086E5AEA1E689B9222061637469766974693A61737369676E65653D223062373632356665646161303565383566323832343836653163396339316239222061637469766974693A63616E64696461746547726F7570733D226533343665393633363834383463386661376632313763653535306130313836222F3E0A202020203C73657175656E6365466C6F772069643D227369642D30443235384332342D314631392D343233332D413937362D4130443843423944414541432220736F757263655265663D22737461727422207461726765745265663D227573657231222F3E0A202020203C757365725461736B2069643D22757365723222206E616D653D22E4BABAE4BA8BE5AEA1E689B9222061637469766974693A61737369676E65653D223938623035316230333638316465363032383939336135643134616339336362222F3E0A202020203C6578636C7573697665476174657761792069643D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222F3E0A202020203C73657175656E6365466C6F772069643D227369642D33334642463234452D464537302D343730412D394442352D3942313838314531333834372220736F757263655265663D22757365723222207461726765745265663D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222F3E0A202020203C6578636C7573697665476174657761792069643D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222F3E0A202020203C757365725461736B2069643D227573657222206E616D653D22E8B083E695B4222F3E0A202020203C656E644576656E742069643D22656E6422206E616D653D22656E64222F3E0A202020203C73657175656E6365466C6F772069643D227369642D34373638373538312D333535422D343335342D383433432D43333034323333323836414622206E616D653D22E5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D46423539344242452D383030352D344544432D423343382D39373831454432323643393522206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D39394343413337462D413233352D343835332D383437322D44453233334144324544333222206E616D653D22E9878DE696B0E794B3E8AFB72220736F757263655265663D227573657222207461726765745265663D227573657231223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222F3E0A202020203C73657175656E6365466C6F772069643D227369642D30344339463239412D304242352D343639312D383034432D37363445344530413237313622206E616D653D22E58F96E6B688E8AFB7E581872220736F757263655265663D227573657222207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30413541464638362D414541342D343231322D423146342D3932373541343430364332442220736F757263655265663D22757365723122207461726765745265663D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222F3E0A202020203C73657175656E6365466C6F772069643D227369642D37463032463244352D413642412D343233342D413732342D3346383938443233354134422220736F757263655265663D226368696C6422207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222F3E0A202020203C73756250726F636573732069643D226368696C6422206E616D653D2273756250726F63657373223E0A2020202020203C73746172744576656E742069643D22737374617274222F3E0A2020202020203C757365725461736B2069643D22616C6C6D616E6167657222206E616D653D22E680BBE7BB8FE79086E5AEA1E689B9222061637469766974693A61737369676E65653D226438313861633661383663663161363464323138346266303639396436376138222F3E0A2020202020203C6578636C7573697665476174657761792069643D227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222F3E0A2020202020203C656E644576656E742069643D227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341222F3E0A2020202020203C656E644576656E742069643D227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244222F3E0A2020202020203C73657175656E6365466C6F772069643D227369642D33453941414432332D343444412D344138352D383242442D4436433833304134433439382220736F757263655265663D2273737461727422207461726765745265663D22616C6C6D616E61676572222F3E0A2020202020203C73657175656E6365466C6F772069643D227369642D41323335414337362D354242452D344133382D383243342D31304545383141463834363522206E616D653D22E5908CE6848F2220736F757263655265663D227369642D31434331333342322D343442312D343833302D394335392D37443335363443393333464122207461726765745265663D227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341223E0A20202020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A2020202020203C2F73657175656E6365466C6F773E0A2020202020203C73657175656E6365466C6F772069643D227369642D44413934353339452D463639342D343041312D424534412D42434343314439424431314422206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D31434331333342322D343442312D343833302D394335392D37443335363443393333464122207461726765745265663D227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244223E0A20202020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A2020202020203C2F73657175656E6365466C6F773E0A2020202020203C73657175656E6365466C6F772069643D227369642D34454238313431392D314141372D343937452D413545452D4535414546313743354530422220736F757263655265663D22616C6C6D616E6167657222207461726765745265663D227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222F3E0A202020203C2F73756250726F636573733E0A202020203C73657175656E6365466C6F772069643D227369642D41453541454438342D303734362D343738372D393836462D36413739323743333443333422206E616D653D22E5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D227573657232223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D35313046453036322D433042432D343643382D394231372D38413338303732413242433622206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D38344442433035362D303639312D343733452D383243462D44333235454637333641373222206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30443039333043392D394241312D344636382D383545412D33383445313642343039413022206E616D653D22E5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D226368696C64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F70726F636573735F6C65617665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2270726F636573735F6C65617665222069643D2242504D4E506C616E655F70726F636573735F6C65617665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227374617274222069643D2242504D4E53686170655F7374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D2233302E302220793D223232382E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657231222069643D2242504D4E53686170655F7573657231223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939342220783D223132302E302220793D223230332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657232222069643D2242504D4E53686170655F7573657232223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2237392E3939393939393939393939393937222077696474683D2239392E39393939393939393939393938392220783D223531302E30393038383236333634343631372220793D223230332E3730333730333130343131343233222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222069643D2242504D4E53686170655F7369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223731352E353435343431333138323233312220793D223232332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222069643D2242504D4E53686170655F7369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223337302E353435343431333138323233312220793D223232332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2275736572222069643D2242504D4E53686170655F75736572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E30303030303030303030303032332220783D223334302E3534353434313331383232332220793D223336382E37303337303636343732373932222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22656E64222069643D2242504D4E53686170655F656E64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232382E302220783D223838302E353435343431333138323233322220793D223232392E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222069643D2242504D4E53686170655F7369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223236342E39393939393939393939393939342220793D223232332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D226368696C64222069643D2242504D4E53686170655F6368696C64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D223137322E3130323038303930333236363038222077696474683D223431312E36303837323832303738373235362220783D223138342E37343130373732313432383638362220793D22312E34323130383534373135323032303034452D3134222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22737374617274222069643D2242504D4E53686170655F737374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223230332E32353935393536373832393732352220793D2237312E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22616C6C6D616E61676572222069643D2242504D4E53686170655F616C6C6D616E61676572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939372220783D223237342E37343130373732313432383638362220793D2234362E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222069643D2242504D4E53686170655F7369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223431392E37343130373732313432383638362220793D2236362E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341222069643D2242504D4E53686170655F7369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232382E302220783D223530342E37343130373732313432383638362220793D2237322E3035313034303435313633333036222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244222069643D2242504D4E53686170655F7369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E303030303030303030303030303134222077696474683D2232382E302220783D223432352E37343130373732313432383638362220793D223133352E30222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136222069643D2242504D4E456467655F7369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223434382E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223439342E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223439342E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223235372E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732222069643D2242504D4E456467655F7369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223330342E353930383639353736373134332220793D223234342E3131323833343432313436393437222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223337302E363430313837323338373936332220793D223234332E373938343439393138373537222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635222069643D2242504D4E456467655F7369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223435392E333632383732303836303831372220793D2238362E3432393234353537393833383138222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223530342E373431333631313932383236322220793D2238362E3134303231303631373337343835222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336222069643D2242504D4E456467655F7369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E393837353134343839383930352220793D223236332E32363136333038323635313634222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E36363730323138363333373736372220793D223336382E37303337303636343732373932222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143222069643D2242504D4E456467655F7369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2236302E302220793D223234332E37303337303339393831383338222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223132302E302220793D223234332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042222069643D2242504D4E456467655F7369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223337342E37343130373732313432383638362220793D2238362E3236373439303636383038333235222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223432302E31353431323036393235343737342220793D2238362E3436343038333932393839333932222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437222069643D2242504D4E456467655F7369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223631302E3039303838323633363434362220793D223234332E3834353738353439363831313337222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223731352E393838343436343031363631392220793D223234342E3134363730393038313632323632222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146222069643D2242504D4E456467655F7369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735352E313035353637393030353031362220793D223234342E3134333537373431353930353333222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E3534353531303937373036392220793D223234332E3734373836373831363239343733222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144222069643D2242504D4E456467655F7369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E303837373235313633333532342220793D223130352E3730343339323530323536373534222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223433392E383533313635313630393039322220793D223133352E3030303434383731313033393938222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130222069643D2242504D4E456467655F7369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223238342E32343236393939353539333433372220793D223232342E34363130303430343232343934222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223139332E34393435373938303736303230372220793D223137322E3130323038303930333236363038222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442222069643D2242504D4E456467655F7369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223137322E3130323038303930333236363038222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E353435343431333138323233312220793D223232332E3730333730333939383138333738222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332222069643D2242504D4E456467655F7369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223334302E3534353434313331383232332220793D223430382E37303337303636343732373933222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223430382E37303337303636343732373933222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223238332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935222069643D2242504D4E456467655F7369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223236332E32303337303339393831383338222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223430382E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E35343534343133313832323332352220793D223430382E3730333730363634373237393236222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334222069643D2242504D4E456467655F7369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223431302E31303138303630343037373735352220793D223234342E3134373333393237353632393338222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223531302E30393038383236333634343631372220793D223234332E3835313539323539373636343134222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244222069643D2242504D4E456467655F7369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231392E39393939393939393939393939342220793D223234332E393230313534323134363334222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223236352E343133303433343738323630382220793D223234342E31313637343734373634343437222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938222069643D2242504D4E456467655F7369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233332E32353935393536373832393732352220793D2238362E3035313034303435313633333034222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223237342E37343130373732313432383638362220793D2238362E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, 0); -INSERT INTO `act_ge_bytearray` VALUES ('302554', 1, '请假流程.process_leave.png', '302552', 0x89504E470D0A1A0A0000000D4948445200000396000001F80806000000316A727D000062194944415478DAECDD097C54D5FDFF7F5CEBBFF5E752BF55DBAAB5D65A977EADD6B57611BFB5162B5AA424933B4920ECC862485804110822A8280209680111152C8A451414902433804650401417108CB2C85264515C5204BDFFF3B9B967B8339949662699C9CCDCD7D3C779CC649604CFDC39E7BCEF39F7DE162D80CC77FCB5D75E3BFBDC73CFFD5ADD3729140A8542698A72D65967FDF7861B6E582CFD0C5D2D0000191E2ACF38E38C8D37DD74D3772B57AE346B6A6A4C00001AEBE0C183E63BEFBC63B66BD7CE3CEDB4D33E215C020090C18E3BEEB87B6EBCF1C6830C81000089D2B66DDB43279D74D2787A5D00003237586E90994A00001265DDBA75E6F1C71FBF9D5E170080CCC5F257004042C9B2D816B5C75D0200804C0D960000241AC112000082250000044B0000D03CC1D21E48983939398CAA0080600900000896F10F26CE38E38C3A8FB76FDF3E103C8F39E618F3B2CB2E33DF7BEF3D465F0040B004000004CBE882A5F3B96FBFFDD6BCF3CE3BCD162CCD050082250000C8DC60F9AF7FFDCB3CFBECB3CDA38E3A2A30D328BA74E962DDBFFEFAEBCD03070E043DA70713BD7AF5322FB8E002EB7E595959D860D9AF5FBFC0FB9CBFE7D1471F0DFA9DBB76ED32FFF18F7F041EEBD3A78FF57AEDF3CF3F37F3F2F202CFCF9D3B37F09CBCF7C61B6F0C3C273F37F4FFD7D07300008225000004CBD806050DCE4ACE9E3DDBFAF98D37DE087A9F84C701030604FD8E9FFCE42781E72FBAE822F3EDB7DF0EFB3777EFDE5DE731B94C8A04C3D07F57B76EDDAC9FB76FDF6E85CAD090AB7F1E3D7A74C4E762F97F0700102C0100205846E9934F3E092C579599BB2D5BB6840D963ACC39836568E80CF7BE480391534F3DB5CE63575E7965E0E770BFF357BFFA55D8DF77CD35D70442626858ACEFFFAFBEE70000044B00000896718834DB27B392F7DC738F757FD5AA557566FB64D96AACC1F2C4134F0C3B7B2817DC9665AFA101512F83DDBB77AFF5FC934F3E19F6DF2925D2C98242FFFFA27D0E0040B004008060598F9B6EBA2910CC4E3FFD7473E6CC9981E72444EAE7E4184A67D8935B79AD7EACBABADA7ADC7956D82FBEF822E86FC9CFA1338BFA384A59FE7AEBADB7061E2F2C2CB496C53A67175BB66C59E7EF899D3B779A7FFDEB5F03CF2D5BB62CAAFFBFFA9E0300102C01002058020040B0040000044B0000C1120000102C0100044B000040B004008060090000C112000082250000205802000896000080600900205802000082250000044B000008960000102C010000C1120040B0040000044B0000C1120000102C0100044B000040B0040080600900000896000082250000205802000896000080600900205802000082250000044B000040B00400102C010000C1120040B0040000044B0000C1120000102C01002058020040B004008060090000089600008225000020580200089600008060090000C112000082250000044B000040B00400102C010000C1120040B0040000044B0000C19260090000C11200008225000020580200089600008060999E0EAAFFE67C38C79C5F35DF5C5CB1D82C2F2FA724B1489D2F5CBAD07C7FC3FB6C8C00C1120000102CD39384CA05CB169853374F35C7EF1D4F69863279EB64F365FFCBE6860D1BD82001822500002058A61F99A92454A646B8ACACAC648304089600008060997E642926C12E358A2C8D0540B004000004CBB42361865047B004089600008060898407CB29DBC79A152B869A2BCB075945EECB630442822540B0040000044B826514A1F24173F5A281E6DB2F0D082AF2983C4728245802044B000040B02458D65BE6BD35A24EA8D465FE5B77130A099600C1120000102C0996F5079EE5958323064B798E5048B00408960000806049B0ACB7AC5C7C47C46029CF110A099600C1120000102C0996044B822540B0040000044B243058960F8A1C2CD5738442822540B0040000044B8265BD65D9B2211183A53C4728245802044B000040B02458D65B6654DF67AE7AB9EE7258794C9E2314122C01822500002058122C1B0E3D2B86D50996F21881906009102C010000C19260D960E099B067BCB9E4D5BBEA044B794C9E2314122C01822500002058122C239629DB1F6CF0184B790DC1906009102C010000C1926059679672CE7BF7986B160E8C182A7591D7C86B99BD245802044B000040B0245846354BC9EC25C11220580200008225EA0D96D1CC52D6377B4948245836C6A64D9BA804102C010000C132DD8365BCA152174222C1325E23478EB406F9720B102C010000C1328D83258560D91CEEBFFF7EF388238E302FBDF452EB76D8B0617C4141B0040000044B82258560195BA8D46152662C8F3CF248C22508960000806049B0A4102C630F950D3D0E102C010000C1926049215806C8CC647DE1513FCF31972058020080B409969B376F3667CE9C698E1E3DDAECD3A78F59505060E6E4E498F9F9F966CF9E3DCDE1C3879B53A74E353FFEF86382258560D944A1B2A1D0C8CC6578D5D5D5E6B871E3ACB6292F2FCF340CC36AAFA4E4E6E69A3D7AF430C78C1963BD0E044B0000089649307FFE7CB3A4A4C4ECDBB7AF3979F26473C58A15E6B66DDBCC9A9A1AEB79B9DDB56B97B97AF56AF389279EB05E77C71D77984F3EF924C19242B06CC4F2D7686722637D7D269B356B96D9A54B9740888CA674EEDCD99C366D1A099260090000C13211366CD86005CA01030658A1F1D0A14351BFF7ADB7DE32EFBCF34E2B64AE5DBB9660492158C6182A639D81747BB85CBF7EBDD9B56BD798026568E9D8B1635AB757044B00009072C172EEDCB9D6523199AD8C2550865AB4689135D84BD7D94B8225C1321D42A5DB97C54E9F3E3D68A9AB5EEE7AEFBDF79A3E9FCFDCB2658BB97FFF7EEBB55F7DF595B5E2A2AAAACA5A2A2B4BF99DEF93DFC3EC25C11200008265138529398652662C9BC2A64D9BCC5EBD7A998F3EFA28C19242B08CA0A113F524FBF7A48BD9B367D70994722CB82CCF8FC6BE7DFBACD7CBFB9CBFE7E1871F2651122C01002058C66BCE9C3956A88C7650162DF97D72120D99592058520896E1C360532D6375CBCCA5B427CE30585C5C6CCD4EC643DE27CBFE9DBF8F994B8225000004CB387CF0C10766F7EEDD9B6CA632DCCC65A74E9DCC356BD6102C2904CB9010A843E5B7DF7E6B9D7C466E6311FABE4C3FE6528EA9742E7F95B352EBE5AEF19265B2A3468D0A5A169B4EED15C1120000A444B01C326488754C6522C9319772EC26C19242B0AC3BB328A1F0BCF3CEB306F2721B6DB88CF4BE4C0E97CE33BFCA4C656343A5335C3A672EE5843E044B8225000004CB283DFFFCF3D660EA9B6FBE49F820A5A8A8286D9698112C0996C90A953A2CD983F8A8C3A53354EAD2AD5BB73ACB6C336959AC5C52C4794C65BCCB5FEB5B16EB3CE6D2ED4B6209960000102CA376D75D775997144906399DFF6DB7DD46B0A4B83658460A7BE142627DE132DAD767DA3197CED94A39F14EA2C3ABDB672D09960000102CA3F2F1C71F5B27EC69CC65456225CB61E518A9E61E9C2E5EBC986049B04CE836142954465A9E1A6D588C3584A6CBB2D886EAB4BABA3A68B672CF9E3D09F977C8D9629D972269EEF68A60090000523E58CA6540927D2990C71E7BCC1C33664CB30E96F4805106B2959595044B826542B6A178C25D43A131D650E9FCFB471E79644ACF5C3654A772ED49FD9A44B721C9FC5B044B000090F6C1B2A4A4C45CB1624552072AB2EC562E3F920A03585DBA76ED5A67A6846049B06CEC3614EF72D448E1F1E0C1837185CA8696E1A64B9D4ABBA19F5BB2644942FF2D55555581BF2567CC265802000082653DE478C71D3B762475A022D7B5CCCBCB4BA901AC73A6440F64099604CBC66E43F184CAFAC2E5B1C71E1B77A86CECBF2715EA54DA0DFD58539FB427D4B66DDB027FCBEBF5122C010000C1B23EEDDBB7376B6A6A923A5091BF27D7884BC501AC73A6846049B06CEC3624A531212E5CB86C4CA88C75596EAAD5A9B334D5254622914B8F38FF1EC1120000102C1B18C8A5FA00B2B90AC132F582653A6C37BAB46DDBD61A94FFEA57BF6AD4774596BF86CE54CACFF278635C7AE9A5D6EF4AA73A4D76D02358122C010020584649CE7CC88CE5E1D2A1430773F6ECD9E6810307121A2C4BDE29317BCFEF1DF8593ED39B87DF1CF6B5BD5EE8653DFFD0AE87CC1E737A98577AAF34BB3DD3CDBCA8D545E655B95735E9BF4BFECEADA36E6DF0357F2EFCB375BFD3139DCC71BBC7051EEF30AD83EB672C9DDB5043678165C632B63A65C69260090000523458CA49299AE3184BB954402A0D609D61404BF48CA57C8EFD7CFDCC31DBC658F78B2B8B23BEAEEDBD6DAD60A9439C7EFC86FE37047E1EFDD168F3BC6BCFB342A704BC9F5FF973F3B27697593FEB30DA7E6A7BF398E38E09BCA7EFCB7D839E3FF1F413CD5F5CF30BEBBE942E4F75314F39FB943AFF1EEF246FE0BEFC4E7D5F82A65B8365B86D88632C6BF52DF599031F596A8E98FE5AC432FFB56AEB755D074D8858A71C6349B0040000291A2C070E1C98F4B3C22E5FBEBCD9CFB2A8078C050505D6C5D043C3402283E5909543ACC076FC8F8EB7C2DBD1DF3BDAFAF9F4F34FB702A4F3B55D67750DCC6CCAE7FE97E2BF04EEFFE6E6DFD4F9DD123EE53999D9D4AFCB7D24D7BA95F02881F3E4334E0E0A89CE30283FB71EDA3AF0F351C71C1508AF23DE1B61FD7BE535E7FEE15C2B50CAFDA16F0E0DBC77F0EB83ADDB760FB4734DB0AC6F1B8A778630D3CE0A2B81F1B197DE89EA753D4A1E0BAAD39D7BBF32074F5E6695821EFD382B2CC1120000A462B02C2B2B33A74E9D9AD481CAA449939AFDBA7091669792112C7BCEED6905B6D0C78F3BE138F3E2D617077ED6214D42A7737652EECBEF904028F70B1716D699519400A8EF4B9095DB82E905E6A80F4759F7477E30D27A7EECCEB1E6ED2FDD1E98A194E7AECEBFDABA2FC155C268B81954E78CE509A79E1058AE2BB39B320BEA8619CB68B6A178660A13751DCB279F7CB2D9AE632981F1AD8DFF3117BCFE719D59CA992FBF673DBF7EF3EEDA99CD092FD6A953FDFFD66D7019D7B12458020080540C96D5D5D5668F1E3DCC43870E256DA0D2B1634773FDFAF5293FA06AEE60294B64255CCA72D9332F39D30A88F21AF959BFE6EE75775B033F99D97C60C703817028C12F6B6C9675BFF38CCE11672C753894D7848652F977CADF0B172C65C672E02B0303CB79F5E3F237DDB214361E0DCD18461B1A630D973AD40E1A34A859FEBF75B03C70E06083AF1B3AEDD5C0CF4BDEDC6C963CF69A552484DEFEE03CD330BC56D893E5F47BF6EC49C8BF77DFBE7DD6F1E73A58A6437B45B0040000CD1A2C459F3E7DCCD5AB57276590F2C61B6F58C1321D243258CA67F8872E7FB0C29E3EBE511EBBAED7757596CDCA73121A25C8C971987A76512FA3D5B3877A06527E8FCC20EAB0A7672965C6529E1FF6F6B03A41F19CABCFA9336329C75B86CEA0CA497BE4354699113694BAE918CB78459AB98C352C46FBFAE60E953A30CEF6AD0FDC1FFCCF6541C7554E7B716DD860596307D1E232BF39C87E4FFBAE7D02816FE6CC9909F9F7CA325CFD37D2A5BD2258020080660F9632882A2C2C4CCAACA51CAB346DDA345707CBBB56DD65151DC66E1A7293755F02DF3D1BEEA913FAA41495175927EE9163281B0A71CE594709983A30CA6CE505D75F5067796BB4C1524E0E2467B36D11B2D4D6192CF5F2DDD0FF0F8265DD99CBD065A95DBA748979796BB870D9AD5BB7A867489B2B58FE7BC90741CFE9E32F438365B8F73B439FCC5A36F5497CE4F7C9EFD57F235DDA2B8225000068F660691DBBA406A32FBCF042420728322094BDFFD11E939689C1528E6D94B0274B5B5BDED6D29A89D4414C429B2C91BDA6C33575DE27814DCEF81AE9A43BCEF2FD93BE6FFD7E39D6517EBF7EBDCC58469A410D174AE5A43C3A00D7778CA5FCDBF4B25839C18F044DE7D96B0996F52F8BD527F47186C4584EC813E97DA97449918682E553E5EB1A0C96FD27F9AD194E6BD6B24BAF40F02B2E2E6EB24B8FC82546060C1810345B992EED15C1120000A444B0946388E44C8C1B366C48C8E0E4A38F3EB26601D6AC59933603AAA60E96F76FBD3F705911097F57E45C11F4BCF3B21DCEE327E56CB112D89CD7B094C72FF9FB2581FB1222F56CE2A9E79E6A2D7F9520AA2F3FD2C23EC652DF9713023534DB195A6419AD5E6A9B3F393F68465582A4DCDE38F8C63A9741215846BF2C5642A1ECE489F51222A1EF6BECF533131D2CFB4D5A12B414564EEA134BB01C5CF6A269E41E3E0672F8F0E18D0E97122A478D1A15F89D72ADDD746AAF08960000202582A5983E7DBAB51C4FAE33D99476EEDC699D0823DD969425F23A9672B21D1DCAE458CBDF77FA7D60F62FD27BA2990594E017CBEB63099652F4196A9D27EC719E4C285125538365B870998865B6A9162C9F5BB631E8B97FBEF076BDC1B272F516EBB223424268F1C425567BE5BC8EA8CC5CC6BB2C56DEE79CA964092CC11200008265234D9E3CD9ECD4A993F9C1071F34C9EFDBB871A3152A478F1E9D7603AA44064B0AC13211E1B2A9436A22826543AF0B0D96CF541C0EA4231F7F2D70FFAEA9AF5AED554E8E1174CCA59CD047CEEA1A0D799D2CD1771E5329251DDB2B8225000048A960A9672EF3F2F2CC7FFFFBDF8D3AA18F0CD8BC5EAF35F84B47044B8265323576F96AAA2D7F0D0D8C53E7BD1DF6B9CFBF3A600E7C64A9351329AF9BF8DCE1E5A79B77EEB71E7B7FD39EA06331777F5E1358F6DB7DD894A070A903A65C7B72C99225D66CA45E262BCB5DB76DDB6656555599A5A5A5D6F27FE7FB64F96BBAB657044B00009072C152C831975DBB76B5CEE2BA6AD5AA98DEBB62C50AEB782F39F1453A1FA344B024583657B88C75C631954ED41329583E5DB92EE2F3727D4B798D94D0F7C9352CAD1D5E0BDE09BC46CAE819CBCD11D3ABACFBABDF7EC75AC6EF0C89B196746FAF08960000202583A53663C60C6BC0267BF6EFBBEF3EF395575E313FF9E413B3A6A6C67AFEEBAFBF3677ECD861CD003CF8E08366FBF6EDAD019AECF54FF7B329122C0996E9B02C365597BF3607DD5EC51A2833A1BD2258020080940E965A7575B53976EC58B367CF9E758E4792E5AE32B3294BCF64A63353102C0996A91E2E9F7CF249EB7583060D2201B9BCBD2258020080B408966E44B02458A6C2B2D848CB5BF5D95F099520580200008225C19242B08C79E692E5AF20580200008225C19242B08C3B5C122A41B0040000044B822585601977B8BCF4D24B099520580200008225C19242B08C8F1C5329DF7D39010D40B0040000044B8225856019974D9B36112C41B0040000044B82258560D938044B102C010000C19260492158122C41B0040000044B8225856049B004C1120000102C41B02458122C0182250000044B102C0996044B80600900000896044B0AC1926009822500002058122C29044B8225089600008060098225C1926009102C01002058826049B0245802044B000040B02458520896044B102C010000C19260492158122C41B0040000044B102C0996044B8060090000C112044B8225C11220580200008225C19242B0245882600900000896044B0AC13211C1B262E52673C4F42ABBBC6695F9AF55078AF3B1BEA53EB3A8D41FF43BE4B1818F2C0DBC2E5CD1EF7D70D6CA7AFF3D2BDEDD6EBD6EE7DEAFF87008960000806089508B2B1613EA089629192C6B0E1C0CFB9C04BCFE939634F83BE4758FBDF44E54AF1B3AEDD5A0C724400E9EBCCC2ACE007AD7D4576BEF97F9AC9F41B0040000044B280B972D34A76E9E4AB06BE6327BD36CB3B2B2920DB281A5B095ABB758816EC99B9BA30A8C6F6DFC8FB9E0F58FEBCC52CE7CF93DEBF9F59B775BB7231F7FADCEFBBFFDF6DBC0EFF9E70B6F5BF73FDCBAD7FA79F11B9B825E03822500002058BADAC6EA8DE6CBFE970997CD1C2A2B2A2BCC0D1B36B8721BECDEBDBB1524EB2B1D3A74300F1C386885BA6897A4EA607920C2CC67A4194B09AD258FBD66153D3B59A45EA3672D6569AE5E8E2B3F1797F9694808960000806089EAEA6AD3E7F3594B3129C92F3253E9D65029962D5BD660B09C3D7B7660E650CF34F69FE437EF7BEAF57A03E36CDFFAC0FDC1FF0C5ED63AEDC5B56183A55E822B817190FD9ED019CF221536CBFEFD268D07C1120000102C01A48AAE5DBB460C95050505E6538BDFB102608D3D6B39755EEDD254098EF2F3FB9BF634182CFFBDE483A0E7F4F197E18EB10C7D7FB8E7E4F84B102C010000C112401ACC5A8E7A648E15E4F67D511308753A580A39DE511E7BE05F6FC4142C9F2A5FD760B0945951E719689D339EF7CE5CC10747B0040000044B00A924DCB19685E3CBCD810F2FA913F89CC152CC78F9DD3A3397A1C1B2DFA42541C1504EEA43B004C11200008225800C9DB5340CAF15DE463D32376CE00B0D96424ED453DF8CE573CB36063DA7CFF41A2958CA1968F549822484164F3C1C70E5ECB09FECFA920F8D60090000089600524D8F1E3D42CE047B206CB0D4A1B03EF51D2319FABAD060F94CC5E140AA2F45A2AF63293EFFEA8039EFD50FADC70898044B000040B0049042E40CB93A583EF7DC731183E023CFBF1555600C37B3A983E1C047965A3391F2BA89CFAD093CB779E7FEC0B25AE7B198BB3FAF09BAB6A5044A799FDC07C1120000102C01A4107DAC65B8D9CA5867229FAE5C17F179E7753143DF27D7B014D317BC13788D94D133965BD7B194FB124EE577481005C1120000102C013413B986EAB871E3CC9E3D7B9A797979A661188119CBDCDC5C6B69EC983163ACD701044B000040B00410306BD62CB34B972E112F3112AE74EEDCD99C366D1A9507822500002058026EB67EFD7AB36BD7AE3105CAD0D2B1634773EDDAB5542608960000806009B8CDF4E9D38396BAEAE5AEF7DE7BAFE9F3F9CC2D5BB698FBF7D71EAFF8D5575F99DBB66D33ABAAAAACA5B2F9F9F941EF93DFC3EC2508960000806009B8C8ECD9B3EB04CA9933679ABB76ED8AEAFDFBF6EDB35E2FEF73FE9E871F7E98CA05C1120000102C0137CC543AC3607171B1353B190F79DF800103827E1F33972058020000822590C1E4984AE7F2D7E1C3870796BBC64B96C98E1A352A6859EC9A356BA86C102C010000C112C844CE33BFCA4C656343A5335C3A672EE5843E00C1120000102C810C239714711E5319EFF2D748E4F7398FB964492C0896000080600964F06CA59C7827D1E195594B102C010000C112C820D5D5D541B3957BF6EC49C8DF91B3C53A2F4522C77402044B000040B00432805C7B5287BD3163C664CCDF02C1120000102C012449CF9E3D03616FC9922509FD5B55555581BFD5BD7B772A1F044B000040B00432415E5E5E20EC35F5497B426DDBB62DF0B7BC5E2F950F8225000020580299C079EDCAA6BAC4482472E911FDB7A400044B000040B0043240B2831EC112044B000040B00498B164C612044B000040B0047018C75882600900000896001A85B3C282600900000896001A85EB5882600900000896001AA5BABA3A10F6727373CD3D7BF624E4EFECDBB7CFCCCFCF0FFCADF5EBD753F9205802000082259029BA74E912087C3367CE4CC8DF98356B56E06F74ECD8914A07C1120000102C814CE20C7D326BD9D427F191DF27BF57FF8D69D3A651E92058020000822590693A77EE1C087EC5C5C54D76E911B9C4C880010382662B0F1C3840858360090000089640A691631E9DD7B41C3E7C78A3C3A584CA51A346057EA7FCFE356BD650D92058020000822590A9A64F9F1E08817AE632DE65B1F23EE74C254B6041B0040000044BC025264F9E1C1406E5D84839A18F9CD5351AF23A3966D3794CA594D1A34753B920580200008225E0D6994B1D30E5DA934B962CB16623F5325959EEBA6DDB36B3AAAACA2C2D2D350B0A0A82DE27CB5F25AC02044B000040B0045C468EB9745E86249E2227EAE1984A102C010000C11270B9193366C41C302550CA2C25677F05C1120000102C01045457579B63C78E357BF6EC59E7F849AFD76B76EFDEDD5A2A2B339D00C1120000102C0100044B000040B00400102C010000C1120000822500006E0A963535358C7800000973F0E0418225000099EC88238E78F7F5D75FFF8A610F002051DE7FFFFDFF1E75D4511FD1EB020090B94A2EBCF0C2F719F6000012E5D24B2F7D57F537F7D2E5020090B98E5765E5CF7EF6B355555555DB65B91200008D25FDC9DAB56B3FF9F5AF7FBD46F533EBECFE0600006478B82CB13B7E9342A1345CE41A90D40385527F39E288233E54B70F102A01000050AFACACACE355C87A4095831E8FE72B757BBB1BFEBFED6009000000008857CB962D8F360CA3AF0A585B2564D9658F7AEA08822500000000A0A150D54E95771C815297675C5407044B0000000088555656D6B92A50CD0F132875E94FB00400000000846518469E1C47594FA8945240B00400000000D417A66409ECC79182A5C7E3B99A600900000000A8574141C1499196C3CA1962099600000000806883D50C550E3882658DCBFEFF099600000000102FFB243E9FCAD257C330CAED60B99260090000000068504949C9912A542D53E576FD980A98EAC79CE9044B00000000408354882C9460A9EE1EE17CBC65CB9647132C0100000000F5722C81FD85DBEB82600900000000310AB70496600900000000885AA425B0044B00000000408358024BB00400000080B8B104966009000000008DC21258822500000000C48D25B0044B00000000881B4B60099600000000D0282C8125580200000040DC58024BB00400000080B8B104966009000000008DC21258822500000000C48D25B0044B00000000881B4B60099600000000D0282C8125580200000040DC58024BB00400000080B8B104966009000000008DC21258822500000000C48D25B0044B000000348112B3E4E899EB673E3BEFB579DF2EAE586C969797539258A4CE172E59B87BB17F711E5B6392B77D96C0122C41BF40BF000040D390C1C382650BCCA99BA79AE3F78EA7344399BC75B2B968C9A2CF2B2A2ADAB145264FE812D8BEA53EB3B0D4B7BC7082EFA948A56F99BF8DF5BA09BE87EAFBDD85E37D57C9EBFA942EFB11C112F40B14FA050040C6933DD20C1E9ABF4CD932E5407979F93AB6C8E408B704D60E960DCE5ECAEB5479DEF99804C8BE65BEA5529C01B46FA97F817DFF4B553E2358827E8142BF0000C848B2E4860E3C358A1A401C648B4CBC484B60AD6039BEE2E2C289FED6A1B39445137CDDE4F9E28915E7C96DD184CA19E17EEFE180EABF43EE178DAB38A7F6F5FE56CED7102C41BF40A15F00006414399E83CE3B6506100CD49320D2596075B02C29997D6C7DEF0F9DB12C9E50715D51A97FB6147B76727F51A96F6F60D96C59E52CEB7E6016D3B7956009FA050AFD0200C095038829DBC79A152B869A2BCB075945EECB6374FC0C20D2497D6781B542DF84CA7C4778F4072F6BADEC1B2E58964CF71F673FBE4D05CAAA70C7651696FA76A8E0393293EA926049BF40BF40BF0000404C038829DB1F34572F1A68BEFDD280A0228FC97374FE0C20D241436781AD1B2C2B0DE773FAF8CB70C75886BE3FCC739FC9F197044BD02F50E8170000AE1D40CC7B6B449DC1832EF3DFBA9BCE9F01445A88B40436EA6059E6EFDC60B02CAD5C6BCD50863993AC0A96930996A05FA0D02F00005C3B80585E3938E200429EA3F3670091EAEA5B021B3958FAD6075D6264A2BF35C1926049BF40BF40BF0000409C0388958BEF88388090E7E8FC1940A4B28696C0460A9685657E8FF3397DA6D748C1B2A8D47FBDBE6EA584501524AB03CFC9D961C72DFB31C112F40B14FA050000030806100C20D250434B60C305CB065F17122C8B26F83BE8E7F4A548F4752CE57ECF49FEE3D5CF6DADC7322460122CE917E817E8170000886D00513E28F200423D47E7CF00225545B304362458F60FF79C04C3A252DF2A6B26D25AD6EA1FAE9F2B9EB4F44C79AC5F99FF7CE7B198B73DFCCAC9CE6B5B4AA094F7C9FD340C91F32548365056B2C5D12FD02FD02F00001840442CCB960D89388090E7E8FC1940A4A26897C03A8365515965C7C8BF6FF6B1F66CA559E77DA5FED972BFB0B4B2B77E8D7526D8D2CAA9D6752CD5CF124EE57748104DC36079B92A07EB0B962ABCB766ABA35FA05FA05F0000308088586654DF67AE7AB9EEB227794C9EA3F36700918AA25D028BA8C3E5C27A82E5F2962D5B1E4D2DD12FD02FD02F00001840D4DFB9AD18566700218FD1F133804845B12C8145D4C1F2F248C1D2308C36D410FD02FD02FD0200800144BD65C29EF1E69257EFAA338090C7E4393A7F0610A924D625B088295C863BD67225B395F40BF40BF40B00000610F5766A53B63FD8E0B134F21A06000C2052054B60131A2CEB1C6BC9B195F40BF40BF40B0000441C40C81EE739EFDD63AE593830E2E04117798DBC96BDD40C209A1B4B609312DCE7325B49BF40BF40BF00004083038886F646B3979A01442A62096CD282E5D58E632B5B5123F40BF40BF40B0000841D4044B337BABEBDD40C06184034C2498D083C2C814D92ECECEC45122C99ADA45FA05FA05F406AF585009052038878070FBA30186000112799FD32EDDB98B00436B99FD30F7FF8436BC692AAA05FA05FA05F40EAF48500907203080A03886670BD2AFB541967DF467D421896C036CFE764074B4EDC43BF40A15F400AF48500C00082C200E27047AA3B50D94BFB69B41D2A4B60D3E37302FD02857E01B4B100184050184024AB236DE8F1202C814D8FCF09F40B14FA05D0C60260004161009128AD1AE830F5F3618F3361096C7A7C4EA05FA0D02F803616480BB9B9B967783C9EDE1D3A7498979797B7C9EBF57E6D9F0AFFBFEAFE16FB9A6BFDE575D4160308061029D79136D45146DC5BCB12D8F4F89C40BF40A15F006D2C523743A9B1D4B3AA6C54E50B3B43D5A8F2B1AB329461186DBA75EBB6B27BF7EE9F959696EE5DB16285B96DDB36B3A6A6C61472BB6BD72E73F9F2E55BC78E1DFB8E0A9E9FA8CAF1ABF7E5B12931806000D1ACAE8F71EF6B9DD7B304363D3E27D02F50E817401B8BD4CB50AA94DB01D28CB264668652FF6367AB30F97A6161E197AB57AF360F1D3A64464B85CC759D3B77DEA07EC72B323065D36200C100A2D93AD2D671BCEF0BE95059029B1E9F135548BF40A15F006D2C522B43A9B230863019AE644E862A2828C8EFD4A9D3D7F3E6CDFB36964019EAA9A79E7A43A5EE9DCC5E3280600091161D69D0FBAFBDF6DA292C814DFDCFA9054BB6E81728F40BA08D454AF0783C39B2D2CB1912737373CD7BEFBDD7F4F97CE6962D5BCCFDFBF75B39E9ABAFBEB2568156555599E3C68D33F3F3F343C3E517699FA1EEBCF3CE82DB6EBBEDC0860D1BCCA6F0E1871F7E9C9797F789AA982E0C20E8BC1940245C43272788CAF7BFFFFDBFDF72CB2DDF9E75D6595DE92652F7736AC2DF03FA05FA05D0C6D2C6A271A1B2B50A83079D8172E6CC99D62183D1D8B76F9FF57A799F3360A66D86EAD7AF5F4FE59B682B205A3B77EEDC61874BD7CE5C3280600091C48EB44996EEA87079131D6AEA7F4E2DD8AB4EBF40A15F006D2C9A3B54E63843657171B1353B190F79DF80010342C3657A65A86EDDBAFDA26BD7AEDF34D54C65B8994B7B59ECF90C20280C209A5CE8C90664F96A8716B12F630D7D1F2731E07302FD02FD026863696311817D4C6560F9EBF0E1C303CB5DE325CB64478D1A15BA2C367D3254BF7EFD3E9A3F7FBE9948D3A74FAF908351194050184024A4236DEDE810A7A962DAB7D176A891DE4787CAE704FA05FA05D0C6D2C6220CFBCCAF8199CAC6864A67B80C99B94C8F0C3562C488DBFAF7EFFFDD37DF7C63265AFBF6EDD7B971492C0308061049EA485BD87B594D4789A6437576A4BAB4773CCF71267C4EA05FA05F006D2C6D2C8243651BE73195F12E7FAD6F59ACF398CBB4C85083060DDA2E97144986575F7D75A91B672D194030804880481D5CB88EB1BE0E35DCEB1F0DF37A8E33E17302FD02FD026863696371385806662BE5C43B89306BD6ACF499B57CFAE9A7AFE8DDBBF7778DB9AC48ACF2F2F236C97A6406101406108DEE485BC5D04186EB50A3ED48433B549602F139817E817E01B4B170ADDCDCDC33F4097B645671CF9E3D09C94D72B6D8904B91A46E862A2B2B7BFAD1471F3593E99E7BEE91632DFB67CA9E0A55FEC000820144A2B7A1383AB4863AD4583B52E7DFFFD46D7B6BF99C40BF40BF00DA58DA58B649CDE3F1F4D6616FCC983109CD4E729D4B47B04CDD0C3562C4882D2B56AC486AB0F4F97CAFAA4A999F091B9D63CD73B9DAC0AE6600C1002251DB5048471A6D4716A9433D32CE8E34742FB16B3A543E27D02FD02F80369636966DD2F1FCB3FA354B962C496876AAAAAA7206CBD4CD507DFAF439B063C78EA4064BF5F76429ECD64CDAE81C6561B8BD1B0C20184034761B6A11FF711DE13AD40F1AD19136F6DF93D1DF753E27D02FD02F80361699BF4DAA9F37EAE79AFAA43DA1B66DDBE6FC77A46E86EAD0A1C377353535490D965F7FFDF56E55293519BAD105F66E38373E06100C201AB90D3576AF68B80EB5311D696887DACA851D0C9F13E817E817401B4B1BEBD26D52AE2DA91F6BAA4B8CD477E911C7BFA126A52BAD39C8DFCDE48DCEB97743A6CF1940308088771B6AD3A64D85DDE98D6BE49F3A32CCDED90FECC71B639CFDBB4E726307A34B565656C529A79CC2E784B4E817645BB83CFBF2A85FDFED996EE6A9E79E1AD3EFBF75D4AD0DBEE6CF857FB6EE777AA293396EF7B8C0E31DA6752058F2BDA12F44AAB7E58192ACECA44BCA565A41418199EC194BF5F70EC6F261654249F600A2D70BBDACC6F2A15D0F993DE6F430AFF45E690D0C2E6A75917955EE554D3E4049B70144BA6D3FD75E7BAD79ECB1C79A8DD81B5ADF5EDA582E1C1D712FADDBBED3F5153E274AB4A53983E579D79E17F639699FCFBEFC6CABE8BEE3C4D34FB48ADC9792FB48AEF53BEED9708FF59EBE2FF7B51E77BEFE17D7FC22F0FA2E4F75314F39FB943AFF06EF246FE07EFBA9ED03F7A59FA05FA0D01752D2A5306369EBD3A7CF37C93EC672E7CE9D3B32F8184B5D567A3C9ED62D5BB63C5A5E97EC60298D64DB7BDB5AC1528738FDF80DFD6F08FC3CFAA3D1D6E0423A7E09783FBFF2E7E665ED2E0B1A2048677FCC71C704DE9309038874DC86EC8EEB8B168939AE249E0ED5EDC758F23921ADFA85D036F9F81F1D1FF179E93B86BD3DCCBCE0FA0BEA04CBCE333A9BA79D775A9DDFE76CCBE5E7D6435B077E3EEA98A3027DCF88F74658BF475E73EE1FCEB5FA03B93FF4CDA181F70E7E7DB075DBEE8176CC58F2BDA18D454A6E93EAF6438EB10C317AF4E83DC93E2B6C5555D5864C3B2B6C3D0D608B640F20BACEEA6AF69EDF3BD041FFA5F82F81FBBFB9F937610710F29CCC6CEAD7E9BDD1121E25709E7CC6C90C209A791B0ADD2BDA888EF4D116E1CF84174B879AB267C22B2AADBCA1B0AC72965526F89E92D2B7CCDF4697A0C74A7DA62AFF71BE5F1E2B2CF52DD7AFD3A5FBD029A62E1D7A0E92F799A5CFAD7DBEBECFE9AABFB62F94D7F5295DF6233EA7C488F479398BFEACD5FD87EAFB5D85E37D5745F979A55DBF103A2329DBD2D1DF3BBADED74980FCDEF1DFAB132C7F70CA0FEAF42563778E356F7FE9F6C00E46F9FD57E75F6DDD97D74A5F122EDC3A77389E70EA0981D536B273527662B214D6D58378FA42DAE5266B9713B14D7256D8301E7DF4D105C9BE8EE5030F3CB02253AE63E9F890971B86D126420398B401840E69326BD8C2313B29F77BCEED690542B95FB8B0B04E072F03007D7FC8CA21D66DC1F40273D487A3ACFB233F18C900A219B7A138F68E36746DAE682F1C1DEAF216297CEDAE92E9FEE3227574AABC1B6587787B439F93FDFB9E77BE463ABEBE65BEA5523A0EFF57E52F2FB9F6CBDAD7F917D89DA8FCFC199F53930F606E8FE675F57D5EC13B1BEAFDBCD2AE5F082DFD7CFDACEDE8FB277D3F68454B68911D8A524283E54F7FFDD3B03B29E5774A180DED53A4EF39EE84E3C2BE5E76380E7C65A0755FFE5DFAF1ACB1591C63E9DE60495F48BBDCE4ED7222B649AE6319C6EBAFBF9ED5A74F1FF3D0A143490B96050505DB54A59C9D210D617D7BD4923E8018B36D8C152EA5833EF39233AD80281DBAEEB0A5DCBDEE6EABE19499CD07763C10088712FCA433D783831611662C194034CF3614E35ED2682FF81C6B87AA9720B549A7EF6951A9FF7AE9988A27545C17558738BEE2E2C289FED6417B58873CB87196AF7AA2F57B26569C27B745132A67D409B6252547EADFD3EEF6095297FBCEBBA46597DAD7FB5B395FC3E7D4440398309F970C408A26F8BAC5F2791596FAEFB0B6977115E744F8BCD2B25F88747CA5EC6094FBF52D87D5F7254C4AD127F291F785865279EC9CABCFA9B3C35102E9C5AD2F0EDA012AC7DCCB6B8C32236C9FE2F643245C1A2CE90B699713D62E27629BCCCDCD3D43BDC63A6F8CBA6FEED9B32721B969DFBE7D667E7EBE3358A676861A3162C4D7AB57AF4E4AA85CB366CD1E5521AFBAED4B96CC01848449E9CC25344A902BAE2C0ECC2E4A91E54F7AF650CF404A232A3388BA53D7B394326329CFCBB1360C20524EA4BDB5D176A4B176A8FAEFA555475A5232FB587BAF68544B69748728EF8B654FAB84561560674BB1F7AAEE2F2AF5EDBD216FD070796DC1F0994B034B726BDFBB95CFA9E906304DF5790596679555CE0AF379A56DBF10BA0C560E77D06DF02D77DF12F41A3984E1C21B2EB44AB893F7B4BAA395795DAFEB02AB5B62ED17E4D8FE92774AEAAC9471F60B7AF58D3E3910FD02E80B699793D12EC74A2E3DA203DFCC993313929D66CD9AE50C95AFA4FC06307DFAF43103060C48CAAC65F7EEDD3F561F421EC132B17BA3A5149517598308BDD7B9BE10E7ECE02560EA8181CC56CAC91B4297B732804819B2E72E74294E8716B15F9B2B5C87DA3E86BDC2A9DDC195FAEF08EC212DAB7C5FDD7FB8DE8E6E4265BEA3D3F3072FC7A9EC1BAE43D44B70D563DB544758E5DC4BDB71D853BE5F5E7AEDE7BDC72EDAAB3ACC917C4E4DFBF936F5E7A5DF5F58EADBE1F8BCD2BA5F70B6DDCEF67CD0F241412754D3E1538AF38CE20D1D63A957AC84EB53E498FABB56DDD5E02112D217E8552D126EA59FA86FA92EFD02E80B6997532058B6D1A14F662D9BFA243EF2FBE4F73AAEA1991E196AC89021FBE7CF9F9FD050F9FCF3CF6F97D9CA189739102C1B71BCA5F374F2F5054B39D64696CECAB18E32D3A95F2F3396E15ECF0022E53A54E7490C9C1D632C177C8EF4BEB4BDF07351596547E9B8A4B3B23B3AEBB804E9F0E4E77E65FEF31BEE102B8DE0905A7BDC48B8634342DF1FFA39DD36E6C5EFBA8F7EEE1D3EA7440E609AECF392E73E93E37C32A55F6811E1046EB203519EFBE59F7E19B4FC55074C7D9928BD43506629C3B5F391765686165905A357CAE44FCE0FDA21AA67546F1C7C639DB398D32F80BE907639D1ED723C54B6F1EBE0575C5CDC64971E914B8CC8C49F73B6326D32D4DCB973FFDCBD7BF7EF366CD8909050B969D3A643797979BB55D23EDF8D5FB2640D20F4F193A79F7FBA15D89C7B9CE5F14BFE7E49E0BE84483D9B2817BE96E5AF1244F5E547F49E6D7D5F4E08C4002265852E053AC2DECB1AEB69D343DFD72A5D3B52E9C86A97BF2E38C1D151050E7897E334ECC7C6C7D42196F93B37D8219656AE759E81D6B9A7F62FDE0107F89C92388069E4E7A5063093D3BD5F9013AFC909D3E4B8FA48AF919D85D20EEB338AEB223B1AF5D9BCDBDCD326A6101BA95F90A24F30E73CDEDE792E80641782257D216D2CED722382E5D9AA7CAA03E0F0E1C31B1D2E25548E1A35CA192ABF48BB0CF5F8E38F3F2A27F2D9B56B5793864AF97D9D3A75DAE3C625B0CDB567DAB9C7B9A1D748F08BE5F50C20D2A6436D8ABDBF6979C63B396B5C51A96F55988E2EE84C6A4565953D42672EC32CE1591F746AF489FED68DE9103B0C7DF2453EA7440E609AF6F3CA8460492158BA3C5CD2C6D22E279CC7E3C9D127F2D13397F12E8B95F785CC549A699BA19E7CF2C939122E9B6AE672D3A64D66972E5D3E53153EC8CD5F3206100C20D2AC434DCB0B3EEB13F5C812D8081D5D9D5374CB0906EAEB100BCBFC9EA03DADF619EA22758872065A7D9220E93C5507581D784ECE6A376ED98FDDFE3925720093A0CF8B7E817E01F4857041BBDC182A001638C3A51C1B2927F491B3BA467BF65739518FF3984A29699FA1A64E9D3A5185C1EFE498CBC69CD067C18205FFEDD0A1C36752D16EFF923180600091448D5DB293914B7E9C9D59B41D6283AF0BE9108B26F83BE8E7F429D4F5F5B7E47ECF49FEE3D5CF6DE5B19F9D7FA597CFA969073089FCBC123190A15FA05F007D21ED726AB5CB8D253397AAEC730643098A729DCB254B9658B3917A99AC2C77DDB66D9B59555565969696CAE5188302A52C7FCD980C3565CA942B860C19B25BA662DF7AEBAD9802E5DAB56B650AF7B3F6EDDBAF74EB31950C201840A448871AEB5ED68C3D39416D47E71B1C658718F6E2C3D2A1C9125B6B0FAAB51CC73F5C3F573C69E9997A59ADF31892DB1E7EE564E735B9A42394F7C97D3EA7261BC024EBF3A25FA05F007D2132B85D6E0A72CCA5F332247196573232433DF4D04377297B6579ECA38F3E6AAE5CB9D2DCB16387595353638548B9956328257CCA746FAF5EBD6ABA76EDFAAE246C379EFD95010403881412EB129E8C5EF213CB1ED4704B6935E77531EBBCAFD43F5BEE179656F6D6AFB1CE60575A39D5BAFE96FA593A55F91DD281F23935CDE79AE4CF8B7E817E01F485C8D076B98903663B3B601E8C2550BA22433DF1C413973EF0C0034F0C1D3A7463B76EDDBEC8CBCBFBD69EDE3DD4B973E72F54F05CADCA2849E97CA51840308048BB0EF57255BE68C1059FF99C40BF40BF00DA58DA5834199595CE5001B3AFCA48CFAAF2B12A358E20B95595F9AAF42743810104038874D0CAEE285BD5F3FCA774A47C4EA05FA05F006D2C6D2C12CF0E9326AB3BC1008201443A8AB4B796253F7C4EA05FA05F2058D2C6D2C622493C1ECFD57A79AC61181CC70B06100C2032A243A523E57302FD028560491B4B1B8BE406CBB98EA5B02BA9113080600091EE1DEA383A523E27D02F50E81768636963913C2A485E1E7A321F1534D9FEC000820144DA926517FA5217E07302FD02FD02FD026D2C909C60393FCC99605772AC25184030804867275105E9F13949A74335D02F50E817401B8BB40F959747BAF48861189C340A0C2018400009EF88D85EE91728F40BA08D45FA6F6B0BEBB97EE5726A080C201840000C7A40BF40BF00DA58A0BEED2CE26C25C75A820104030880410FE817E817401B0B44B39DCDAF2F54728658308060000130E801FD02FD0268638198E4E7E7FF406D7B5F52136000C1000260D003FA05FA05D0C60271C9CACA3A5E6D7B5F50136000C1000260D003FA05FA05D0C60271B9E5965BFE9F6118FBA909308060000130E801FD02FD02686381B8E4E6E69EA0B6BDCFA909308060000130E801FD02FD02686381B86465659DA8B6BDCFA809308060000130E801FD02FD02686381B81414149CE4F178F651136000C1000260D003FA05FA05D0C60271F17ABD27AB6D6F2F350106100C2000063DA05FA05F006D2C1097ACACAC1FAA6D6F0F350106100C2000063DA05FA05F006D2C1097F6EDDB9FA2B6BDDDD404184030800018F4807E817E01B4B1405C0CC3F81FB5ED7D4A4D800104030880410FE817E817401B0BC4252B2BEB476ADBDB454D800104030880410F1A6D71C562DAE4D42835AA5F38C816491B0B248B6118A7A96D6F27350106100C2000063D68B4054B17EC98BA792AED723397C73E7CEC69D52FAC638BA48D0592252B2BEB74B5EDEDA026C000820104C0A0078D56EE2BFFFBCBFE973F537DC3D7B4CFCDB3A3D1EA132ACA37575454B4638BA48D0592252F2FEFC76ADBDB4E4D800104030880410F9A846A8F5A979797AF949514B24C9F92D42275BE8E3E8136965A40336C773F51651B350106100C2000063D00401B0BC4252B2BEBA76ADBFB849A806B6567675F4F030C30E80100DA58207EB9B9B967A86D6F2B35013737BEAFA8F21D350130E80100DA5820EEEDEE4C55B6501370EB17A0A534BE520CC3F803350230E80100DA58207659595967A96D6F333501B736BC7E47B02CA74600063D00401B0BC4CEEBF5FE4C6D7B9BA809B88E0A92AD74A864D61260D00300B4B140A3B6BBB355F9989A801B37FE574283A52AF3A91980410F00D0C602B1C9CACAFAB9DAF63EA226E0B606B75D98506915AFD77B09350430E80100DA58207A6A0C7D8EDAF6AAA909B8ADC17D2752B0340C6316350430E80100DA58207A595959E7AA6D6F233501D750C1B14DA450A98BC7E3F935350530E80100DA58203A5EAFF7976ADBDB404DC03554685CD350B054E5596A0A60D00300B4B140D463ECF3D4B6F7013501D7320CE37FD497E0536A0260D00300B4B1407CB2B2B27EA5C6D5EBA909B8567E7EFEA9AA01FE0F350130E80100DA58203E2A549EAFB6BD75D4045C2B2F2FEFC7EA4BB09D9A0018F400006D2C101F8FC77381DAF6DEA726E05A5959593F555F824FA80980410F00D0C602718FA92F340CE33D6A026E6E7CCF54650B350130E80100DA58203E2A545EA4B6BD77A909B896D7EBFD99FA126CA22600063D00401B0BC4472ED727D78AA726E05A5959593F575F828FA80980410F00D0C602F1C9CDCDFD5F152ED75213702DF505F8856A803FA42600063D00401B0BC4C7308C8BD5B6F7363501D7F27ABDBF545F820DD404C0A00700686381F8783C9EDFA86DEF2D6A02AEC5C55C01063D00401B0B347ABBBB549537A909B816D7DC0118F400006D2CD0E831F56FD5B6B79A9A806B716A6480410F00D0C6028DE3F57A2F53DBDE2A6A02AEC519AC00063D00401B0B347ABBBB5C9595D4045C8B038D01063D00401B0B347A4C7D85DAF6DEA026E0E6C697038D01063D00401B0B3482D7EBBD526D7BAF531370F39780F5E000831E00A08D051AB7DD5DA5CA0A6A02AEC5B43DC0A00700686381468FA9AF56DBDE726A026EFF12B0770560D00300B4B1409C0CC3F89DDAF65EA326E0E6C6F71A55AAA80980410F00D0C6028CA981B81886F107F52578859A0018F400006D2C109FECECECDFAB6DEF556A026EFE12FC4985CBA5D404C0A00700686381B8B7BB3FAAB28C9A809BBF042D55F1531300831E00A08D05E2C3640D5C4F7D01FE4F35C095D404C0A00700686381B8C7D4D7AA6D6F093501D7CACECEBE5E7D11CAA90980410F00D0C602716F77AC0284BB793C9E1BD497E0656A0248EEA0A7A8B4F286C2B2CA595699E07B4A4ADF327F1B5D821E2BF599AAFCC7F93BE4B1C252DF72FDBA7045BF57DD7FA8BE7F4FE178DF55F2BA3EA5CB7EC4A703806009C42E3B3BFB3AC3307CD4045C4B7D015AA906782135012477D05332DD7F5CB8E7EC10F96E43BFC30E96B747F33A559E773E2601B26F996FA994E0F0EA5F60DFFF5295CFF8A400102C81A8C7D41C5E0677F37ABD7FF3783C2F511340F30F7A8A4AFDD74BC02B9E50715D54C1727CC5C58513FDAD4367298B26F8BA59BF6762C579725B34A17246E8FB4B4A4A8E3C1C50FD77587F7F5CC539B5AFF7B772BE060008964083DBDD9F55A9A026E05A2A54B6565F82F9D404D0BC839E9292D9C7DAB38B512D49D5C152DED7D0EB9C3396125A55809D2DC59E9DDC5F54EADB1B58365B56392BB024B7F6BD5BF9C400102C81FA71DE12D0F8E6E4DCA2CA0BD404D0BC831E3D731898692CAB7C5FDD7FB8DEC038A132DF111EFDC1CB5A2BFB860B967A09AE7A6C9B0A9455E18ECB2C2CF5ED50C173249F14008225101D152AFFA2B6BDC5D404DCFC2568E3F178E6521340F30D7A8ACA2A3B4A0094D06707C6FE56F853C1517EEE57E63FBFE16059690487D4DAE32FC31D6319FAFE30CF7D26C75FF24901205802D1E18498E04BE0F1B4555F8239D404D03C831E0984B5CB5F179CE0087CFD03A17382BF95FDD8F898826599BF7383C1B2B472ADF30CB441339E65BEC97C520008964074BC5EEF5FD5B87A1135013737BEED5479969A00923FE891B3AF1695FA5685098CFD9D8F159555F6089DB90CB314767DD0254626FA5B132C01102C81E4E04A0BE04B6018D9EA4BF00C350124F37BE7B54ED2234B60C306BE906029E4443D615E17089685657E8FF3397DA6D748C152CE40AB4F1224215405C9EAC0737276D871CB7ECC270580600944872B2D8001AEA21AE07F5113406A0C7A9CA1B03EF51D2359E77521C1B26882BF837E4E5F8A445FC752EEF79CE43F5EFDDCD67A8C800980600944B3DDDDA4CA8BD4045CCBE3F1E4AA6C39939A00522758F69DE01B1C65B0EC1FEE390986B2C4D69A89B496B5FA87EBE78A272D3D532FAB751E8B79DBC3AF9CECBCB6A5044A799FDCE7130340B0041A1C5373093FB8BEF1CD57E5496A0248A56019DD4C64B8A5B49AF3BA9875DE57EA9F2DF70B4B2B7BEBD75867822DAD9C6A5DC752FD2CE1547E8704513E3100044BA07E8661DCACC2E53C6A026EFE1274500DF0E3D404C0A00700686381B8B73BAE0D0F77F3783C1D55B87C8C9A0018F400006D2C10F798FAEF6ADB7B9E9A809B1BDFCEAA3C4A4D000C7A00803616888F61186D54B89C4B4DC0CD8D6F5755A6501300831E00A08D05E2DEEE6E55E5396A02AE651846778FC7F34F6A0260D00300B4B1407CD478BAADDAF6E6501370F397E036F52578989A0018F400006D2C101FC330FEA1C6D5FFA626E0E6C6B7972A13A90980410F00D0C602716F77ED5479969A806B1986D1C7E3F194521300831E00A08D05E2A3C6D3596A5C3D9B9A809BBF0485EA4B309E9A0018F400006D2C10F776E751E5696A026EFE1214A9F210350130E80100DA58203E1E8F27C7308C59D4045C4B7D01FAA92FC283D404C0A00700686381B8C7D486DAF6FE454DC0B554A81CA0BE0763A80980410F00D0C602716F775E559EA226E0E66039487D09EEA32600063D00401B0BC43DA6CE350C632635013737BE77AA328A9A0018F400006D2C101F152AF3D4B637839A809B1BDFBB5419494D000C7A00803616887BBBCB57E5496A02AEE5F17886198631829A0018F400006D2C10F798BABD1A533F414DC0CD8D6F892AC3A90980410F00D0C602F151A1B283DAF61EA726E0E6C6F76E5586521300831E00A08D05E2DEEE0A54994E4DC0B50CC3B8C7E3F10CA12600063D00401B0BC4478DA73BAA71F563D404DCDCF88E565F82C1D404C0A00700686381B8B7BB4EAA4CA326E0E62FC17DAADC414D000C7A00803616888F61185D3C1ECF546A026EFE128C515F8201D404C0A00700686381B8B7BBAEAA4CA126E05A2A543EA8C2653F6A0260D00300B4B140DCDB5D375526531370F397E021558AA80980410F00D0C602F1310CA3BBC7E3F9273501377F09C6AB2F4121350130E80100DA5820EEEDAE872A8F5013702D152A4B55B8EC434D000C7A00803616887B4C7D9BDAF61EA626E0E6C677A22ABDA80980410F00D0C602F1310CA3A70A9793A809B8B9F17D58F6B0501300831E00A08D05E2DEEE7AC9840D3501377F0926CB59ACA80980410F00D0C602F1F1783CBDD5B657464DC0CD5F82A97241576A0248D80067BE0C721A282BA929002058227DC9394BE4DC25D404DCDCF84E53A513350124EC3B76B92A07EB0B96AA236A4D4D0100C11269BDDDDDAECA046A026EFE124C57A5809A0012FA3D5B584FB05CDEB265CBA3A925002058227DC9E5FBE4327ED4045C4B7D019E505F84F6D40490D041CEE59182A5FA0EB6A18600806089B4DFEE8A5479889A809BBF0433D4C0368F9A0012FE5D0B77ACE54A662B01806089F4E7F1788AD5987A2C35013737BE4FA9E2A52680847FD7EA1C6BC9B1950040B0446650A1B29FEAD71FA426E0E62FC12CF525C8A12680C453DFB5B9CC560200C11219B9DDF557E5016A026EFE123CA3C2653635012425585EED38B6B215350200044B644C1F3F40F5ED63A809B8B9F17D569576D40490B4EF9C75AC25B3950040B044E650A172A00A97F753137073E33B477D09DA521348752566C9D133D7CF7C76DE6BF3BE5D5CB1D82C2F2FA724B948BD2F5CB270F762FF624EF805806009046F7777A8721F3501D79263BEB8DC01D28184CA05CB169853374F35C7EF1D4F69A63279EB6473D192459F575454B0D20100C112383CA61EA4C6D4F752137073E3FB822AB750134875325349A84C8D3265CB9403E5E5E5EBD82A01102C815A2A540E56DBDE686A026E6E7CE773C903A403598649A84B9DA282E541B64A00044B20B0DDDDA9CA286A02AEA542E54B5EAFF76FD404529D1CE347A04BA960C9C00D00C112383CA61E6218C63DD404DCFC2558C4650F9049C172CAF6B166C58AA1E6CAF2415691FBF218619060098060092470BB1BAACADDD404DCFC2558AC82E55FA8096442B09CB2FD4173F5A281E6DB2F0D082AF2983C472024580220580289E0F17886A931F5086A026E6E7C2B54F93335814C0896F3DE1A512754EA32FFADBB0984044B00044B2051DBDD70554AA809B8966118BEECECECEBA8096442B05C5E393862B094E70884044B00044B2041DB5D89844B6A026EFE122C51E1F25A6A0299102C572EBE2362B094E70884044B00044B20116419AC2C87A526E0E6C677992A7FA42640B0A4102C01102C81B8B7BBBBE5043ED404DCFC2578353B3BFBF7D404322258960F8A1C2CD5730442822500822590A0ED6EA42A77511370F397E035C3307E474D201382E5B2654322064B798E4048B00440B0041241AE6129D7B2A426E0E6C677852A575113C8846039A3FA3E73D5CB7597C3CA63F21C819060098060092468BB1BA5CA9DD404DCFC2578C3E3F15C414D201382A51578560CAB132CE531C220C11200C11248E07637DA308CC1D404DCFC2558E5F57A2FA3269009C172C29EF1E69257EFAA132CE531798E4048B00440B004124185CA7B3D1ECF206A026E6E7CDF54E5526A02E91E2CA76C7FB0C1632CE535844282250082259080EDEE3E55EEA026E0E62FC15B1E8FE737D404D23558CA4CE49CF7EE31D72C1C183154EA22AF91D7327B49B00440B0049A92611863D4987A003501D7525F80B5B9B9B9FF4B4D201D836543B394CC5E122C01102C81246D770FA8D29F9A809BBF04EF1A8671113581740C96D1CC52D6377B49402458022058024DC1E3F13CA8C6D4FDA809B8B9F17D5F7D112EA026908EC132DE50A90B019160098060093405152AC7AA31753135013737BE1FA82FC179D404D231585208960040B0448A6C770FA952444DC0CD5F828D595959E752132058520896000896407C3C1ECF38C330FA52137073E35BEDF57ACFA12640B0A4102C01102C81F8A850395E85CB426A026E6E7C3F56E56C6A02044B0AC11200C112887BBB9BA0CAEDD404DCFC25D89C9595751635018225856009806009C4C7E3F1941A86D1879A809B1BDFADB9B9B9675013205852089600089640DCDB5D990A97BDA909B8F94BB04D959F5013205852089600089640DCDBDD44557A511370F39760475656D6E9D4040896148225008225101F8FC733C9308C9ED404DCDCF8FE273F3FFF546A02044B0AC11200C112887BBB7B44951ED404DCFC25F8D4308CFFA12640B0A4102C01102C81F8783C9E7FAA3175776A026E6E7CF7646565FD909A00C19242B00440B004E2DEEE26ABD28D9A809BF7AEEC2B282838899A00C19242B00440B004E2DEEEA6A8D2959A809BBF049FE7E6E69E404D806049215802205802F1F1783C530DC3E8424DC0CD8DEF17595959C7531348052D5BB63C9A6049B004008225D270BB7B5495CED404DCFC25F8EAE69B6FFE3E3581E66618469E0C06546947B024580200C11269B6DD4D53A5133501377F09FE5B5050701C3581E6929595756EFFFEFD5FFDF0C30F77EEDEBDBBA277EFDEABD4765916BA5D122CD32F58AACFF1728FC73397AD1C00C11299CE308CC7549FD7919A809B1BDF6FBA75EB760C3581649365AFF9F9F9C3E6CC99B3FBD0A14335E661FB5E7AE9A5C57979792B2474122CD32F584AA05465BE2A0719E0012058C225DBDD74550AA809B8F94B70480DDE8FA226904C8661FCE1FEFBEFFF68EFDEBDBBCD08F6EFDFBF7ED0A041DBF4D2588265EA07CBD040A90B5B3C0082255CB0DD3DAEC6371DA809B8F94BF09DBA39829A4032C8A56DFAF6ED3BF3CD37DF8C1828431C5CBC78F1B6AE5DBBFE73D1A24504BA140D961E8FE76A59F21A1A280996000896700B152A9F507D617B6A02AE6E7C255CAAF2AD3D28FC468EBB54A5464EECA3CA97EA8BB25F2E4B22D7BC54B77B55D9ADCAA7AAFC47959DAA6C57456696B6AAB24595CDAA7CACCA47AA7CA8CA46553E50BF67BDBA7D5FDDBEA76EDF51BF6FADBA7D4BDDAE51B7AB559163EBDE50E5755596ABF29A2AAFAAF28A7ACF5275BB44DDFAD46DA5BA2D57B78BD57B17A9DB85EAF62575FBA2BA9DA76E5FB007B9CFA9DB7FABDB6755794695A755F9972A4FA932439527A51190A50BB22E5ECEE625A78A960BDCAADB7FAADB87D5ED2439DE4FDD96AAD78C57B7E3D4ED5875FBA0BA1DA36EEF57B7F7AAD78C56B7F7A8DB91EA7684BA2D51CF0D53B743D5ED10757BA7BA1DA46EEF50B703D46D7F755BAC6E8BD46DA1BABD5DDDF656B7BDD4ED6DEAB6875C6457AE872467189383C165DDBEEC0993464B4E74A36E73D5ADA16E73D44DB6BACD52B7FF50B76DD56D1B75FB77757BB3BA6DEDF57AFFA66E6F54B77F55B7376467675FAF7EE79FD5ED75EAB6A5BAFD93BAFDA3BAFDBDBABD468282BABD4ADD5E611F27F75B757BA9BAFD8DFA9D17ABDB5FABDB8BD4ED05EAF67C757B9EFADDBF54B7BF50B7E7646565FD5CDDFE4CDD9E959B9B7B86BAFD695E5EDEAF264F9E6CD6D4D41C3263B47FFFFECF1F79E411F3BEF5F711EA522858469AA10C2D72BCACDA06FE3F3951587E7EFE0FE44CD4B7DC72CBFF934B1DA9FB274A919D0E6A9B3959DDFF61FBF6ED4F51DBD5FFA8FB3F92A2DE73AAFAF93475FF74B51DFD58FDCE9FC83625DB9614F5F399B2ADC936A7EE9F6D6F7FE748916D529654DBDBE779EAFEAFEC6DF60229EAE70BED6DF9D7EA77FDAFBD7DFF468A7ACF25F676FF5B75FF32FBBB7085BA7FA514FB3B72B57ACFEFE47B23DF1F998D97EF92FD7DFA93FAF95AFB3B769DBAFF7FF2BDB3BF7BD7AB9FFF22DF47F95EAAFBADECEFE8DFA4A8D7DC24DF5DF90EABFBB7D8DFE73652D4CFB7DADFF37FC88CBEFDDDCF56F73D52EC36C150F7BD763B2127C6CA9762B71F1D64B996B429D2B6481B23A7C89762B739DDD4FDEED20E497BA4EEF79462B74FBDD5FD3E769B55A8EEF79576CC6ECB8AD5CFFDECF66D80BA3FD06EF30649513F0FB6DB426913EFB2DBC761765B395CDA4DBBFDBCDB6E4BA54D1D6597D1765B7B9FDDEE8E51F71F9062B7C763D5FD87EC367ABCBA3F41DA6D29D286AB32D16ECF1F56E51169E3ED765E2E683EC56EFBE58C8ED3ECFE60BA5D1EB7FB8927A5DF50F767DA7D88F425FF523FCFB2FB9667D4FDD9D2DF48BF63F73D73EC7E48FAA3E7EDBE699EFD9D996FF759D2772DB0FB31E9CF5EB6CB62BB9FABB0FB3CE9FBFCD20FDA7DA1F489CBA47FB4FBC92ABBCF7CCDEE3F57D87DA9F4A92BEDFE75B55DDEB4FBDDB75479DBEE8BDFB1CBBB761FFDBE2AEBEC7EFB035536D865A3DDAF57DB7DBCF4F59BEC7E7FB33D0690B1C027F6B840C6073BECB2D31E37ECB2C7103296D8638F2BF6DA638CCF64BC618F3BBE9031885D643CF2B53D369131CA017BBC72D02E87EC71CC77ECD042338EA9A59DC8A726E076479494941C29C7BCC9F19637DE78E3F76420A807817A00A8077E7AD0A7077B7AA0A70778CEC19D1ED4E9019D1EC8E9419C1EBCE9819B1EB4E9C19A1EA8E9019A1E9CE941991E90E981981E84E9C1971E78E941971E6CE98156C800ABB33DB0B206557A40A507527A10A5074F7AE0A4074C7AB0A407497A80A407477A50A407447A20A407417AF0A3073E7AC0A3073B21831C3DC0D1031B6B50A307337A20A307317AF0A2072E7AC0A2072B8E418A1EA0E881891E945883113D10D103103DF8700C3CF480C339D8D0838CEDC3870FDFB775EBD6EF620D96FBF6ED334B4B4BADC142AA86CBFB36DF270319B3F38CCEE643BB1E327F78D60FCDF3AE3DCFBCD27BA555BA3DD3CD7A3EF47DF2D82D77DF12F1E7140F96D1961A7B50F8953D48FC42EFB0B207929F39765CED71ECBCDA6517BD136B876347D627F6B6E5DCA1B5C9B153ABDA2E7AE7D606C70EAE75F6B6AB7774BDEBD8D9F5B6BD9DEB9D5E6F3A767CAD74ECFC7ADDFE8EE89D60557A4798FD5D5AA67788D9DF316BA7981D142AF4CE31F93EEA1D64F677F425BDA3CCFEEE5A3BCBECEFF35CBDD3CCFE9E5B3BCEEC40A3779E3D6DB709D64E34BB9D98610F78F4CEB4C71D3BD4A6E99D6A76B89AE2D8B9F688DEC16687B2897A479BB4597A679BB463765B66ED74B3DB376BC79BDDE6DDAB77C0D96DA1B513CE6E1F47E89D71D26EEA1D72765B6AED949362B7B1D6CE39BBDDB576D049B1DB636B479DDD465B3BEBA4DDB6DB6E6BA79DDD9E5B3BEEA48DB7C3B3B503CF6EFB033BF1A45F90A277E6D9FD85B543CFEE430CBD63CFEE5BAC9D7B767FF30FBD93CFEE87AC1D7D76DF64EDEC93227D96DEE967F763D68E3F29D2BFE91D80769F67ED04947ED0EE0BAD9D8176FF68ED10943E538ADE3168F7A5D6CE41BB7FFDADDE4968F7BBD68E42BB2FFEB5DE6168F7D1D64E43BBDFB6761C4AB1FBF3C00E44E9EBF54E44293206D03B13655C20E303D9212445C60B326E909D45328690B184EC48927185141963C84E26196FC8B8437640C918448A8C4764E7948C4D648CA2EE1F2BE31519B74891437A641CD382155868DE19CB99D246501340924907D0AFCC7F7EDF327F1B5586F72DF599AABC1BE9F545E32ACE91D7C87B02BF63BA3F70D6D0BE65BEDFDBBF635A437F5B5E5738C1F75043AF2B9CE86F1DEEF19E93FCC75BBFA3AC328B4F32762A271E5D5555B5E8BFFFFDEFB7D184CAD75E7B6D5BE7CE9DBF1C366C9879EFBA7B533A6C0D583AC03CF1F413CD71BBC75901F1AE557759B75963B302A151BFF6ACDF9E15089BB98FE49A3F38E507E6C057065A3F5FD4EAA2C073F23B527D29AC3D005E1E2958B2D5038D57545A7983EA7766596582EF2929761F6A95A0C76AFBC3FFD4E9FB4A7DCBF5EBC215FDDE86FAC8C2F1BEABE4757D4A97FD884F06A865AF66F052134082158EAF38AD4F69C585B74FF05DA63AA3B685657E8F744A45A5BE31CE8068EF710CB05FFFBCEEEC8A26F8BAA9DBAF5579BDA8D47FBDDD013E553CC1F7B7A2872A7F5A52E23F3A9A60D97782AFB8E1D7F9736B3BCE0527149556FC51FDED7FD7FE3B2A0DBBD37EDED181BFCEA71C9B59B366B5ABAEAEFE3A52A0DCBE7DFB7F478E1CB94B6629644F76BA9DBC474261FBA9EDADDB5FFEE9976651795150B01CF6F630B3EBACAE8160F9F32B7F6E767FB6BBD9615A87C0FB3B3DD129AD4EDE23B32EF68C1DC1126862CEBEB24E9F56CF8ED99060797B547DA4EADF9C8F4980EC5BE65B2A2538BCFA17D8F7BF54E5333E25B83C58CA2A32839A0012A86892FF5CD5E12C9212668FEA8B819F2754E6EBB0793868FA8F2E9AE06F253396D6EF52F7E535DD26CFFFBE7ADDB5A1B39875FE76ED6B16E93DBC81805AEAAB72FCDDFEEAB16FEA74E2EA6F174FAC38AFF6FEEC6325BC3A83A50AC79DD5FDBED67D159CF9A463274B9DE6CE9DFB5A4D4DCD411D28BFF9E69BEF9E7FFEF9AD1D3B76EC204B9CF46B533958DEB3E11E6B86F198E38EB102A40E8639A53981E028B396CE6029AF6F7547AB40003DF2A823CDD6435B9BBDE7F7368B2B8BADC7257CA6E3E546EC19CC5708964082FB577B076BF1848AEBA20A96E32B2E96D538A1B394F64E5B53FABCDA9DB89533EAF689B53B7E6B03AAFF0EEBEFDBAB89A46F76BE067023390C4196C75313400249400B3793581B2C2B1BDCB32321D27AED38FF2556075656D9431EB796D2AA9F655633D27B0B4B7D3B0A4B2BDFACF3771D339676D8FCBAC1FF0F7B6F7160296C84A5B288DDDD77DF5D505555656EDCB871D7942953C21E9F90EA33967AF96B97A7BA0482A5CC4886CE62EAFB23DE1B61CD4ECA633FBEF0C756D094C7EFDF7ABFF5D86FDBFE366DAF63E9E864650673395B389088BE75F6B1F60EDAA896A4EA6029EF6BE875CE194B09AD2AC0CE9662F797FB8B4A7D7B03CB66CB2A670596E4D6BE772B9F0EDCC83ECEDD434D0049A03A9B4F55792574C6D2DA5B5A56D9517E76767812E46489A9F5BCA31393A5B4B5B38EB57B6AADD95039BEA4B4B2B73D1B796DE06FD6CE821E52B7E323CE585A4B78FCF3F47B6449ADFD6FEAA16723F512A0704B618BCA7C3DAD9F2756FC8E4F397ECED9C9740C96A16152EE174C2FB002A31C7739FAA3D141C1F2ECCBCF367BCCE9613D26339EA79E7BAAB514367F727EE0444052E47DE91A2C0124B44FB5660E03338D6595EFABFB0FD71B18559FE8088FFEE0FEB8B26FB860A977AAAAC7B6E9BE3374C65376E2AA3E79249F0A5C1E2CE5448AD9D40490A44E5085B3EA903D9B2F068263A97F41E87B824ED0E3E8148515F8A4439DB4F44CDD4986F99B9B5579AB6EE75A67C632E8D8106B4FB0FD6F94632C6B7F56FF76158C9D274B501DF15AD98BCBA79B78E9122C87AC1C623EB0E381C032583D03298FEB6039F28391D6996325745ED6EE32EBF694B34F31FFD4ED4FD67D99F594D7DEFED2ED693D63092031023B636B77C04ADFD8DFEACFEC434AC21D225237581E5E31E43CFE32DC3196E1FAE090E73E939DAF7C327033FBECFC9CD811485AB074063A47C7661DBF58EAFB32F43DB26C47661303338DD62C62ED718D72863CB9ED35B1E294A60E968EC74D99C13CFCEF0D0EBFF66BFEC3A74BB0741E5779DA79A7054ED62327E0915B59FADA22E47223B27CB69FAF9F75ABCF022BB772BCA53E890FC11240701F56BB6A46767A3A025FFF40E8B4CF45202B75620A9665FECE0D06CBD2CAB5CE33D006CD7896F926F3E9C0CDECEBA6B7A326806405CB883396FE91FAA43CCEF7C88900FA8E5BF6E3D08ECF19FCACD7440896F65EDD6FEA5B0A2BB3A5A1C761460E96F2FF50DBA9EA633399B124583A83A52C65955B999194DBBBD7DD6DF67AA1579D632C9DEF19B47C901528E5DA97E972D65B8225D02CFDE897AACF5A152630F60FE9FB7A84CE5C86590ABB3EE81223F679030896407CE4DAC2720D5B6A02485EB0FC7D482765ED319599C94827E1B1CF38D7A1760F6DC585FA843DCE33C8D63363B9BFCE2C63C88CA55C4A24DCC97B74672927EBD167A0959312102C099691CAD89D63CDA16F0EB596BD3A1FD7D7A7946B5786BB8EA584D11B07DF685DCBF2AF03FF6A3DAE03AA1C6F49B004DC4D9FA847769686ED5B4382A5EE57C3BC2E102CE5B25FCEE7F4995E23054B39AF813E49908450D9511C784ECE0E6BEF0406DC2A2727678E0A976DA90920D1A17262C5EF5427F69C55225D6EA4F6E769211DE315FAA43EB581D2FFEBDAE5B1F67258FB3224F67B2BA30EB8D15CC7F2F0BF69BF3E13AC5CCB32CC6BB6F109132CE3398B6C3AFFFB0996408AF4AF8E50D870DF17FE18C93AAF0B0996B273573FA72F45E23C3CC4EE23DBD69EC19D8009D706CBE754B9959A0012ACF69223C1D7B78A74B911BD1CF6B6875F39F9F05959F512D6CA1B0E77A4872FF41C69C6B231C152CF92AABF3D3CB413951306D9C7787EC98C25C1D28D856009A44EB0547DDAE0288365FF70CFD92B73565933918E7E4FF7777A59ADF39014E9A39DD7B6944029EF93FB7C2A70238FC733D7308C36D4049020766755157A8AF2C3B381FE79218F3DA167269D41547ED6CB52EDF7E5D60DA9BE89D176C27AEF6B7D64C94F6199EF96A0F7D94B6F45E178DF55CEEB6A826049B004D03CC132BA99C8704B6935E77531EBBCCFDE81AA2FEB6597CFFA96564EB5AE6369F7CFF23B2488F2A9C08D7272725E50E5166A0248A0862EC60C102C09960000A4338FC733CF308C9BA9090020585208960000C425272767BE0A97ADA9090020585208960000C41B2C5F54E5266A02000896148225000071F1783C2F79BDDEBF51130040B0A4102C0100884B4E4ECE02152E6FA4260080604921580200106FB05C6818462B6A02000896148225000071F1783C8BBC5EEF5FA9090020585208960000C4252727E765152E6FA0260080604921580200106FB05C6C18C65FA8090020585208960000C44585CAF2ECECECEBA9090020585208960000C4252727A75285CBFFA32600806049215802001017152A7DD9D9D9D751130040B0A4102C0100884B4E4E8E5F9596D40400102C29044B0000E20D964B0CC3B8969A0000822585600900405C54A85C9A9D9DFD276A02000896148225000071C9C9C959A6CA1FA9090020585208960000C41B2C5F310CE30FD40400102C29044B0000E20D96AF666767FF9E9A000082258560090040BCC1B24A956BA8090020585208960000C41B2C5F330CE377D40400102C29044B0000E20D96CB3D1ECFD5D40400102C29044B0000E20D962B54B98A9A000082258560090040BCC1F20D8FC77305350100296E71C562025DEA941A152C0FB25502001008962B55B99C9A008014B760E9821D53374F25D4A54079ECC3C79E56C1721D5B2500008160B9CAEBF55E464D00408A2BF795FFFD65FFCB9FA970F935E1AEF9662AFFFFF6EE36468ABB8E03782488A8B5A156A4B5A9ADB5D6A6565A35A6698CF1348D29A610129DECC371B889C9455B28B7D437C5946C62782349E9EE1E8D2410638C8AC4E4FA82B424ECED5A1A20C6A78AD807A56839D0A3553815E15A03EBCCEECEB2777060266CCD6D3E9FE49F9DDDDB79E037243FBEFC67E61AA1B2B2FBD54AA5F2157F2B01A01D2C7F954AA53EA91200B34018661ED8BD7BF72FA2CB30A37BFC66E3181919A9CFD6636FD5FD45A112002E0896BF0EC727540280AE3B7EFCF8974BA5523D6C3C37AB0600F48E542AF59B6C367BB74A00D055F57A7DFE8913274E86EA8383833B5504007A473A9D7E3E0C9777A904005D353636F6837ACBBE7DFB8E653299E5AA02003D132C7F1BF6F6C52A0140D79C3A75EAAEB367CF9EAB77D8B061C3582E975BA03A0030FBA552A903FDFDFD1F570900BA667C7CFC707D9A898989F1B0011555070066BF743AFDBB305CDEA9120074C59123471EABCF60646464DC2F5306809E0896073399CCC75402802B2ECC8ED74D4E4EBE3953B03C77EEDC1BF97CFE405F5FDF5CD50280D92B0C95BF0F82E00E9500E08A3B7AF4E8FEFA651C3E7C782C6C4643AA0500B3573A9D7E31ECE7B7AB040057DCDEBD7B2F972BEB67CE9CF959D88CEAB95C6EBE8A01C0EC1486CA978220F8A84A0070C5AD5FBFFEA14B5D0A1BE5CA75EBD6FDC48C2500CC6EE974FAE5542A759B4A00D015DBB76F7F79A65479E8D0A1EF868D68BF7B2C0160D607CB3F64B3D98FA804005D1104C1AD61803C739107F71CECEFEF3FE8A9B000D013C1F28F51CF570900BA66E3C68DE530489EED0C965BB76EDD964AA536A90E00F444B03C14F6F50FAB04005D135DEABA6BD7AED7E250393131F1A3E87F3673B9DC02D501809E0896AF64B3D95B540280AE5AB56AD5174E9E3C39198EFAE0E0602593C92C571500E89960793808820FA904005DB765CB96674AA5523D954A8DA80600F454B0FC53386E560900BA2EBAF435FA9D956EEE07809E0B967FCE66B337A904006F55E3A9AB0200F45C7F7F3508820FAA040082250090B4BF1F09C78D2A018060090024EDEF478320B8412500102C0180A4FDFD58383EA0120008960040D2FEFE97152B565CAF120008960040D2FEFED72008AE530900044B0020697F1FCF64328B540200C1120048DADF8F0F0C0CBC5F2500102C0180A4FDFDB5200816AA040082250090B4BFBF9EC964DEA7120008960040D2FEFEB7952B575EAB120008960040D2FEFEF72008DEAB120008960040D2FE7E229BCD5EA312000896004022A954EA642E975BA0120008960040D2FEFE8FFEFEFEAB550200C11200482493C9FC73D9B265EF510900044B0020697FFF57100457A9040082250090B4BF9F1A181878B74A002058020049FBFBBF972E5DFA2E950040B0040092F6F7D34110BC532500102C0180A4FDFD4C2E979BAF120008960040D2FE3EB964C99277A8040082250090B4BFBF1104C13C950040B0040092F6F737070707DFAE120008960040D2FEFE9FBEBEBEB92A018060090024EDEF670B85C21C950040B0040092F6F773E1CBDB540200C11200D0DF01981D8DC7300CC3308CDE1BFE95030000000000C07985426DEE50B9B63C1E6B8AD51F36964BD5C9A1F2E80BFFCB36D63C51591C6DA7B9BDC29CCE87B384DBA9E74BB56F47CB8F946BB75FB0EE70ED818B6DF3C1CDB5ABA275D79447834BED3BFE4EF8FA7A389E6C1D7BFDE162F553E1EBCED6FBB1700C3BDB0000005D0B9785399D21AE15C67647A12F0A9AF18843DBDA62E5F3D382E5A2E8F3706C8BC35E1C4A1BCBC3957BD76E7EF6C6E6E7D5C7A606C35A7FF4F9EAD2D357E74B95CFE68BD59F36F7339A696DF3A978BFE1F8F9C58265B8CDCF34026CB13AD80E9B4F54EF89C269FB3BA56ACD99060000E8A256F87ABE15E24EE74BB51D71E0CC6FAADCD20C90D57B9A3390D5CF4D5F3FFCFE7D0F0D57AE5D5DDAB3B050D831AF19EE2A8B5B3396F735835FEDFE0B436D6DEEDAE1CA6DCDE51DF3D616AB5FEA0C966BCAB5AF85CB43ADED2DEA5C7775A972473394EE59D8F879A9FA703B58B6963BFE6C3B9D650000802E07CB30C4A51ACBCD7079AC1DCA36D5EE6E04CBD2E8AAE812D9F3A1B03027BFB976EBD48039FAC530D4ED0FBFF7FD8E99C697E2E5301C7EFA52C751F85E6D7EF4DABE1476864B653B02E3A98EE5B1F63E872BF70E95ABCF761CC33667190000E0FF142CF3C5DA57DBDF29561F9FB25E7174209E358C66365BF7365E1008E359CC6826B211401F1FBD21DA4FBE3CFAF57836B21904E33038F552D87CB9FA601C18A3F5DB97D6761C673C4BB9A65C5D1607DFC6BE8AB5FBA7CF76020000D0856039FD52D8E8F36F3CF9DC35EDE0D7113EA7AF1B5F8E3AB469CFF59DB394F1BD99AD07ECB4673FDB61B335A318DD63D97C5F7D257CFF5CE70385C29079203E9EA9C73B9A892E956DBF2F561FED7870CF531DF7674EE44BD5EF38CB0000005D0E96179BB1EC089D13D1ECE44CEBC7C1320EA2D14C64E7CFDBF75D4E7BCA6B1C2CA319CCF3FBAA3D7D91EF1C8FDF3F323C7A53637FADD0D83EFE69F755C6F76E364367ED5BCE320000C05B1B2C1B612C7A204FF4B4D5F8E9AB975A3F0C9EDF6C2F97475FB8DC8CE5CCC1325A7FCAAF3E393D7DC6B263DD89F3FBAF3E9A2F557F19EEEBC7D1BD9CD1A5B951B86CCE62D6EE74967BDF7F01C2B8EC92D1A67BA30000000049454E44AE426082, 1); -INSERT INTO `act_ge_bytearray` VALUES ('302558', 1, 'var-baseTask', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000331313170707070707400352F6C656176652F726561644F6E6C794C656176652F343332303730666331663532633063633137376164393031613561616338643174002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E000C77080000017FE5DADC00787400203433323037306663316635326330636331373761643930316135616163386431737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302560', 1, 'hist.var-baseTask', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000331313170707070707400352F6C656176652F726561644F6E6C794C656176652F343332303730666331663532633063633137376164393031613561616338643174002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E000C77080000017FE5DADC00787400203433323037306663316635326330636331373761643930316135616163386431737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302561', 1, 'hist.detail.var-baseTask', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000331313170707070707400352F6C656176652F726561644F6E6C794C656176652F343332303730666331663532633063633137376164393031613561616338643174002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E000C77080000017FE5DADC00787400203433323037306663316635326330636331373761643930316135616163386431737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302573', 2, 'var-leaveOpinionList', NULL, 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000027704000000027372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B787400203062373632356665646161303565383566323832343836653163396339316239707400033131317400063330323536367371007E0002017371007E000677080000017FDDEFA3BB7874002064383138616336613836636631613634643231383462663036393964363761387074000331313174000633303235383478, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302575', 2, 'hist.var-leaveOpinionList', NULL, 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000027704000000027372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B787400203062373632356665646161303565383566323832343836653163396339316239707400033131317400063330323536367371007E0002017371007E000677080000017FDDEFA3BB7874002064383138616336613836636631613634643231383462663036393964363761387074000331313174000633303235383478, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302576', 1, 'hist.detail.var-leaveOpinionList', NULL, 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B7874002030623736323566656461613035653835663238323438366531633963393162397074000331313174000633303235363678, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302588', 1, 'hist.detail.var-leaveOpinionList', NULL, 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000027704000000027372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B787400203062373632356665646161303565383566323832343836653163396339316239707400033131317400063330323536367371007E0002017371007E000677080000017FDDEFA3BB7874002064383138616336613836636631613634643231383462663036393964363761387074000331313174000633303235383478, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302598', 2, 'source', NULL, 0x7B227265736F757263654964223A22333032353937222C2270726F70657274696573223A7B2270726F636573735F6964223A2270726F63657373222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C2270726F636573735F617574686F72223A22222C2270726F636573735F76657273696F6E223A22222C2270726F636573735F6E616D657370616365223A22687474703A2F2F6C656E6F73702E636E222C22657865637574696F6E6C697374656E657273223A22222C226576656E746C697374656E657273223A22222C227369676E616C646566696E6974696F6E73223A22222C226D657373616765646566696E6974696F6E73223A22227D2C227374656E63696C223A7B226964223A2242504D4E4469616772616D227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D33304636324437352D353136352D344532322D383433412D394441393335424135303331222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D32333931423338312D323736372D344134332D383237442D374333353037394145303745227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3137352E352C2279223A3134317D2C2275707065724C656674223A7B2278223A3134352E352C2279223A3131317D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D39363143373036422D413744312D343941312D394332382D414135433233433430364243222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D36463636323645392D383144342D343845392D394345332D433632464434433932454230227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3338352C2279223A3135357D2C2275707065724C656674223A7B2278223A3238352C2279223A37357D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D32333931423338312D323736372D344134332D383237442D374333353037394145303745222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39363143373036422D413744312D343941312D394332382D414135433233433430364243227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3238342E393233383535393435353934382C2279223A3132352E303334373433383734303737367D2C2275707065724C656674223A7B2278223A3137352E38313234373231373934303531382C2279223A3131382E313536363632333735393232347D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31357D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D39363143373036422D413744312D343941312D394332382D414135433233433430364243227D7D2C7B227265736F757263654964223A227369642D35383442353134362D373630372D343239362D393143342D383746384646323636333436222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3539382C2279223A3132397D2C2275707065724C656674223A7B2278223A3537302C2279223A3130317D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D36463636323645392D383144342D343845392D394345332D433632464434433932454230222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D35383442353134362D373630372D343239362D393143342D383746384646323636333436227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3536392E333832383132352C2279223A3131357D2C2275707065724C656674223A7B2278223A3338352E36303534363837352C2279223A3131357D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D35383442353134362D373630372D343239362D393143342D383746384646323636333436227D7D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A313230302C2279223A313035307D2C2275707065724C656674223A7B2278223A302C2279223A307D7D2C227374656E63696C736574223A7B2275726C223A227374656E63696C736574732F62706D6E322E302F62706D6E322E302E6A736F6E222C226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C227373657874656E73696F6E73223A5B5D7D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302601', 1, 'var-baseTask', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000332323270707070707400352F6C656176652F726561644F6E6C794C656176652F376538303465376562376162386633353461663133316362626336326336383374002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000057371007E000C77080000017FF0279400787400203765383034653765623761623866333534616631333163626263363263363833737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302603', 1, 'hist.var-baseTask', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000332323270707070707400352F6C656176652F726561644F6E6C794C656176652F376538303465376562376162386633353461663133316362626336326336383374002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000057371007E000C77080000017FF0279400787400203765383034653765623761623866333534616631333163626263363263363833737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302604', 1, 'hist.detail.var-baseTask', NULL, 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000332323270707070707400352F6C656176652F726561644F6E6C794C656176652F376538303465376562376162386633353461663133316362626336326336383374002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000057371007E000C77080000017FF0279400787400203765383034653765623761623866333534616631333163626263363263363833737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302616', 1, 'var-leaveOpinionList', NULL, 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDFADF437874002030623736323566656461613035653835663238323438366531633963393162397074000333333374000633303236303978, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302618', 1, 'hist.var-leaveOpinionList', NULL, 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDFADF437874002030623736323566656461613035653835663238323438366531633963393162397074000333333374000633303236303978, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302619', 1, 'hist.detail.var-leaveOpinionList', NULL, 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDFADF437874002030623736323566656461613035653835663238323438366531633963393162397074000333333374000633303236303978, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302630', 1, 'source', NULL, 0x7B227265736F757263654964223A2263616E766173222C227374656E63696C736574223A7B226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C226964223A2263616E766173227D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302632', 1, 'source', NULL, 0x7B227265736F757263654964223A2263616E766173222C227374656E63696C736574223A7B226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C226964223A2263616E766173227D, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302633', 1, 'source-extra', NULL, 0x89504E470D0A1A0A0000000D4948445200000288000000CD08060000003B43814C000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000000467414D410000B18E7CFB5193000000017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA793000000097048597300000EC400000EC401952B0E1B000011F04944415478DAEDDD0B7454F59D07F09BC924194208E115E3A22B56A4BADAB55A1F548F055F80407B5C2B25984A715DDB7A56DAD5FA586B7DD5F6D45D75ABDBDD565B151FA841E8FAA8D64715A85B05179422281110C16208C86308904C1E33D97B69E8491110C883103E9F73AE776632B933FE90BFDFFBFFFFEFFF060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D44961200FBC203CB1EF87A8F648F9F146C2EE81FAF8B6B8B3A486376637D2637F34AF6E6ECEF8C183162A98A000222D0293C52F1C87D7DAAFA5C92EC970C36166D0CEABAD5294A07C94DE50685C9C2A0EFAABED5F1A678D9D9679FFDACAA00DBCB5602A023453D87C51F15DFBAF2332B83649F6490CE492B4A074AC7D3414D414DB0B9E7E6BCA2B545C3CA2E2C7B72F2E4C9EB55066829A60440478A8695A39EC328A4B0EFA4F253C1BAE275D5B158EC56D500B6175702A02345730E971FB47CD70DD3E67850B8B430C85D9F1B64356505754575C1A6819B82869E0D0AD88636F4DDD0BFEFEABE435502D89E1E44A063CF4AEBE259BB9A731885C33E6FF609F23ECE0BB2D25941900982BCF5795B5FCBD998A3806DA83E519F17EE4A54021010814EAD60794110ABFF64D31485C5E867000888C0016657BD8451EF22000222708089E61CEECDCF001010010010100100101081034EBADBCE17CECEE46614084040040E345B0EDDB2C320988967822D03B628108080081C6852C5A920D537B5C3D76B8B6B15084040040EC886A9F1934D53769D5BC7030888C001275EF3E7BBA824D6243EF1B3BC7579419F397DB6BE070001113800E457E66F0D80D1FD97772637991BF49DDD37E8BEA2BB351101DAF3845D09807DDA08D5C483C28AC2AD3D84BB23BAE55EE1E2C220B13611540FAA0E1A7A342822401BD38308EC53518FE0EE86C396A29EC6BEFFD75701010444A0AB897A04F79A651101DA852166609F5A75CE2A4500E864F420020020200200202002002020020020200200D06AAE6206000E68AFBFFEFA3F2C5DBAF4E2952B579EB67AF5EA1E1B376ECC49A552415E5E5E537E7E7E436161E187E1FEC5850B17DE3575EAD4A50222004017D4D4D4149F356BD68DD3A74FBFE2BEFBEE2B38E18413822143860403060C088A8A8A823010066148CCDAB469536E6565E5C0F0BD030B0A0A2EBBE28A2B962493C96F4C9A34E90D011100A08BD8B061C37161287C69DEBC79C55FF9CA57826BAEB926C8C9C9F9C4FB1289C4D6AD5FBF7EC171C71D175C7AE9A5B11933667C76EAD4A97FB8FCF2CBA7AD5EBDFAD2F0F1E6AE58237310018003C61B6FBC31E68E3BEE989B9B9B5B7CFBEDB707C3870FDF6138DC91ECECECE0ECB3CF0EEEBEFBEEF8E0C183CFEBD1A3C7FCD2D2D201022200C07E1C0E1F79E491F230DCC5C78F1FBF7518796F44BD8A65656589281C868F5FEB8A2151400400BABC6858F999679E796CF8F0E1B1D1A347B7C931CF39E79CD8B871E37AE5E6E6BE3066CC9802011100603F115D90326DDAB497060D1A146FAB70B8CDB061C3BA9D79E6997DF3F2F2FE5D400400D84FCC9E3DFB96B7DF7EBBF8820B2E6897E38F1D3BB64F3C1EFFFA85175EF879011100A09D959696FE60DCB871E70D1D3A74AF575E79E59557BE336AD4A8BD9E73F869A239895FFBDAD7EAC3877708880000EDEFD6A6A6A6274B4A4A9263C78E9D1C86C5117B32DF2F5A047BD9B26505679E7966BB7EC961C386F5C9CACA3A31FC6E03BB42D1AD834887995CF5D2590B6A975D5E99FA78F087756BFAAC6FAC8ED766EAB2F2623941AF7861E380C4411B8A737ACF39A5E0EFFE73EC4167BEA86200B4D03D0C606561582CCBCECEAE2E2D2D7D3A7CFE585E5EDECC071F7C30B5B35F5ABC78F1A5D122D8BBBB94CDDE8A96C039EAA8A33E7CE79D77CE0BBA404FA28048BBFBD6E23BAF5ADB90BC7ED2EADF169D52787470E141E70483BA1D1A94E4F60EF26389A026930A36346C8A2FAEFD53BFD7AB178EFC65D53323CF7FE7FA4DBD730AEFBA6FD0B537AA2000DB290CB78BC2B078512A346EDCB827C2E74FAE5AB5EAD999336736B67C63F8DAE033CE38A343BED4B061C3BA870171888008BB7059C5ED7FBF2ABDFEF90FEB561D7CF521E3B2BED4F3B8203B2BFB13EF8B42627E5E22E89FD72F38A3E884E0FABF1D1FBCBA717E8FBB3E7AE286910BAEBA6C407EC9C89F1F71D51C15ED1CA2F940E1AE229D4EBFD055EF2000EC571261501C1FEEC7979494443D8B2F656565DDBFAD67B1B2B2B2E0B0C30EEB902F127E4E34C9F1D8AE5054019176F1CD25B7DFF4D6E6A537FE53C9E8D8C5079DBBC360B82B51988CB647D6BCD8F7BF2B9F9CFDED2577DC76CF91575DAFB29DC2AD5B1B8F783C3376ECD877C286F87FC2A7331389C4EC5D0DF3D0F9D4ADAB0BDE7AEBAD28F4DFAC1A741151CFE2056160BC20954A45FF6DBF5F5D5D9D535858D8211FDEB367CF9270D7254E9C0544DADC75CBEEF9C16B9B16DE74CFC0EF657DBEE0C8561DEBA2E2E1C1890547C5BEBDF48EEB2E5B7C678F5F0CFADE7754B873081BE058180E3F173E8CB69B9A8779DE085F7F36168BBD1C9EB52FDC7EA887CEE5E3D91F072BE7AD8C1EDEA41A745147D4D5D5B5DBD5CBDB8BAE660E758905B30544DAD49845375CF9874D0B6F79FCB337664543C66DE1E8FCC382C7C2E38D7BEF87FF3C76D1CD95538EBEF93695DE77CACBCBB3C2B3F2A61DB58D61388CE6DE0CC96432414949C986F07D33C2E7BFC9CECE7EF9D1471F5DA97A9D4BBFC1FD827E95FD8279F3E6DDA21A7462BB7302930EDB9FA6F0A4F5AF724DF87C593C1E1F50535313EB8890585B5BFB51B8EB2920420BA7CEFDE611CB6BAB6EFBE59157C7DA2A1C6E131DEFDE8157C5BEF1DE8F7F387CE195CFBF78EC7FCC57F14EAF57B89D1F6DE9743A1AEA49878F1755565606C11714A733C8EB93171C73C231C1B5D75E7BB36AD059856DC70E03629807A3118A4C180273C37D76B88F5E4B86FB97C3EDD1BCBCBC17A2692F975F7E79AABABA3AAF2302623299DC18EE1A044468A15B4EFEF317179F95D3DA61E59D897A1227F6FF6ACEA455CF3D1D3E1DA0E2ED63C2840989542A551236B42561239BD87E1FBEE5A0BD3C743411F5D879F3E60503BEEC8F0FD82BD162D4D1C966B716BD85D19CBF17C26D4AB76EDD5E0E4361B2E52F1416162E5BB162C5D1252525EDFEE5162C58B0283AF71210A1D997E64D2CCBC9CAFE4C3467B03D45C79FB2E6954386CC9F78D9EF8FFBD92F547EC7C68C1953929D9D9DD855C80BF745D1F3F071F4FC2FFB686277243A1BDFD17E0F4543D12D7FB1E2F8E38F3F6A43B0C11F12B037725B84C269E1F65C229178765717C885A1F1B773E7CE3DFA94534E69F72FF7FCF3CF47DD94D30544D8F637363BE7966B0EBD303B5AF4BABD7DFF6F2FCABE71F9FDD7850FBB7440DC55C88BC5623D5B3EDF3EE46D3BC6AE425EF87B3BFBE8A8A1AD6ADE52E1EF5485EFDDB6AF6B7EFDD36ADFD8DCBE441FB830FCBD7BC3467A7274667FC92597340988C01E9F6D3635453D8333C3F6EFA1E6256C92BBF37B15151577E5E4E4FC4B434343767B2E969D4EA7575455559D14EEBBC4C5940222AD367076D9213599DA43A365693AC2A9859F0B1A9B322547CD2A1D50F1C5F2E5FB63C06B3154BB7DB06BB9DF69C8DB16EE7611F2AA5A04BD1D86BCE6B93A7F793D6CD45253A74EADDA9D7FB7D2D2D21D05C4C6F038B1E8EAE6E6B6E5854C2673E79A356B66BA9A1968851BC2B66579229198B6374B694517C85D79E5958BA64F9F7EECF0E1ED37CA3569D2A437C3EF5918B6A34B0544081DDCAD68FC909E9F8FEFE95A87AD716EEF53729E5EFFDAC5413B2ECF3161C284A2542A55149EAD168541A7287CA96FB815B445C0DB4D3B0D79E1F7D9B85DE8DBE390D7866AC22D1A568987DF2B0A9DF785DFE3DEAED24802FB567979F98F5A7B8C6432F9F5279F7C72CEE9A79F9ED31E17ABD4D6D62E0E03E869615B3CBAABD45D40A4D57283F8974F2BFC5CAC233FF3E41E4707CF6F7863D4A705C49DF5E2853F3A24DCF29A876B0BB61BA68DD6B0EABB6D2E5EB4644B4B6D11F05A0CD56EFF7A2A3C4BAEDACF169C8E5ADBBF1A46F6B702E84C1E78E081F913274E7C74CA9429632FBEF8E26E6D7CF8E4F5D75FFF5AD8066E09C3EC5C01119AAD6FDCF499E80AE38E54940C63E9CCF5C7949696DE1E85B9F02F665174D145D0DCCBD762FF57A16EFB70D772B87607A249D06B9B8762A3D0B3367AAD0B06BCD6308C0CEC17162C5870694D4DCDC9C5C5C5478C1A35AAADAE346EBCF3CE3B1FAAACAC8CD67F3DBD2BD54B40A4D55299FAA27E39451DFA9915731606FD66A5A31EBFAB7614FC5A58BB2DE8B508777FE9C50BF7D1E2CDA9743A5D153EDEBC0F8769F7375787757ACA3032B0BF884E62FBF7EF3FFC89279E9813B6FF3D468F1EDDBD95874C46E170EEDCB96785FFEFF87257BB37BD8048AB353435E6E6C7121DFA99434EFB5270CFAAA783BF9915DC103E5DB92DF46D0B8389442269A8B3FD949797DFA10AC0FE26BA60A5ACACECA45FFFFAD7CF5556561E3C7EFCF87ECDB7C7DB23D19CC3685839EA398CC261D8262EEF6AB5121069FD7F4459F1BA9A4C2AAF2343625149EF60F5A9B18657BFFBD88FFC0900B0272171E8D0A15FA8AFAFFFB759B366FDE3F9E79FDF3072E4C87ED9D99F7EA165B494CDC30F3F3CE777BFFBDDE9D19CC36858B9ABF51C0A88B499BCAC9C0D1F37244B0ECB2BE9B0CFDCD0B029C8C98A57AB3E007BAA79CEF4F7C68E1D3BE9B1C71EBBBDBCBC7CC8A04183169F75D65985871F7E786EAF5EBD0ECACFCF8FD7D6D6AE4E2693EBDE7DF7DD779E7DF6D982AAAAAAE3A3F9EE61303C6FCA9429B3BB728D04445AAD29C8CC7DB766F9B96140ECB0756E16D7FE29FC67D65BAA0FC0DE0A43DEC270776E5959D921151515A3172D5A343C0C80C7067F5E8122BAD0319AA7581B6E3DC2ED956811EC0365EEB58048AB6D694ABDF84AF2CD53CFED35B877477DE6AB1BE7276B33752FA93E00AD150D3B87BB7B9A37423125A0B5B2D2F1A76624E7C5D24DE90EFBCCE7D6CFCAE4A4B7DE8713001010E96C960E7E74654DBAEE8FD3936F75C89CC0FFDD387FF39674ED92CE7C9B3D00101039E03564D277DFB0FCFE9A8EE845FCFEF25F6EAC6F4AFF97AA0380804827F6FE298F3FB5BEB1FABDBB2BA7AD68CFCFB967D5532B3FAEDFB0E2902DABCA551D0004443AB9EC74D3845FADFA4DF7B736BDD72E6B42BD53B3BCE6EE8FA6259A62C12533CF705B37001010E9F4A239810D41E3C46F2CFEC99695756BEADAF2D8D1F1C655DCBCB9B12973C5E2131FAF506D001010D94FBC7FD294F2BA4CDDBF8E5878F586B99B2AD6B5C531176EF9605D74BCDA74EAA74B4F7E7CB22A038080C87E66C9C9E50FA69AEAAEB8B0E287C18F3F7CF88FADB970E5A71F4D79FBABEFFE205D9FA9BF6EE9C9536E535D00687F16CAA65D443D8947CD2A9D3D69F50BBF9AF2F1F4F77F72F8B752A37A7FF198DDFDFD979373165FF3C1BD0D9B1BB6546765678D5D7262B96165001010D9DF35AF5378CEC039A5177CF7FD9F7DEBEA0F7EDEEBB8EE03579CDF6748E2841E47161F9CDBA7283F96E85E93496D595B9FDCF076CD07EB9F5AFB6AF5ECEA770FABCFD4AF09B282FBFBD7544D76410A00088874314B4F2A8FEE78326DE0ECB243E66E7EEF82B9D515A7356505BDB28260DBBD9BB7ED3F6C0A82DF47774859D2BC08F612E5030001912E1C14076FBDD7E55DCD1B00D049B94805000001110000011100000111000001110000011100000111000001118076905202404004F6B9744E3A95579BA7109D40A226313FDC55A904202002FB54434EC30B3D933D332AB1EF1DFCA7832B9A9A9A66AA04202002FB54417DC1C4DE55BD3775DBD24D31F6A1FCEAFC5F75DBD4EDAC4C2673836A00DBCB5602A0233DF4D043D513C64F985BB4AE6864BC31BEA63EB7BE5B3A27EDBEF01D2395A849BCD9FF83FE2F1557168F88C562970D1B366CB6B200DBCB5202605F983163C621E974FAD6F0E1D0A6A6A6012AD261AAA261E5A8E770C488114B9503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E854FE1F5EFD99B91416FC3A0000000049454E44AE426082, NULL); -INSERT INTO `act_ge_bytearray` VALUES ('302635', 1, 'source', NULL, 0x7B227265736F757263654964223A2263616E766173222C227374656E63696C736574223A7B226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C226964223A2263616E766173227D, NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('142518', 20, 'source', NULL, + 0x7B227265736F757263654964223A22313432353137222C2270726F70657274696573223A7B2270726F636573735F6964223A2270726F636573735F6C65617665222C226E616D65223A22E8AFB7E58187E6B581E7A88B222C22646F63756D656E746174696F6E223A22222C2270726F636573735F617574686F72223A22222C2270726F636573735F76657273696F6E223A22222C2270726F636573735F6E616D657370616365223A22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566222C22657865637574696F6E6C697374656E657273223A22222C226576656E746C697374656E657273223A22222C227369676E616C646566696E6974696F6E73223A22222C226D657373616765646566696E6974696F6E73223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D227D2C227374656E63696C223A7B226964223A2242504D4E4469616772616D227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D41343530344644322D303230342D343246352D393036312D344134323938324442343938222C2270726F70657274696573223A7B226F766572726964656964223A227374617274222C226E616D65223A227374617274222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A36302C2279223A3235382E373033373033393938313833387D2C2275707065724C656674223A7B2278223A33302C2279223A3232382E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834222C2270726F70657274696573223A7B226F766572726964656964223A227573657231222C226E616D65223A22E7BB8FE79086E5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A7B2261737369676E6D656E74223A7B2261737369676E6565223A223062373632356665646161303565383566323832343836653163396339316239222C2263616E64696461746547726F757073223A5B7B2276616C7565223A226533343665393633363834383463386661376632313763653535306130313836222C226E616D6556616C7565223A22E589AFE7BB8FE79086222C222424686173684B6579223A2231494C227D5D7D7D2C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3231392E39393939393939393939393939342C2279223A3238332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3132302C2279223A3230332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3131392E31393533313234393939393939372C2279223A3234332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A36302E363438343337352C2279223A3234332E373033373033393938313833387D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31342E3939393939393939393939393939367D2C7B2278223A34392E39393939393939393939393939372C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D7D2C7B227265736F757263654964223A227369642D37363845453443392D333233432D343744422D423438302D344230323746333136433835222C2270726F70657274696573223A7B226F766572726964656964223A227573657232222C226E616D65223A22E4BABAE4BA8BE5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A7B2261737369676E6D656E74223A7B2261737369676E6565223A223938623035316230333638316465363032383939336135643134616339336362227D7D2C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3631302E3039303838323633363434362C2279223A3238332E373033373033313034313134327D2C2275707065724C656674223A7B2278223A3531302E30393038383236333634343631372C2279223A3230332E37303337303331303431313432337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935227D2C7B227265736F757263654964223A227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3735352E353435343431333138323233312C2279223A3236332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3731352E353435343431333138323233312C2279223A3232332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3731352E313133303933303035303039392C2279223A3234342E31343432323136333535323135377D2C2275707065724C656674223A7B2278223A3631302E3537383039383232383233392C2279223A3234332E383437313639393931393532327D7D2C22646F636B657273223A5B7B2278223A34392E39393939393939393939393939352C2279223A33392E3939393939393939393939393938367D2C7B2278223A32302E352C2279223A32302E357D5D2C22746172676574223A7B227265736F757263654964223A227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831227D7D2C7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334227D2C7B227265736F757263654964223A227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3431302E353435343431333138323233312C2279223A3236332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3337302E353435343431333138323233312C2279223A3232332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731222C2270726F70657274696573223A7B226F766572726964656964223A2275736572222C226E616D65223A22E8B083E695B4222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332227D2C7B227265736F757263654964223A227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3434302E35343534343133313832323332352C2279223A3434382E373033373036363437323739327D2C2275707065724C656674223A7B2278223A3334302E3534353434313331383232332C2279223A3336382E373033373036363437323739327D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345222C2270726F70657274696573223A7B226F766572726964656964223A22656E64222C226E616D65223A22656E64222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3930382E353435343431333138323233322C2279223A3235372E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3838302E353435343431333138323233322C2279223A3232392E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3837392E3932343335323534333835352C2279223A3234342E313431393535363839373437337D2C2275707065724C656674223A7B2278223A3735352E363139363535303932353931322C2279223A3234332E37343938323733303636323033327D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E3530303030303030303030303030347D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D7D2C7B227265736F757263654964223A227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3733362E303435343431333138323233312C2279223A3430382E373033373036363437323739327D2C2275707065724C656674223A7B2278223A3434312E313234353432383830373233312C2279223A3236342E343831303438303538363234377D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E3530303030303030303030303030347D2C7B2278223A3733362E303435343431333138323233312C2279223A3430382E373033373036363437323739327D2C7B2278223A39392C2279223A34302E3030303030303030303030303033367D5D2C22746172676574223A7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D7D2C7B227265736F757263654964223A227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E9878DE696B0E794B3E8AFB7222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3334302E3534353434313331383232332C2279223A3430382E373033373036363437323739337D2C2275707065724C656674223A7B2278223A3136392E39393939393939393939393939372C2279223A3238342E363634363432313339373631367D7D2C22646F636B657273223A5B7B2278223A302E393939393939393939393939393939392C2279223A34302E30303030303030303030303030397D2C7B2278223A3136392E39393939393939393939393939372C2279223A3430382E373033373036363437323739337D2C7B2278223A34392E39393939393939393939393939372C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D34363841393635452D393339422D343733312D413232392D353137384436413042423834227D7D2C7B227265736F757263654964223A227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732227D2C7B227265736F757263654964223A227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3330342E39393939393939393939393939342C2279223A3236332E373033373033393938313833387D2C2275707065724C656674223A7B2278223A3236342E39393939393939393939393939342C2279223A3232332E373033373033393938313833387D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E58F96E6B688E8AFB7E58187222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3839342E353435343431333138323233322C2279223A3439342E373033373036363437323739327D2C2275707065724C656674223A7B2278223A3339302E35343534343133313832323331342C2279223A3235382E343330323636363433303536327D7D2C22646F636B657273223A5B7B2278223A35302E3030303030303030303030303131342C2279223A37397D2C7B2278223A3339302E35343534343133313832323331342C2279223A3439342E373033373036363437323739327D2C7B2278223A3839342E353435343431333138323233322C2279223A3439342E373033373036363437323739327D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D46313234303339432D394237422D344134382D384531332D413635353335384246443345227D7D2C7B227265736F757263654964223A227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3236342E363438343436383730303037352C2279223A3234342E313133343337353334343137367D2C2275707065724C656674223A7B2278223A3232302E36323838393638373939393234352C2279223A3234332E39323238373637313139357D7D2C22646F636B657273223A5B7B2278223A34392E3939393939393939393939393938362C2279223A33392E3939393939393939393939393938367D2C7B2278223A32302E352C2279223A32302E357D5D2C22746172676574223A7B227265736F757263654964223A227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733227D7D2C7B227265736F757263654964223A227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3339302E353435343431333138323233312C2279223A3232332E34303037363130373131373438387D2C2275707065724C656674223A7B2278223A3339302E353435343431333138323233312C2279223A3137322E363031353334383239363530357D7D2C22646F636B657273223A5B7B2278223A3230352E38303433363431303339333632382C2279223A3137312E303333383031323134313530327D2C7B2278223A32302C2279223A32307D5D2C22746172676574223A7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D7D2C7B227265736F757263654964223A227369642D30353145353938322D454646442D343337372D423137392D333730343841323346433232222C2270726F70657274696573223A7B226F766572726964656964223A226368696C64222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C2269737472616E73616374696F6E223A2266616C7365227D2C227374656E63696C223A7B226964223A2253756250726F63657373227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D39443541314632382D393042372D343644322D414637462D353446464637383631343146222C2270726F70657274696573223A7B226F766572726964656964223A22737374617274222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A34382E3531383531383436343031303338342C2279223A3130312E30353130343034353136333330337D2C2275707065724C656674223A7B2278223A31382E3531383531383436343031303338342C2279223A37312E30353130343034353136333330337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D32333041443633362D423038332D344132412D383446342D464445353430464443314333222C2270726F70657274696573223A7B226F766572726964656964223A22616C6C6D616E61676572222C226E616D65223A22E680BBE7BB8FE79086E5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A7B2261737369676E6D656E74223A7B2261737369676E6565223A226438313861633661383663663161363464323138346266303639396436376138227D7D2C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A6E756C6C7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3138392E39393939393939393939393939372C2279223A3132362E30353130343034353136333330337D2C2275707065724C656674223A7B2278223A38392E39393939393939393939393939372C2279223A34362E30353130343034353136333330337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C2273657175656E6365666C6F776F72646572223A22227D2C227374656E63696C223A7B226964223A224578636C757369766547617465776179227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635227D2C7B227265736F757263654964223A227369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3237352C2279223A3130362E30353130343034353136333330337D2C2275707065724C656674223A7B2278223A3233342E39393939393939393939393939372C2279223A36362E30353130343034353136333330337D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3334382C2279223A3130302E30353130343034353136333330347D2C2275707065724C656674223A7B2278223A3332302C2279223A37322E30353130343034353136333330347D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3236392C2279223A3136337D2C2275707065724C656674223A7B2278223A3234312C2279223A3133357D7D2C22646F636B657273223A5B5D7D5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3539362E333439383035343232313539342C2279223A3137322E31303230383039303332363630387D2C2275707065724C656674223A7B2278223A3138342E37343130373732313432383638362C2279223A312E34323130383534373135323032303034652D31347D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D32333041443633362D423038332D344132412D383446342D464445353430464443314333227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3237332E38323738383237343432393137342C2279223A38362E30353130343034353136333330347D2C2275707065724C656674223A7B2278223A3233342E323333353534303139323935382C2279223A38362E30353130343034353136333330347D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31357D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D32333041443633362D423038332D344132412D383446342D464445353430464443314333227D7D2C7B227265736F757263654964223A227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D37363845453443392D333233432D343744422D423438302D344230323746333136433835227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3530392E35363538353533373434373936372C2279223A3234342E3134363035383632333436327D2C2275707065724C656674223A7B2278223A3431302E3533343738323038383137322C2279223A3234332E383533313435353137393831367D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E357D2C7B2278223A34392E39393939393939393939393939352C2279223A33392E3939393939393939393939393938367D5D2C22746172676574223A7B227265736F757263654964223A227369642D37363845453443392D333233432D343744422D423438302D344230323746333136433835227D7D2C7B227265736F757263654964223A227369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3530342E32343839303939393834363832362C2279223A38362E34323734383336353430383030367D2C2275707065724C656674223A7B2278223A3435392E36333934393434333031303534362C2279223A38362E31343333343732343931383630327D7D2C22646F636B657273223A5B7B2278223A32302E3530303030303030303030303031342C2279223A32302E357D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341227D7D2C7B227265736F757263654964223A227369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3434302E30383436333334333233383532362C2279223A3133342E333339333232313439353833337D2C2275707065724C656674223A7B2278223A3433392E38353834353834393631383834362C2279223A3130362E303930353433323636373635397D7D2C22646F636B657273223A5B7B2278223A32302E3530303030303030303030303031342C2279223A32302E357D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244227D7D2C7B227265736F757263654964223A227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3339302E39383338303830363836333436332C2279223A3336372E38363338363638373439393039357D2C2275707065724C656674223A7B2278223A3339302E36363935373435363738313135342C2279223A3236342E34383130343334333933333531377D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E3530303030303030303030303030347D2C7B2278223A35302E3030303030303030303030303131342C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D42324633433135342D434432322D343230412D424538422D363836444534373531423731227D7D2C7B227265736F757263654964223A227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E4B88DE5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D66616C73657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3337302E363730303939393039323233372C2279223A3234342E31303931303034353732383030387D2C2275707065724C656674223A7B2278223A3330352E33373533343134303839393932352C2279223A3234332E37393833303735333930383735357D7D2C22646F636B657273223A5B7B2278223A32302E352C2279223A32302E357D2C7B2278223A32302C2279223A32307D5D2C22746172676574223A7B227265736F757263654964223A227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535227D7D2C7B227265736F757263654964223A227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5908CE6848F222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22247B666C61673D3D747275657D222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365222C2273686F776469616D6F6E646D61726B6572223A66616C73657D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D30353145353938322D454646442D343337372D423137392D333730343841323346433232227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3238342E323935353338353539393932382C2279223A3232342E34393134393033323031333735337D2C2275707065724C656674223A7B2278223A3139332E35383236343937343733333034362C2279223A3137322E313532383934353937323330387D7D2C22646F636B657273223A5B7B2278223A32302E31363137303636333435343032382C2279223A312E323837353339313237343833333730337D2C7B2278223A362E3530383031393933353239333633372C2279223A3137302E38303635303532363235393035357D5D2C22746172676574223A7B227265736F757263654964223A227369642D30353145353938322D454646442D343337372D423137392D333730343841323346433232227D7D2C7B227265736F757263654964223A227369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3431392E333839353234303834323934342C2279223A38362E34363037373339383738363638347D2C2275707065724C656674223A7B2278223A3337352E333639393734303934323739332C2279223A38362E32373032313331363533393932347D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A32302E3530303030303030303030303031342C2279223A32302E357D5D2C22746172676574223A7B227265736F757263654964223A227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641227D7D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A313230302C2279223A313035307D2C2275707065724C656674223A7B2278223A302C2279223A307D7D2C227374656E63696C736574223A7B2275726C223A227374656E63696C736574732F62706D6E322E302F62706D6E322E302E6A736F6E222C226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C227373657874656E73696F6E73223A5B5D7D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('142519', 14, 'source-extra', NULL, + 0x89504E470D0A1A0A0000000D49484452000003BF00000221080600000086FB0D1D000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000000467414D410000B18E7CFB5193000000017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA793000000097048597300000EC400000EC401952B0E1B000020004944415478DAECDD097854D5F9C7F17726FB4A080989088208B20B620444145454A854AD08844544C5B58A50A46E55B0EE555BFBB7D52A5A5141826241C50A8A821659944D0908B21804214080908410B2FECF7B3213424820099964327C3FCF739FC9EC933377EEBDBF7B368700A7A0952B575E565454342E3737B77B767676A3C2C24207A50200288FC3E190D0D0D08C9090901F9C4EE7DF3B77EE3C935201807AB83DA708702AF9F2CB2F3B040505CD34C1F7EC264D9A38A3A2A2A4418306620E66281C0040B90A0B0B25333353D2D3D365E7CE9D66175294626E4EECD9B3E7B7940E00107E01AFF3BFFFFDEFB70505051F9C79E69901CD9A35B367F20100A8AA6DDBB6C9962D5B0A222222EE3CEFBCF326532200503FF85104385582AFB978AF73E7CE41717171045F0040B5698BA1989818A709C1FDEFBCF3CE6D93274F5E4DA90000E117A873F3E6CD6B6B2E3EEBD2A54BA81EB0000070B2020303253A3ADAB975EBD67EC3860DFB70EAD4A9BB291500F06E7474C4A9708032F9ACB3CE0A22F802006A527878B898FD4BB0F10EA50100845FA04E7DF6D9675D9C4EE739CD9A35F3A7340000354DC790F0F3F36BF5F9E79FF7A0340080F00BD41987C331F0F4D34F2FA48F2F00C0539A366D1AEC743A8750120040F805EA8C9F9F5FBFE8E8E8284A0200E029515151FE26FCF6A7240080F00BD49982828273E8EB0B00F0A4888808C9CFCF6F4D490000E117A84B814E27AB3900C0830753C5FB1976360040F8050000000080F00B0000000000E1170000000000C22F0000000000845F0000000000E1170000000000C22F0000000000845F000000000008BF0000000000107E010000000020FC020000000040F8050000000080F00B0000000020FC020000000040F8050000000080F00B0000000000E1170000000000C22F0000000000845F000000000008BF0000000000107E0100000000845F000000000008BF0000000000107E010000000020FC020000000040F8050000000080F00B0000000000E1170000000000C22F0000000080F00B0000000000E1170000000000C22F0000000000845F000000000008BF0000000000107E0100000000A80C7F8A00404D397CF8B07CB7E53BC94ECB16E761CEADD5967CFF7C713472C8392DCE91D3224EA34000000008BF003C65EFBEBDB2227985EC8DD92B07CE3A2087430E5328B52430275022D32365F5CAD5B2AFCD3EE910DF814201000020FC02A8695AE3BB3A79B56C3D73AB6487675320B52C373857D2E2D3242B324B6483485C789CC484C75030000000A5D02E11C0494BD99A227B62F6107CEB584E688EEC6BBC4F92372553180000006550F30BE0A4EDDABD4BD25BA69FF07121BB43242C254CFC33FCA5C8AF4872E27224F3EC4C29F42FA4106B48465486C4FE144B410000009441CD2F8093969B937BC23EBE213B43A4C10F0D24E04080388A1CE2CC774AE8AFA1D2E8BB46E22870508835F55D04E78A338F4D3B000000E117409D08DF126E436F59FE59FE12921A420101000080F00BA09E6F68729DE29F5D712F8B808C000A09000000845F00F5DB099B35D3E517000000845F000000000008BF0000000000107E01D4AD82A00229721455787F6120ED9E01000040F805E0035B9A43A71D2AF72E3BDF6FE31CCA08000000845F00F5DF810E07A420A4E098DB33DA66485E833C0A08000000845F00BEEB8423410300000035C09F2200E06901990112B93E52FC0EF91D735FE44F91E2CC734A668B4C4EC701000080F00BA0FE711439246C6B98846F09AFB886B750247C73B804EF0A9603ED0E486E542E0507000000C22F80FA21E0408034D8D0C05E566A6394E52FD1CBA325FB8C6CC96895412D3000000008BF00BC3FF8C62C8FB1B5BA55E1AE29F6CFF6977D5DF65190000000A831D4AD00A871B68973E1493E1F3849D9D9D9140200002841CD2F801A971B9D2B3B2FDF4941A0CE7CFFFDF7F2CC33CFC8030F3C209D3B77A64000000035BF0000DFB27CF972F9BFFFFB3FE9DFBFBFFCF39FFF9475EBD651280000809A5F0080EFF8EAABAF64DAB4693266CC185BE3DBBE7D7B79E18517E4E1871F96962D5B7AF4BDD7AF5F2FFEFEFE76294F7A7ABAA4A6A64ABF7EFDCABDFF89279E90112346488B162D243F3FBFC2D7010000845F00C0296CD1A24536F86A536777D04D484890912347DA26D07FFEF39F253E3EDE63EFBF74E9521B70BB74E952729BBE5F70707049385EB162C551E177E1C285F6322B2B4BC2C3C3ED750DC89B376F96DB6FBFDD7E7E000040F80500C0FAF0C30F65EEDCB947055FB7DEBD7B8B9F9F9F3CF5D453F2C8238F486C6CACC73E8706DF3E7DFA9404DAB4B43449494991EDDBB74BD3A64D252C2CECA8C7BB1F7BE79D77CA2BAFBC229B366DB24DB5274F9E2C39393925CF030000845FC0EBA4E6EE93CFD3BF936F337E941FB3B7CA9EBC74C92ECC91206780C4044449FBD0E6D235BC8D0C88EE29F181D11418709266CD9A25F3E7CF978913275658B3DBAB572FC9CBCB93C71F7FDCE301D85D9B5B9ABB29B39B06DB3973E6484C4C8CBD7EE18517DAE769D8BDEAAAABECDF5A53FCEBAFBFDAFF8B26D00000107E01AFF1F9FEE53275F767F2EBE13DD23DB29D5CD5E80219D774B00DB8A1CE601B80F7E765CA4F87B6C9E28C6419B1FE717BDFA0D84BE49A46BD2840A01A66CE9C295F7FFDB54C9A34E98481F6924B2E916DDBB6D900FCE4934F4A444484473E93D6FE6A187707DBD5AB57CBB5D75E6B9B33BB6953E8EBAFBF5E9292926C736777EDAE865C0DC09F7CF289ADFD8D8A8AF268F9EDDBB7CF8E8CAD8B968D5ED760AE9F4FCBA759B366D2B1634739F7DC733DDA641C0000C22F500F68D87D74EB1BB6C6F7BEA689727183CEE2E7F03BE6711A80438382E5F4A058B924AAAB3C7CC648F9FAC0F7F2E2AFEF49D2EEF9F24CCB3BA4791007974065BDF6DA6BB69970556A72B5FFAF863B0DBF1A98DDFD716B8ABBEFAEF6ED7DFAE9A7ED6D6FBDF596DC7DF7DDE53E5E3F8B8662773F6177C0D4D7F164F0D5A0ABC15B6B97BB76ED2ADDBA7593C18307DBF70C0D0DB59F2B33335376ECD8214B962CB127195AB76E6D1FE3E981C3000020FC025E68CEBEC5F2D42FEFC8CDF157C94D71FDCB0DBDC7A34159977776CF93A13F3E26F7371B4E2D3050C9E0BB65CB161B7CAB5A837BDB6DB7D9E76B1F60ED23AC61AFA6681F5FADBD2D5DCB6B77B6C769B65CBA9FB09B06664F282828B0A177F1E2C572F5D557CBD8B163252020E098C7E949015DF4A4828E9A7DEBADB7CA82050BE4B9E79E93EEDDBB4B6262628D9F38000080F00B78A905E92BE5F9ED49F272AB3F4897F0D627F55A3734BE5212C2DBCA9D9B5E90C385793238F6120A182887F6DBD5397CB579AE4E5F54DDA6CB1A805F7AE92579F1C51765C28409E506C0EAD2BEBD5A233D65CA14DBF4594780D69AD4F2E8FD5AFBAABEF8E20B3B389706650D98354DCB4CFFDF56AD5AD9105B95D0AF0386F5EDDBD7F69D9E3D7BB6AD351F3F7EBC47FB4E030050D39C140150755AE3FBD82F53645A9B474E3AF8BAB50B6D6E5FEFE59DB3E4C3BD8B2864A09CE0ABE1EDF0E1C3D5AAF12DEB8E3BEEB0A15783A0BE764DD1A0AB4D9E478D1A2503060CB0AF5F7AB0ABD221596DDDBA55DAB66D2B43860CB101586B81753A249DF7D71D8C6B22F86A60D5E6CDDAF4BBBAB5DD5ADBABB5BE1A84B5E67CCF9E3DAC980000C22FE0ABB48FAF36757EB1E53DB6FF6E4DD2D77BA5D5787976DB34D992B383C2064A05CA175E78C136DBD59ADA9A6872ABC1D7DDEC57A717D2D7AE09DAE7576B48DDB47677F9F2E576202BBDCF1D7C1F7BEC315BCB1B141464FBFAEAC0525A9BAA35C53ADAB3F613D6FFF964E9FFA5270DAEB8E20A1BC66B82865F1D955A3F5F45B5DA0000781B9A3D0355F450CA64DBC7B7A66A7CCBD21AE03B9B5C2B0FFFFC9A4C6F378902C7292F3B3BDB0E50A50151FB9E6A58D580A873E39675FBEDB71FD37FB6A2C76AE08D8E8E967BEEB9479E79E6193BBAB2BEBE36F1ADD60ED5045977B82D4D0791D2D19C6FB8E10679F3CD374BC2EF79E79D6743A44E83A4B5B2A56978D6E7FDED6F7F3BE9F2D33EBEDAD4B9A6826FE900AC7D9CF5F5B5961B00006FE74711C0978D1C3972524D8E4CAAD3197D99BE429E6A719BF83B3CF7F3E91CD64ADEDE3D5742FD82A56DE8195E5FCE3AF0D09E26347FF4168D7736F6991179DDC157A7DCD166CA818181F676ADF9D5DB3232326CB82D2C2CB4B7AF5DBB567EFBDBDF8AD379A461D3F3CF3F7F54F35C7DDE75D75D279D3A752A09AD3ACFAE4E2FB471E3463BAD4FE9E757D639E79C639B2F974743F6E8D1A34BA63FD2F7D4C7EAFBE86D1AD84B2FEEEFCFFDFF56978EEAFCDE7BEFC99831636AB45FB39B86EA37DE78C396A5A7A765AA0FDBC177DE79E731B64000E0BD68F60C5481CEE3ABD3190539033CFE5E0F341B6EA740AA0DB366CDB2CD326BAAD9274E4D35BD1E6960D5BEBDCD9B372FB746D63D28944ED5E3A64D705F7EF9E592EB8B162D929F7EFAA9E4BAD6CC6A70BEF4D24B8F7A2D0D863AF2B3865F13607CA64CB556569B27D7E488D6A569590E1C3850A64D9BC60F0000E0F568F60C5492CEE3BBF570AA9D9AA836F48CEC248FA6FCDBF631AEE9BEC56569CD903B0068EDD5E5975F2E6DDAB4F19AA94CF6A6EC95C0B04089882D1EE068C5FB2BA4F979CD25A665CC318FCDD89521E93BD2E58C738FAE312FCC2F94ECF46C098F09AFD27B17E416885F60F9B5FC8BDF5A2CDD8776AFF07EF7635AF66829F16DE2E5D735BFCAE99D4EB7B7EFDBB64FA29B45FBD46FC4BD1E69D0D240AA4D77ABBB1E69F0D5019534E00E1A34A8C2A6C8DA6459477DD6DA536D826BCB7CF162B9E69A6BE4B4D34EB35306951ECC4A3FCB5D77DD556E2DA87E6E0DC08F3FFEB87DEE95575EE935651A1212629B4957A54C75902B1D304BFB357BD225975C623FA74EEFE49EA71800006F44B367F8B49A6CF63C6BEFD712E1172A97459D576B9F7F67EE5EF935374DBA869FEDD1F7F9E0830F8A036261A1ECDCB9D3D696CD9D3B57525252EC4177A3468D8EDB0FD2D3CD9E43A342E5F5E1AF4BE7DF7616FF407F59F8CA42E93EBCFCA96016BDB1481C0E87C49D1D27DF257D678370DACF69F2DFA7FE2B7987F34A42F1C17D0725E5DB14D9BB75AFECFC71A7FCFCEDCFB274EA527BDFBACFD649E6EE4CF965D52FF2E3FC1FE5AC9E67D9DBD37F4D97E0C823A163F7C6DD927B28571A366D58725BD9C72C7B779974BEBAF8734FB9698A240C4A10A79F535E1BF29A741FD6DD7ED69A5657CD9EDDEB9186CD5F7EF9C5AE475F7EF9A5FCFAEBAF366C9E683D72DBB163873CFBECB3B629F2E0C1838FDB045943A0F69F3D74E890ECDDBB578A8A8AECEDAB57AF9675EBD6D941A6DCB769D3639D4AE878D308858585D9FBFFFDEF7FDBA6C975DD7CDC5DA6FA3FBACB544784D6323A51997EF3CD37B6D9748F1E3D3CFA19F5FBD1ED466666A69C7DF6D972AAA2D93300783F6A7E814AFA36E347B9AAD105B5FA9EDD22DAC9F43D5FC8E8F801B5FEFFEA7432CB962DB38B860077AD93F687ACEE8040D5A12155C36FB7A1DD2420284036FE6FA35CF5F0557260E7011B3283C2824A1EABB5B45AF37BD9BD97C9FA05EB8B83A6BFD3D6B286350A930B6FBAF048C8890EB30139796EB274B9A68B048707DB00DCFEF2F6F2DDBEEFA4E505C5A167DDE7EB4A9EB362E60A896F1B2F0E677160CDDC93693F83FB319B166DB2AFABEFAF35CD1AB60BF30A256D4B9AFD3FA29A4495D4126B6076BF8E2FD340F4D5575FD94583AA06CB8484840AD7239DF647FBF85E7DF5D5951EA0496B797FF8E10769D7AE9D242727DBDBB41678FFFEFD257D817544650DB6DAD7F74434243FF4D043F2E8A38FDACFA8359BDE242B2BABA44CF5FFD2705B5E996A595C7041ED6CB3F47BFDECB3CF6A7C502D000008BF401DF8317BABDCD72CB156DFF3EC9066E67D53EAFC7FD75A277710D683EDF6EDDBDB26A17AE98941744AD3A6C26BE7AD953697B4B181B6A8B0487E4DFE55367EBD519A7569265D071EE9EFB974DA52B9F28F57DAE6CD8BDF5C2CCD3A3713FF207FF9E4F14FA4C3951D6C20D530ECD6E0B406E217E0671FA3A1B420AFC006D91DC93B6C4D6D79F475DCB45659436C930E4DECF5B8D671D2A84523FBB706DFCC5D99367C854485D8DB97BEB3D47E367D4FB7C9C326CBF09787DB80EFEBB43FAE3BB4E91CBD3A48D2C5175F5CB21EB983EFD0A143AB1C3875B4E1BFFEF5AFB6E9B20E92654F8694EA27ABC15B1F53D91337B1B1B1B609F49FFFFC67FB9AC7AB2DAE4B7A92CA5DA61AEE3B77EE5C52A65A9E3A276F6D68D2A4891D5C0B0000C22FE003F6E4A54B6C40ED8E66DA3020420EEECD909933677AD5C1F6AA55ABECE20E099EAC5DD2B07A5AFBD36C8D6C695A935ABAFF6ECA772936B86A88DCF4CD2619F4C220C93F9C2F5FBFF6B50CFCCB401B9A678C9B216DFAB4B18159AF6B18D6C09B919A216929693694EAFBE86B9FDDBBB8F966E99A5FADD19DF7DC3C1BBAD5AE0DBB243C3ADC86E07DBFEC939C8C1CE93BAEAFBD4F6BA4835A06D960ADB5C1FA180DBE9BBFD92CD16714F7F5D5D7BA72C295351E7CB566D09BD699F2688DB0F6CDD5C5AEEB0D1BDA75AB3AC157E908CE3A4AF2CA952B8F1AE04A454646DAD7D44058153AD0D61FFFF8471BAA75D0A9B8B838AF2ED383070F1E55A6DAA45EFB4ED7463F5C3D99A1DF290000845FC0076417E648A8B3760780D2F78B48CE970F967CE0BD2705CCC1F5B7DF7E2B2DFAB5F0C8EB6B48AD88BB49AB6A717E0BB979CACDB2E1AB0D72FE90F3252B2DCB2EFD1FE85FF298A12F0D95590FCDB2E1579B1CFFF8C58FB649B23647D6005A999A5FED3FAC81556913EB3697B6B14177CB922DB2F797BD4707BC3D99F6F597BFB75CCE4F3CDFBE47A7AB8AA7D739907A40125F4A94C090C01A2F330D7FEE9313F5853651D690AA73C7569736B95DB06081ED835A7ADDD01A609DFEA83A7470291DFC4AFBDAD637DAD759478B764FE9E4495AB3AE35FB0000107E011FA041B4B603B0BE5F66477F19D8E41A8FBE8F7B509D13D19A24F7E0416E5A1BA6FD0DD324CD239F4D436AD69E2C1B4A5337A4DA5193D5C1BD07E5F48EA71FF5D8ED6BB6DBD0AACD8CB5FF6F5078906D32AD7FFB07FBDBA6D2DABFD7AD63FF8E92B5374B5AF56A6503ACD6CC96AEF9D57EC01A608F0ADCF98525B5C13BD7ED94D006A1F6B5F5EFC8F8C892C76918D6C1B734F0260C4E3826E436886FE091E0AB74D0A1BA1CF0AA3AB4E6579B2B6BD3FAEA3631D626CD5A7B5C3AF82ABDADEC7A5B591B366CB08339697FF7BAA8F9AD4C99EAEF5297B2FFB79E04D0FED0B54183AFB78C0E0F0000E1173849DAE4599B3E370FAABDA93CF6E7654A58A348B9FED2EBEBEC00BB74E0D54BEDFFA835491A06B47FA1F6D59C3F7FBEC7C26F6CCBE2699E34446AB3620D99DAFC58A73ADAB3F9C808D35A433CFBE1D9B66FF0B9D79D5BD20F57BD3DFA6D19F9FAC8639A4E977EAE8EECDCF692B63628BB9B43EFDFBE5F0EEE3F2851A71F69EEAECDB0DDAF53BAE6578372E99A5F1D304B97997F3C7EF363AD9DAEEAF44B27A273D99E4C0D6A6D84DFF2D623779F5F0DC1D569FAFCE1871F96F4F72D4DFBACBFF2CA2B72DF7DF755E9F5F4F3FCE52F7F915B6EB9457AF6EC5927DB9DCAFC36DD4BD932D526DBB515D8B5C9B3367D060080F00BF88076A1CDEDA057B5197E7F3AB4CDBC6F8B5AFF5FB506CD3D58901E546B8D8E1E4C6BDF5E3DB8D683ECDAE01EE04AFBE416362DB4CD95577EB0D2DEA7FD6D359CEA3CBAC3FE31CCD6108FF9EF187BA9E15547856E7D51EB0A5F5B43AED6E06E5EBCD986081D195A03F0E1ECC3B27BD36E1BB6B5E638A441C851CFD39AE7F26A7E752E621D3DFA8421614FA6ED1F5C12B0566C3D6A102D5F76A2F548FBD83EF2C823767E5F559500AC53FF7CF2C927929B9B7BE44445A9E6CF3AF5918E7EDCB163C74ABD9E36E77FE6996764C4881175167CCBDD69FBFBDB305F99DFA696A706F8DAE8F3ABE5AFFDAE010020FC023EA05B643B599C912CFD1AD6DEA8AFDF66FE68A73BAA6D1A7CDDD3D2E8F4295DBB76F5F8A8CE65E564E6D8519AC7CE1D2B2B3E582105F9C561DC3DBAF3EA0F57CB75CF5C676B4E6D58D9BC473E7BE133898C8B9433BB9D59612DEF8EB53B6CAD704E568E0DB9EEE0ACCEEC7E667140DD9D696B6D75A02A7D7C695AEBEC56BAE6B72C6D429D7B3057F20EE515071513E2B7FFB05D56CF5E2D17DD7A917D7FA503616D5BBDAD64102D5F0CBC55598F3440E908CB1A807500A7CA4E9DF3AF7FFDCB3EBEF4FBEA929E9E5EB24EBFF4D24BF2EAABAF9EF8044566A67D7F9D63D8DBA639D2E05BD932D5A0AF0375D5C648D5DA5C5DA79A020080F00BF880CBA3CE9737523F9182A202F173D4CE3CB79FEF5F2E6FB579A8D6FE47AD35D211717BF7EE6D2F6BAB86B7DCD014112CE3BF1C6FFF3EEB82B3E4F3BF7D2EDF7FF47D49903CADDD69F6EFDE77F6B697B167C54ABF3FF62B996A68CD276B6C13650DB6DACFD75D5B9B9B9D2B118D23242236A224C86A1F5FED1BEC6E7EAC4D98B546D686F08C1C3B976F74B3E8634F12E415D8F0AA531C1D539651A17664670DE5EE707CCDE3D794D4F2F6BAA5972C9DBAD4F651D6E9927CC9C9AE473A82B8CEB3FBF8E38FDB66CC1A428F67CE9C39B6E6B1749F570D7E3AF54F4A4A8AADFDB4272B3232E4F5D75F97D1A34757F85AEE1A5F1D39DA9B826F75CA5483F1F4E9D3252F2FCFA327AFF4C482866C3D69010000E117F001F181D1B6C9F3D707BE974BA2BA7AFCFD1667AC91D88006727A50ACC7DF4BC385060EAD21AAED1ADECAD0409BF8F7C44A3DCECD3DAA7265680D6FB7A1DDAAFCB97A0CEF61E707AE887E86D29FA374F3E68A6AA6EBB39A5C8FF475DC4DA035BCE97CB5E5CDD1AB35BB1A7E4BD7FA6A9FE7DB6EBBCD7E86FBEFBFDF8E22ADC1577DFDF5D7D2AF5F3F69DAB4E931AFA5415B836FEBD6AD2B5DE3ECCD651A1D1D2D6DDBB6952FBFFCD2CECBED293AC2768B162D6AA57935000027C34911009537A2F115F2FCF6245BFBEB69FA3E898D6B67D0A2DFFDEE7776901C6F0CBEDEEC78C1F75454D3EB91BB06586B15274F9E5CD20FBDB4BFFFFDEF72E8D0A192EBFADE43860CB1832F69F3E061C3861D350AB106E9679F7DF698D7D1DB35F8EA28D9B7DE7A6BB941BB3E96A99E34F8E8A38FCA1D08AC26E828CF3A2897BE0F0000845FC0875CDE30411AFA47C89BBB3EF5E8FBBCB37B9E0439026440F405143A4E691A80274E9C689B2F970DC01A8A5353538F1AE44AE7E42D3DD2B5D6986A4DAED682BAE99CC23A3856E900A7A34C3769D244EEB8E30EAF09BE3541FB50EB805D3367CEF4C8EBCF9E3DDB96715D4CAD050000E117F0B067CFBC43FE9DFA89ACCEDAE891D7D711A55FD9315B9E3CF3B65AEB5B0C78B3A8A82879F4D1476DBFDE175F7CD106606DEEFCC20B2F940C68E576EFBDF71EF37CADFDDDB7EFC808DBFAFCA953A7DADBDC0361694DB137D5F8D624AD95DDB469937CFA69CD9EB4D3E6CE3A8A36B5BE0080FA823EBF4015691FDC87CEB841C66E7949A6B579A446FBE4FE7A788FDCB9E905B9BFD9706919DC84C2065C748027ED03AC8157C3EAEF7FFF7B3B98536568AD6F458FD551A2B5C9F38409137C32F82AFDBFC68E1D2B93264DB2D7FBF7EF5F23C157C3B4965BE966E5000078336A7E816A1810DD53C6341928C3373C5E6335C05AE3ABAF3734F632B9A6512F0A192843FBBD8E1F3FDE86D5E79E7BCE36573E19494949B6F657039CAFF777D713001A7E972C59226FBFFD76B5CB4E9FA7E5366FDE3C5B6EDA2C1D0000C22FE0E3AE8BE92DF7354D94DB363E27AFA7CE39A941B0B48FEF2D3F3D6303F5EDA75D43E102C709C05A8BA9CD947524E8EA86B869D3A6C9BA75EBEC6B9D2A03BD6900D6FED35A13AC271134C09637885879F4715ADB3B6EDC385BE61AA409BE0080FA8666CFC049D01AE073C35ACB4329936556DAD7B6B9F2C50D3A57FAF93A9DD1DF7E7DDFFC109D32B5ED233475062A1980EFB9E71E79EDB5D76C087BF8E1876D18AEAC59B366C99A356BEC734FB526BB1A7C870F37DBA98B2FB62700B4165707AC4A4848B0D33FE9B450DAC45C036E6666A61D504C6B8B57AD5A6507CFFAC31FFE600710030080F00B9C82B4CFEF5B6D1E92B9FB97C91BA99FC8A35BDFB001F8A2C8CE72766853890D88925067B06417E6C8FEBC4CD99CB343966424CBE7FB97DB797CDDCD9C19DC0AA81A9DCB5703B0865FED0F5C999A480DBE5A83A9A33B9FCA7D5535C83EF0C003B6D9F7CA952BE5ABAFBE92EDDBB7DB01C434F86AD9E809051D01BB63C78E72F5D557338F2F0080F00BA058BF86DDED929ABBCF06E18FF62E9235DBB6485A5EBA1C2ECC932067809D26A95D680BE916D1CE06E69A1C2C0B385503F0942953E4F1C71FB773021F2FA0CD9F3F5F3EFBEC33F9F39FFF5CA59A625FA64DA1756AA8D2D343010040F8055029F181D1322AAEBF5D0078DEA851A36C935DED035C5100D69ACD8F3EFAC8D676D2571500805313035E0100EA3DADB91C3C78B09D0F78CB962D47DDB77CF972DBBF558371F3E6CD292C000008BF0000D45FBD7AF5B28339697F5E1DC9592D5BB64CDE78E30D5BE34B9F5500004E6D347B0600F88CDEBD7B4B585898FCF5AF7F95B8B838D9B56B971DA1B865CB96140E0000A7386A7E01003E45A7ED39F7DC736DF367BD6CDFBE3D8502000008BF0000DFA3B5BEA52F01000008BF00009F939F9F6F2F030202280C000040F80500F8A68C8C0C7B1919194961000000C22F00C03715161616EFE49CECE6000000E1170000000040F80500A07E4A4F4FB7975151511406000020FC02007C535E5E9EBD64C02B000040F8050078B5ACAC2C993061C231B7A7A5A5C9A041832435359542020000845F0040FDB57AF56A090F0F97B3CE3AABA409B3DB942953E4F1C71F97F8F8F80A9F4FCD2F000028CB9F220000789B175E7841DE7CF34D69DBB6AD3CF9E493929C9C6CC370AB56ADE4C61B6F94EDDBB7CBA64D9B64C08001E53E3F3333D35E46444450980000C0A2E61700E075AEBAEA2A19376E9C6DDAAC7FDF7FFFFDF2DC73CF499B366D6C20EED1A3877CF3CD37153EBFA0A0C05EFAF9F95198000080F00B00F03E5AA3ABFD7A1F7EF8E172FBF53EFFFCF39293932341414114160000A8349A3D0300BCCAA2458B6C13E7E0E060E9D8B163C9ED7ADB575F7D25975D7659C914461F7EF8A124252555F85A63C68C39EAFAC08103E5FAEBAFA7900100380551F30B00F02AA3468DB2E1F6C1071F94F5EBD797DC1E131323C3870F973E7DFA88BFBFBF1C3E7C585AB46851A5D73EDE20590000C0B751F30B00F03A5ACBFBCA2BAFC8C2850B6D13686DE69C9292629B41CF983143F2F3F3E5CA2BAF94CE9D3BDB41ADDC035C1D8F3693EEDEBD3B850B0000E11700AA27242444427342253B389BC2A863813981E20870D4FBFF43C3AD9B065FBDAE41586B7F75B467BDD481AF544242822C58B040020303253737B7C2D7D426D44CF642C5FD00002000494441547D040000E11700AA2D363656CECE3C5B5607AFA630EA58C3030D25BA6174BDFF3FFAF5EB672FB3B2B264C4881147DDA761F89E7BEEB135BFDA7FF7820B2EB0E1B7A8A8E8B8AF79E9A597B282000040F80580EA6BDEBCB9ECFA76979C1579966C0EDA4C81D491E09C6089DB1D276D12DAF8CCFFD4B76FDF63FFCFE060DB24DA5D3BAC35C0DA47383D3DBDC2D7D15A61774D310000383531E0158093A67D293B74E8200D363690F3D3CE9726B94DCCC685CD4B6D093F1C2E6DF6B491B69BDA4AA7F69D243434D47702BD09BAE5D101AFDCF7695366EDFBAB2A9AD757E705F6A5720100005547CD2F801A111D1D2DDDBA7593CD9B374BD1A6226978A82185524BB456B361C38672D67967F944C09B33678E9DD2282C2CACE4B6A64D9BDAC05B9AD60AEBEDEAE28B2FB6CFA948D7AE5D5951000020FC0240CDD01AE0F6EDDB53103829AD5AB5B2CD98DDC1569B37EB28CFA507C15ABD7AB5EDF73B6BD62C7BBD4D9B3636F8676767977B7280F00B000008BF0000AFA2CD9935F8CE9E3D5BAEBDF65A7B5D9B2D97AEF9D581B0F436376DEE7CD14517C9BC79F3C4E9744A616161C97D5DBA74619467000040F8050078A73E7DFAD8CBA4A42459BB76ADFD7BD3A64DB6B65783AF4E7754DA39E79C63C36F593D7BF6A430010000E11700E09DB4E9B3D2797CEFBBEF3EFBF79429538E09BD6E3AE895F63DDFB76F5FC96D5A6BDCA953270A130000301C2B00C0BB68FFDEF8F8F82A3F4F9B3E970DBA5A1BCC28CF00004051F30B00F02A393939B6C676FBF6EDB6EFEFFAF5EB65E1C285F6BEEFBFFFDE36876ED1A245B9CF2D3BEAB3F60306000020FC0200BC7707E51AE0EAFAEBAFB74DA0F5BAD60A87878757F89CD6AD5B1F75DD3DFF2F000000E11700E055742467EDDBABB4D65769E02DDBD757AF77ECD8F1A8DB7454E7264D9AC88E1D3B24363696519E010000E11700E09DB496372D2DED9840AC8B9BCEF9ABC158C3AF0E70A5CDA175D9B66D5BC9730F1C382063C68C9166CD9AD9C79D7BEEB9D5EA4B0C000008BF0000D4B85EBD7AD9E54434E83EF7DC73360477EDDA55BA75EB2683070FB6E15907B9D2BEC3999999B61678C992253273E64CDB2C5A1FD3B2654B0A1A0000C22F0000754B6B76DD7D7ECB2A2828B073FF2E5EBC58AEBEFA6A193B766CB9CD9B75D02C5DB4F9B3F6FDBDF5D65B65C18205363077EFDE5D121313EDFD000080F00B0040AD9B306182FCFEF7BF3F6A44671DE86AD0A041D2BF7F7F5BA3DBAA552B1B62AB328D914E85D4B76F5F5BAB3C7BF66C993469928C1F3FDE86630000E0FB98E71700E055860F1F7ED475AD05BEE79E7BE40F7FF8830DC1DABC79E4C891D59EBF576B7BB5D65783F0534F3D257BF6ECA1D0010020FC020050BBB4CF6E69FFF8C73FE491471E9155AB56C915575C2103060CA891F7D1F07BD55557C90B2FBC606B93010000E11700803A919E9E6E43EA9A356B6C53E79A0ABEA50370972E5D6C1F62000040F80500A0D6E894460F3EF8A06CDAB449E6CC9923EBD6AD93FFFCE73F121717270B172E2C59B66FDF5E23EF77EDB5D7CAB265CB64EBD6AD143E00003E8C01AF00005E45E7E9EDDDBBB7DC79E79D929C9C2CE79F7FBE0DBE3A5D51695A2BDCB469D3937E3FED033C70E04099366D9A3CF4D0437C010000107E0100A81D23468C903BEEB843A64E9D6A03E937DF7C23CD9A35F3D8FB5D72C925F2DE7BEFD901B5E2E3E3F9020000F041347B0600789DF0F0707BA941546B8075A4E79494148FBD9F4E8394909020CB972FA7F0010020FC020050BBB4D9F3A5975E2A93274F96575F7DD54E7BE429DDBB77971F7FFC9142070080F00B0040EDD041AF940E42D5BC79733BFDD1C48913ED00589ED2A44913D9B66D1B850F0000E1170000CFEBD1A34749B3671DD42A3232D2FEAD0353E97D9EAAFD8D888890CCCC4CBE0000007C14035E0100BC8A865CB79C9C1C090D0D2DB9EEC9C1A8F47DF5FD0000806FA2E61700E0D541383B3BBB56DE4B836FE9E00D000008BF0000D40AEDEB9B9191512BEFA54D9EB5E933000020FC020050AB74B02B1DF4AA36ECD8B1C3A37309030000C22F0000E5EAD8B163ADCDBDBB6CD93269D7AE1D850E0000E1170080DAD5B56B5759B972A5E4E5E579F47D0A0A0A6CC84E4848A0D0010020FC020050BBA2A3A3A56DDBB6F2E5975F7AF47D162C58202D5AB4F0E868D2000080F00B004085121313E5A38F3EF2D8A8CF3ACAF3071F7C60DF070000107E0100A8133A0855CF9E3D65E6CC991E79FDD9B3674BF7EEDDA565CB9614360000845F0000EA8ED6CA6EDAB4493EFDF4D31A7D5D6DEEBC7AF56A6A7D010020FC020050F7FCFCFC64ECD8B136FCD65400D6E0ABAF357EFC78090E0EA690010020FC020050F774F0AB499326C992254BE4EDB7DFB67D75AB439F97949424F3E6CD93091326486C6C2C850B0000E1170000EF0AC013274EB435C15A63AB0156A729AA0C7D9CD6F68E1B37CE06600DD2045F00004E1DFE140100A03ED1E03B7CF870B9F8E28B65DAB469B6165707ACD2397A9B366D2A919191121A1A6A036E6666A6A4A6A6DADAE255AB56D9C1B3FEF0873F48EBD6AD2948000008BF804F395C585818E474D2C801F0351A641F78E001D9B76F9FAC5CB952BEFAEA2BD9BE7DBBA4A7A7DBE0ABFD78232222A4499326D2B16347B9FAEAAB99C7171E61F6337A5140490000E117A84BDFEDDFBFBF4DA3468D68DB08F8286D0ADDB76F5FBB0075213333B3C0E170FC4049008077A33A0CBE6EE1EEDDBBB7530C00004F494B4BDB5E5454F405250100845FA0CE9883910F5253534F3397F9940600C013B66FDFEE672E3EA0240080F00BD4992BAEB862754141C1EA8D1B372EA7340000356DCB962D9BF3F2F2365C7EF9E54B290D0020FC0275AAB0B070DC2FBFFCD272FFFEFD347F0600D4984CE3E79F7F6E60F63363290D00F07E7E14017CDDD4A953D36EBCF1C6D5A9A9A9BF8D8A8ACA0A090989A4540000271B7C972F5F9E51545474EB15575CB188120100C22FE015DE7EFBED2D23478E4CDEB163C7D0DCDCDCEF1A356AD4D4E170D0F2010050659B366D5AB176EDDA30F3E7AD7DFBF69D43890000E117F0BA003C62C4888F3233332FDBBA756BF8C18307576CD9B2C53179F2E406E63687CE071A1A1A2ACC098C53D99E3D7BE4D34F3F95D8D858090B0BA34000299EC7373D3D7DBBD977FC989C9C9CB76FDFBE1DE6B661D4F80240FDE2A008702AFAECB3CFBA381C8E81B366CD1A630E624A9A4107040448545494346EDCB8E45243B1DE0E9C0A56AE5C29AB56AD9273CF3D57BA76ED4A8100C574C680D5665968960F18DC0A0008BF40BD337CF8F01E0505054B4EF0B002B3AC3561799DB95C6696F54141414BA74C99924E09C2D72426264E321713CDF2585252D2244A040000F80A9A3DE394B666CD9AED1D3B767CCB04DBEBCDD58A06C2D276D07166E968967E6619919F9FFF8079DE1D1D3A74E8B576EDDA1994247C8559AFFB980B5DBE4A4E4E5E48890000005F41E7469CF2929292529C4EE705E6CF942A3E35DE84E66B294100000080F00BD40BD3A64DD339802FA96A0036C199AE0300000000E117A83FB406D8CFCFEFA2CA06E0A2A2A27C4A0D00000020FC02F58ED600BB02F0D6133D76C68C190C010D000000107E81FA1B80A578C09FE306E0C4C4C48F870C19D291120300000008BF40BDE46A02DDCBE1706C29E7EE22B364996580B9FF3B9D1A66D0A041E1941A00000040F805EA1DAD012E2A2ABACCFCF96B9960EC34C1B89DF973AE5982CD32D15CDF6842F07D7DFAF4F1A7E400000000C22F50AF680DB0B9E865966D6583B1B9AFBF148F10BDC82CF166792E3E3E7E8909C17D2839000000C0BBF85104C0F1252727A777ECD87196F9738409BC6165EE4B31CB9B9D3A75D2DAE1AE66696B96511D3A74E8626EDB6CEEDB4109A23E31EB7A1F29EEF3FE95597F175222000080F00B9C6201B873E7CED3D7AC599351C1FD2B131212DECCCFCFD766CFE7381C8E73CCE548132402CCEDAB8D1C4A11845F000000C22FE0F52A0ABE6E1A704D58F8BC5DBB766F9AF0DBCA2C3A12741F1388479B40516442F04AF318E60606E117000080F00BD47FEBD6ADCB5ABB76ED0C1322BE32577B98E50CB35C6142703F73DB466D2A4D2981F00B000040F8057C8286DC98989857C3C3C37F365713C4D51FD8848B1E9D3A755A61EE4FA39440F805000020FC02F55E4A4A4AA10910AB4DD87D478A4757D7BEC0EDCD32DADC16DEAE5DBB65EBD6ADCBA5A440F805000020FC02F59E0911D9DA1FB873E7CEEF1415159DE10AC0173B9DCE61266C1CD0804C2981F00B000040F8057C820E9A6502C5FBEDDBB75FE270387A9A9B5A9AE55A1338AE37B76D5CBB76ED164A09845F000000C22FE01334E4C6C4C4BC121E1EBEB3A8A8A89709C2679845A7464AE8D4A9D32AFA0383F00B000040F8057C82AB3FF0F2F3CF3FFFD5828202BD494786D641B1746AA48076EDDA2DA73F3008BF000000845FC027B8E607FEA253A74EEF9BABF1523C28561FFA0383F00B000040F8057C8E3675D6FEC0A5E6076E25DED31F38DE15887EE29B22FC020000107E01D44408B6F303474444EC97E2F9815B78417FE0A7CD72403F8B59B69B85E6D8845F000000C22F8093E3EA0FBC34212161727E7E7E94B9A98BD45D7FE08EAEF77FD62CEBCD72B1144FD5442D30E117000080F00BE0E4B9FA037F6202C93BE6AABF59BA99E5D25AEE0FFC86591E7705DE40B32C37CB2F6619609670B3ECE09B22FC020000107E019C341342D2CDF2E939E79CF371515191D6006B4D6C6DF407D666D73A14F57FCD926D962CB3F435CB3E5708769AE50A291EA42B996F8AF00B0000E0AD9C1401507FBCFBEEBBAB9392922E71381CBF33575334AB389DCECF1313135F193E7C78530FBCE5ED66F9872B043F679618B3CC318BBE978E4E9D2FC50373C5F0ED000000C09B51F30BD443C9C9C9EB1312125ECDCFCF2F282A2AEA62C2702F73795BC78E1D836AB03FF008B3AC90E2BEBD6F99E55E57C8EDE90ABD7F334BB4596E31CBFD6629E49BA9FFA8F9050000BE8A9A5FA09E9A32654A4E5252D224A7D3D9DA5C9D6A9660B34CF4F3F35B93989838EA245F5EFBF25E6596F9AE10AC035DA54A715367BDEF3257007ED82C8FB9FE76D35AE278D7DF7AE9CFB705000080BA46CD2F50CF252727679B6596AB3FB08ECCACFD6F4FB63FF03FCDF292144F6B146996196619EC0ABE774A7173E8AE523C12F49BAEE7685FE00CB36C72DDDECB157E2F768566D403D4FC0200005FE5A0084E0D0B162C689A979F77BFF8C9404781E3344AA4D6EC32CBAC82828217FAF5EBB7A936DE70C89021031C0E8706D716AE9B669A65425252524A155E4683EBA2726ED7F97EE7994543D1FFCC32488A6B84DD125C0159F5308BCE499C23C535D3A80712131327998B8966794C5B1650223EBE5F28C89B608E04AE77143A9A5022B5A3488A763BC4F19FDADC2F000008BFA78CCFBFFCFCCA7CC97F7F7FE3FD21071A1EF03F1C729842A92581398187635263BE6DB8B7614B1348EFE8DBB7EF9CDA78DF41830685FBFBFB3F5C545474B72B8CE698F77F313F3FFFC9F7DF7F3FAB06DEE20EB3E8FCC3CF94B95D6B819F74055F0DBDDA6C5A07CA5A6696E6667984B582F08BBA377FFEFCBEF98EFC99FBE2F60599FD4230FB855ADC2F1C0E2C88D915F343D49EA838A7C3797B6DED170000347BF6797A663FD791BB785BAB6D61E98DD29D050105144A2D2AF02FF0CF8CCA6C7E30F2E08F0DF634183A7CF8F08FA74E9DBACFD3EFAB035E2527277FD1B973E7774C00D641A9B446B697D3E91CDCA143879FD7AE5DFB53355E5643F4A552DC145A07BBD2E6CFA5FBFA8E35CB41296EF6ACFD7CB5B9F548B37C60968FCCB2CA1588E1C568F67C6AEC17F21C798B7E69FD4B84D92FF8B35FA8F5FD8233B341E669590DB276344C6B789DD92F7C541BFB050000035EF9BCF4D0F4A9FB1BEF0FCE0ECFA630EA9029FFEE99D1993F98F0F9786DBEEFB469D3B6272525DDE470382E322178B5B9A995F9FBE3C4C4C44F870C19D2B18A2FA735C617BA42EC936582ACD6020F94E2699174EAA314291E806BA1EB3E1D346B346B0250F7B282B25EDE17B72F8CFD42DD3A1476A8CDFE98FDBFD4F67E010008BFF059C187827B1C883A70E207168A04A6074AE0BE4071E6B35A78C2AED37669F0EC5317EF3D7DFAF4453366CC38D7BCFF0D525C33DBCFFCBDCA04E0C9559C1FF859B35C2EC573FDBA69FFE070D77DFA779AEBF616AEBFB59FF04C57580E664D00EA56406EC0A595D92F388A1C47F60BB9EC173C212D2EAD435DED1700E054C41424BEFE05E7F9079DA82F57D8D630094F092F39B829F22B92CCB332E560F38314600DCA0DC93DBBAE3F8309C153FBF4E99374DA69A73D5E5454749F39E81A5D505030223131F1D9E0E0E06774FAA413BC44966B71D33EBE3A17B03685BED22CE3CCF227B3682DB34E8FA4A3423FE80ABEFF602DF02E43860C79C0AC034F5770F744B35E4C2C731BFD807D805F9E5F5855F70B7AAAFC60B38392D93A538A1C4514624DED1782737534FD484A02006A07A7724F71C1A9C112F953E45167F51D050E7B5BC8CE100AC8072D5CB830DF84E0074DE86D67824F92B8E607CEC9C9593574E8D07E557CB99B5CA156FB00BBE7FBED6096D9AED7D5652EA5EEA53B00A77375551E6FD61746A63D45F70BDA3A480371D8CF6114100080F08BFA293435B4C2FB4276107E7DD9FBEFBFBFC984E0A14545451748F13CBC6DCDDF9F9A00FCF9B061C3BA54F1E56E35CBF566D1F0AC4DABB59F6F8A59DEA0A4BD97F9FEF5C4445A651E6BD68DF4A0A0A09994DA29BE5FE0A4280080F08BFACAEF60C5037EFB1FA255FCA960C68C194B939292CE77F5074E3521A76F6161E1778989896F0E1A3428BE922FA301EA5F52DC245A9BD13EECBA6D3C25ECDDCCF73DBB920F5D588966F1F0F5FD4236FB050000E117F5940E680228ED0F5C5050D05A8E345F1EE5E7E7F7F3D0A1439FD679832BF9328BA4B8DFEF0CD7756DF61C4EE97A75F89D51C987528BCF7E010000C22F00DFF0FEFBEF67E9804626F4B676F70736E1E801735D47861E5085975AEEBAFC9D1C3D4016BC4C6868A89EB0483DC1C3B242424216515A000080F08B7AEB78A37632A2E7A94BE7072ED31FD83D3FF0826AF40786177335653ED1A06433CDE3D2292DF60BEC170000845FD45B79E17915DE57105640019DE2CAF607364B9FC2C2C255DA1FB88AF303C3BBBD7582FB3FA188D82FB05F0000107E51AF65B5CE92FCD0FC636ED7DB32CFCCA4806095E90FAC3585A3CCF58D26043F376AD4A8284AA87E4B4D4D5DA4A33957B499080E0E9E4329B15F280C2C948CB33328200000E117F5931EE0E446E51E73BBDE96D7208F024289F2FA039BE5BE9C9C9C1F870E1D7A2D25547FE9DCCFE63B9D5AC1DD7319E599FD82BD3D3C5F0E373A4C01010008BFA8A72B40BE53020E061C737B406680BD0F28AB9CFEC0F1E6EF59DA1FD82C099450FD64BEC37915DC3583D239B5380A1CE5EE17740A24BF437E14100080F08BFA2738355862FF172B0107CA0FBF7A5FE88E50A6BD40F989A89CFEC066B1F3039BA5052554BFECDAB54B07BDDA5E2610A7070707CFA7744EA1FDC26EB35F5852FE7EC1EFB09F345EDC58C253C2D92F000008BFA81FF400267A75B4345CD3F0B8B5BB7A5F83B50D247A653467FB51A1F2FA039BE5C7214386FC8DFEC0F587367D361747055D87C3319F519E4F918301B3BDD77D42C3EF1B1E7F7B5F2812B131426296C6D893A40000107EE1B5C2B68549EC37B112B427A8D2CF09DC17686B02C2B6865180285779FD81CDE5D89C9C9C8D2604275242F5C65B65C2EF348AC4F785EC0EB1FB056D0D5459FE59FED268592389D81C412D300080F00BEF14B93ED2F6E7AA2A7D4EE44F9114208EAB9CFEC03126404D4F4C4CFC9F09C13DF431D4067BAFE0E0E0A5A5AF070505CDA5547C5FC44F11E2CCADFAE18086DEF02DE1E2CCE15002A82AF68500E117B520373AF7A416A032CAE90FDCCBFCBD64E8D0A15FE6E4E4EC3797FD2825EFE31AD579BDFBFAE1C387FB502ABE4F47F63F99FD42915F11850854C1E8D1A37FC3BE10A81BFE14C1A965EF797B2904D41AED0F3C68D0A0D97E7E7EF799AB0F1615155D72DA69A715ECDEBD7BE6B061C37ABDFBEEBBAB2925EF121414F47C7E7EFE6BAD5BB74EFBF1C71FB5D6FEF2A4A4A4E5948CEFDADF693F8500D492BBEEBAABE7A143876675EFDE7DDBD2A54BD9C602B58C9A5F001EA5FD819D4EA706E0C39D3A752AFCE31FFFE8376EDC381D29E77F4C8DE45D6EBCF1C6ABCCC52BB7DE7AAB73E2C4898D478C18F193C3E1983368D0A056940E009CFC36F6E0C1830BCD65E0D8B1639BB18D0508BF007CCCD0A143DB9A9DFBC251A346F93DF4D043CEF8F87839EFBCF3026FB9E516A7BFBFFF275E322D528C59EE2875BD8B59F460A445054B5BB31CAFB9DA9F5C8F53F5A25FD74D37DDD4BBA8A8E83F7A62A277EFDEF6B601030674EBD7AFDF4EF33DCD370767F11EFE085ADEE1C7B95F47633ADEC9927EAED750B46A02C036B666B7B17DCD12CF3616F51D2B2F008FD1601B1414F4C575D75D17D6B76FDFA3B637975E7A69A85E4E993265B1795CCFA4A4A4140F7D0C0D9F3AE2748EEB7A9A2BBC5E6896BF977ADC7AD7CE3FC7157EF5726905AFA9F79F6796B9650E0C74BAA08E660972BDA70E91DE548A47515EE8ADDFD36DB7DD76456161E147B7DF7E7B60E7CE9D8FBA6FE4C8915DD2D3D3D72C5EBCF85373707691D6E47BE863E84197BEF9BC0AEED7832E3D622CDD3C7080EBC445B0EBFE04D7F7A8DFEDB4328F058053791BDBCB2C6D6A601BBB896D2C08BF1ED46AE9F0A6457EF9D78648F0150552704E415161E342290C7138E4B0439CBB0BA560455191E31B47A15FD2A61ED3B6F39502DE137C838383BFF9CD6F7ED3F8B7BFFD6DB9DB1A0DC03939398EE9D3A72F328FEFE5A100ACF3D4FEABCC6DC3CDF2E40976DCA9AE305BFAB3B7708559DDD61C2CF3F8F9A55EFB4157E8BEC52C37B90E1CDCCFF32A37DC70C395870F1FFEF8EEBBEF0E484828FFA4FF9831633A656464FCB876EDDAE97DFAF4F99D6B4EE09A96EA2AA785E59CBCE8EB3A11D1B6CC7D735C976F9A659CEBEFA75D7FEBC90BADE5C8E2D708806DACB5816D2C08BF5EEAAC6543AF8D0E8878D8298ED63D1B7428BCA261B78667873493F8C0680975064B76614ED0FEBCCC663F1CDCEC98B36F71ABFF1DF8616CAB6F13378A38DED8D46DFA54BE5AA0EEE8140E0E8763C1E5975FDE78D0A041C7DDCE98701C92959515F6D1471F2D3101F8020FD600BB69D3AF6BA5F8ACF589C4B8C2B35B8A6B6951EA360D6C7DE448CDF257525CFBAB61F70BD77D7A4071BA591E73056AAFE01A78E5233D28EBDAB5EB711FFBE0830FB69B306142585151D12BE6E0EC4E0F1E9CF529E7B6B432FBABB265BE428A6B24F4BBFDC02C3D5C7F7730CB046F2A7300A70EB6B1A84BC3870F6F5A5858D8CFAC5357FAF9F97531974DCCF550A7D3996D8ED1F699BFBF370F9B9F9F9F3FE7FDF7DFDF44F8AD236D9724B6880A6E30C304DC0E7F3A6364D8C50D3A8B9FC3EF98C769000E0D0A96D383629BF68FEEA10799F2DF7D4B331FDDFAFAA3AD9725DE5EE85F70D3E6F34E9D2F12F0A6E06B36B2CB1212124E1F3C7870A5B631E67151070F1E3CF0C5175F2C3161F95CB3114EF5E0479C689629527CB65A9B81E999EB8AE6B3D5A0ABCDBEDC35B6BAF39F59EA80405C7FCF75056AFF528FCD7705E06BA4B8F637DD9BBE27AD8DD083B29B6FBE39F0440765CA7CA7F2C4134F9C317EFCF8DF989DA696E1231EFA680B75357295BDFB64C5C2320757EE321FE03A119125476AD6F35D65AE4DDA5FE71709806D6CC93EC99F6DACEF1B32644847B30E3D6DC26E9F76EDDAA5F6EEDD3BA655AB5651868486864A4E4E4E68666666E8B66DDB223FFFFCF3F66BD6AC7962D8B061DF9830FCF0A930F2B8570D78D579E5A81B420343D7DD1C7F55C2679D5E08BB24AA6BB9C1B722BF89EED176F9B9AFB7BEB5C96F839C05FE8B5A7D3B74043F01A0F698E01A6E36B88BCF3DF7DC16B7DE7A6B80EECC2BEBA69B6E6A70C10517840506067E3E74E8D0180F7D441D88EA55296EFAA51649F119EE57E4D881A9DCCDB92E731D18E872966BE75F5E388F721D1C9415E36DC1F7C61B6FBCCC7C4F5A1B11D8AB57AF4A3F4F779A4F3FFD7493B0B0B0DF272626DEE1C18F78951CA965EF20159FA88D71DDE77EACBBF95DDB52077600C036B6B876976DAC0FEBD3A78FBF596F9E0B0E0EFEDA1C479D3F65CA94F0471E79A4D5C5175F1CD5A44913BB7E2973BFC4C6C64AD7AE5D23EFBFFFFE33DF7AEBADB01B6EB8A1878ED1327CF8F07FEAB11CE1B7165CB7F6A15161CE90D7DF38FB81905BE37FEBAC4AE82D6B42D361E7BFDFFEF143FE4EBF675A2D1B3A9A9F03E079A3468D0A6ED4A8D182CE9D3BB7BEE38E3B02AB127CDD7EFFFBDF4774EBD6ED34A7D3B9C0031BDF075C3BEB4565C2E86CB37C63968FCBD9E9976DCAB54B8EDFBC6B75A9A09C24C535CC5ED502C57C37979A8B4FEFB9E79E4AD5461C93F0A3A2B476A2A1BFBFFF5FCDCEF55A0F7DCCAC52075B07E4E89AF6B2524B3DB6EC011A00B08D2D96C336D67769136763C985175E38F0E5975F6E78F5D557C705040454EAB97ABCD6AF5FBFC87FFDEB5F91975E7AE9B58181814BBC64260EDF0DBFFD92C7DFB52B2FFDB5F7DA3E16D825BC758DBC66E7B0B35ACCEBF0BC9FBF9FDF246A8001CF07DF90909005679C7146D7DB6FBFDDBF3AC1D76DCC98318D3A75EAD4343838788EBE6E0D7C3C3D6B3D568A9B7055341E80DEBEBC82E7EA08977D5C4B7329AE29AE28B0B5753DEE71291E4044FF5EE12DDFD3E8D1A37F73E8D0A1B9B7DD765B8503AF54864E57650ECE42CCC1D9DB43860C19E0818F5AB6CC2BA22731B4C65D77D2BA9DEFE17A0E5D5E00B08DADB96DAC368D1ECF36D67B83AFB95872EDB5D79E71F7DD779FE9AEE1AD2AAD11BEF9E69B9B0C1B362CCEAC7B0B7D3500D779F8EDB9FCB6B3F6E666BCF88FB3C6069C1E145BA3AF7D46705C7C52DB49790E91E7CF5E3EB42D3F0FC033C2C2C2E69D7EFAE9DDEEBBEF3EA76E3C4F96799DA873CE39A7635E5EDE7F6B20006B0DAEF64B5A7D82C78D2BE736AD7DD651A117BA9627A5FCE6617A5B8EEB2022C52C33E44873E939AE305CA7DB20AD8D30E5397BCC9831013D7BF63CE9D76BDEBCB97E4FA101010133CCC1598F1AFEB87F2F53E669153C2ED555E67A80A635FADDA5B8B6FD59296EE2DE945F2700B6B127BD8D4D73EDD7CE2BB58D7D4E8ECCAD8E3AA24D9D1D0EC7ACDFFDEE778103070E6C5C13AFF99BDFFC26D604E0483F3FBF39BED804BACE07BC0A0F8CF87C506C9F809AAAF12D4B6B8047C45DF1C5D4D47993CDD58BF89900356BECD8B1FF0D0909E9356EDC38A736B1494F4F973BEFBCF398C7FDDFFFFD9FED63E2969D9D2DB7DC72CB318FFBE73FFF29D1D1D1625EAFD1134F3CD171E3C68DEF9A8DFBE09318F932B5826D5F65B67FC16CBB950000200049444154EE50E5A607005AA3AB813CABD46BE9D40F3AB2F3615708D600FC82149F31EFE3FA7BBA59FAD7C577A4FDCF0E1D3AF4A9D6466833BC8ABEA3BFFDED6FB6C6E1A802A8E0B1FA3D9D73CE397EE3C78F0F7AFEF9E7E70E1D3AB4C7F4E9D3D7D7D0479E5BA6CC5BB94E449476B714F7BF3EEC7ACC6A3932D8580FD7090F2DF34BF89502601B5B23DBD84DA5B6B12FB08DAD7B4D9A3479B6478F1E3135157CDDFAF7EFDF30353535D71C7B3DAFE7767CA9CCEAB4E677C8BAC7EEF473385ADCD0F84A8FBECFA3678CBA2CC82F3086E6CF40CDBAEBAEBB6699C07BC5830F3EE87437B3D1FE4A575F7DF5518FD39DFD7BEFBD77D46DB366CD3AEA20C0E170E8C6D6065FA54DA7EFBFFFFE58B361BFD82C6FE8D9CD1AFCE8E12708BFF952FE20557A5BB259EE9523F31F2A9DDE48E7F94D72ED2426B90E1CC6BA0E1EF47983EAE23BD211478B8A8AFEAB536DB86B23F43B1A3B76AC4444441CF5D8975F7EF998E74F9E3CD97E376E0D1A3490912347967C4F5DBA74F1BBE5965B82CD7AF0F94936918A3F4E99EB7D7F2B73C096E3FA0EF4B6DB5D653EC275D9C275D26310BF52006C636B6C1B7B07DB58EFA1A33A878484DC64B4F0C4EB0F1D3A34CE1C8B0D1F366C5817C26F0D395878E891094D873A829C011E7FAFA7CEBC6DB7A3A8E8F6FAF605990DDD9F74C0831A3EF0074E9A09BC534DE0BDFA91471EF12BBB831F3C78B036852EB99E9A9A2A1B366C9075EBD6D9EBDBB66D93A54B97DADBDDF4F1FABCD2B409F5934F3ED9282E2EAE7F0D07E017A5E2E98D94F6019E5DC17D7AE6FB02B3AC2F1594E7B82ED7BB0E0C4A2FF35D8FABF50142CC0EB1BBBFBFFF47F7DE7B6F60D9FE67DDBB7797C68D1B4BE901317EF9E51759B06041C9F565CB96D9EFCC1CD895DCA607757DFBF63DEAB52EB9E492A06BAEB926E62447EA4E3A4E99EB7775BE599696BAED755799EB6D8F9429F37FB91E93C62F1500DB58B6B1BEC8AC0FCF5F7BEDB58EEAF6F13D113D0633EB5B9059C7FFEE4BE5E657576FFCFC2F49E7FF90BD69DCA3678C72381D9ECFE06D42CE68FECACE0F8B626E6E3F3BED8DE4F4FAF20575ECD8516B94124D3018D3A953A78E6639A47376998D656E659E3F72E4C8497B9AEC610BE1251AEF6C2CEFBCF3CE63B57D02C5AC37D13131319B5252520A6BE235274E9CF8567A7AFA88871E7AC8D9B061C363EE773A9DB6BFD292254B4A76EA7ADBC68D1BED4E5D9B40676464E85C73F6BEA0A020DB04BA65CB96C76EA4FCFCE4A28B2E0AFBFAEBAF9B9B0D7093E4E4E44F7D71DD30DF5391F9BD4FEAD0A1C3D8EAFCD6CBD281570A0A0A3E33E51AA80761E5D1E6799F7FFEB9E4E717B728378FB70762975F7EB9BDFEF4D34F4B56D691CCAE27391E7CF0415B335196F9ACFEBB77EF0E4E4D4DEDDFA54B97B757AF5E9DCF2FDEB3EB8A59469BA58959F69BDFC58ECA3EBFAEF60B2BDE5F21C191C112D220A4528FFF79D9CF92BA2155625B1EE92E51545874542D59698BDF5A2C4DDA3711A75FC5C714FA98809000098F09975FD7FC2A917191F6F67DDBF655FA73F9C27EE114FDDDD4E8BE906D2C6A685B3EC22CEDCDB2AB2ADB711DE4CA6C0B5FF8C31FFE107E32838C9E488B162DFC3EFAE8A3D8B3CF3EFB3DB3EEEEF38572AFB3DAC41DF97BC6F76ED0C57132531A55D5F9116D377D93917CBD66EFFAF64599155CFB0E8E3041628459C9D3CC0F668EB96D86090D0BA74C9992E30D9F31635786A4EF489733CE3DE3A8DB0BF30B253B3DDB1E6C5445416E81F805FA557800D37D68F70AEF773FA6658F9612DF26DE1EE49CDEE9F492839CE866D1A7D2F6F5710DA0717171D9AEF5E64DB3235EF4FEFBEF57AB26D204DF7F9B1DF00D8F3DF698A3741FDEB23A77EE2CCD9A3513739061AFEB0E5E77E8AFBEFAAAA4A5A5C9FEFDFB4B1EABCD9F2FBCF0C20A5F4BCF6A9AF78B32070523860C19B261C68C19FFF0D52FAB267EEBB7DD76DB15870F1FB603AF1C6FAA0DAD61B8EAAAABC4ECD82437B73863E7E5E5C9EBAFBF6EFF3E78F060C963030303B5F6E198FE6AA5DD7EFBEDA1999999EDD6AF5F3FBD4F9F3E834EA29F362A4707F4BA4F17B39E680D4C92D3E97CE3DD77DF5DED8D1FF6BB19DF49F419D1156E7FD7CE5B2B0EE791609BF25D4A49E0B5DBEE5FF6C98F5FFC28374FB9D96EFBD37F4D97A8D38F4CCF1D141A24BFACFA45CEEC7E66C96D651FB363ED0E39EFFAF3ECDF1FDCFF81FC7EF6EFED6BBD73EB3B32E6BF638E7A7FF8E6BED06CC332CCEFE523B35D9D56DD7D21DB58D4A056AEE50EB35E6A7338AD9D9F919A9ABAE878DF6F4141C1802E5DBA1C0C080808F6E487D3607DDE79E71D5EBC78F1B5F5313F7955F8DD99B3AFE7C8F82B6BF53D0744F70C5E9C91DCBB9E7F79FA43D0262FA3CC467C544E4E4E96F9B1CC341BF10F77EEDC39A72E3784DF257D278D5A3492669D9BD9839CB0E8307B20F1EDBBDF4AEB8B5BCB853715879B83FB0EDA30AA72B373EDF56DDF6F93F697B7973D9BF6D883A39CAC1C49DF9E2E978FBFBCDC03180E72AA15AAB45DCC60B3DE0C3607C89966BDF9D8DCF64E5542D55FFFFAD7A7376CD830EAD1471F3D6EF075BBFFFEFBE5DE7BEF2DD9E99B75F4A8A6CEF6BB0C0AD2E98D4EF85AFA7E7FF9CB5FA21E78E081C7CC67CF4F4A4AFA978F7F6505D5F9ADEB88A3E6A0ECE33BEFBC33A032734C0E1C3850BEFDF65BDB1CCF6E60F2F365F5EAD5B686420FD2DCB4FF59D966E9E5B9FBEEBB43264E9CD8CFEC905F369FF1368E6B6A459E6B5DB9BBB0B0F06EB39E6C37EBCC5C3DB837BF9385DEF221776FDA6D4F8456A4C3951DEC763C2D25CDB61409082A6E2E1A1C1E2C05F9051277769CF4BAA557C9E357CC5C21F16DE34BB6E5997B326DCDF2BACF8BBB576C5AB4C9EE872EBBF7327B1236EF709E14E6154ADA9634BBDF896A12557202B561D38604DF538756F7BB4F30EE7305E14A9F60641B0B0F1DA3159A7552CF7C68BFEA3BE2E3E3B70F193264AEB96DC6EEDDBB1796DDE70707070FE8D5AB57546D7CB68B2FBEB8E1AA55ABFA137E4FD2AFB96971ED429BD7EA7B768B68A767C99BFBD077A6CD76C2DD07C7E687923674E850ED5FF8566DD7086B2DADD6FCEA41C6FA05EB2561508238FD9DB69635AC515849F0557A30A20731C97393A5CB355DEC81CDCFDFFE6CC3EF77FBBE93961714377D751FC07090E3918DAC76D21D66D69B612654E5989DFF7FCC6DEF1F2F543DF6D86393D6AD5B77FF830F3EE868D2A449A5DEC7DD77E9D34F3FB5CD9FCD81B96DB2E86E0AEDEFEF6F6B7C2BFB7A7A70F0E4934F464F9830E119B3AEE74F9F3EFD751FFE9A4A376B28AACC6FDDDCD62F3B3BFBC3BBEEBAABC26678151C4C698DBE1C3A74C85E775FBA69CDFBADB7DE2A95695AA57D84CC6B053FF0C003379AE7A44D9E3CF9210E6B3C2EA0CC7E419BC38D3697A35D35C236089BDFCBDCBAFC90EE5640C7F3CBCAE280D0E6D236B625913AFD9CD3ED365EAFB7BEA8F53181D94DEFD7ED7B930EC5DB93B8D671F684AC3D3B60F60999BB32ED3628242AC4DEBEF49DA5F6F3F8051C59AF270F9B2CC35F1E2EA151A1AC55A78668397282F1A0F9BDBC7FBC138C6C63E129661D2CDB5FC36EC775898B8B4B77B5029BE6DEE79BBFCFD326C9B5F1D9F418CD7CBE4EBE52D675167EF7E76704C40644D5EE8AB53F37B2C9374511098989937CE4FB7396FAD114991F428CB948345713B52FE590214336EDD9533BFDBA964E5B2A57FEF14A7B20B1F8CDC5B6F6D73FC85F3E79FC137B70A2073D1A86DD1A9CD6C01E70E863349416E415D820BB237987F80796BF5AD6F7839C43BB0EC9CA952BB58F877BFDD32AD09C528134BFA0A020D5E974E69709AAA9E67B3DEA4486795C5A759B2D97B72F7507616D0E6676EEF3CCF57F970E55AFBCF2CAC4152B563CAAC1B7BC7EB9C7336CD83059B46891EDE3EB5A574BEE0B0909D19132ABF47A5A036C8278833FFDE94F7F3765999E949434D35B7E9083060D8A37072FC1C7D9B9C59BEFB33A4D941C27FAAD9B03221DC4EB6FE3C68D0BD026E755A1CDD3AFBCF24AF9F8E38F6D6DC4513B097F7FD1114CDBB76F5FE9D7D303B949932605DE7FFFFDE3478F1EFDEBEBAFBFFE4F5F3F70D1F9A8CD77115FC9839C4AAF07D558679C6582B0D608DB5A2EF37BD1D7ABB5FDC251DBACDC0239A3EB19929371E273B23BD7EF14FF607FDBDFD76EA02283EDBEA149C7A34F92E9C9CE79CFCD93665D9AD9EBBB36EC92F0E870BB7FD026D2FA5E7DC7150F1C14141624412D83EC3E474F94EA63749FB0F99BCDB6B591D2D7BA72C295B51A7C0FEF3D5C76BF5056BE6B1F50AD565DE5ED3F6AEA39665B9163F643A93EF4330E93232718F7997DE16752EA04A309BC3D0F1E3CF811DBD8FAE544FB650F6C834B3F375CF7D727FB3F94EE0EE5DEE7E7E6E6368A8C8CAC9532D4BEE8F9F9F991BEB24ED459F83D5478D811EA0CAED5F75CFECDB70D9B2CB3C790137DEDC7ED2867041073532B6D6AD3A25F0B8FBEB7F6CBD2E0AA070C9BBED924835E1824F987F3E5EBD7BE96817F1968FB6BCD183743DAF469235D0776B5D7350C6BE0CD48CDB04DDC34946ACDAFD6D29EDDFB6CFBBAA56B7E7DE12067EFF2BDB27DD5F60AD73F0D85DAD4AFBCDBCBD2B3C37A205BC65161DAA5AA2331469AF7D3A90B06B937B06DDBB65D60D6A3D166875FE5E0EBFEAC3A98D58B2FBE78D4FFA2ABECF5D75F6FCF6257950EA665C26FD0134F3CF1868E86AE07F4650E608EB7B3897705FE8AB6894D8FB3238B72ED84AAFB3BF5D86FDDEC085FBAFDF6DB1D553D2873D3EFE2CB2FBF2C3949E1A6FDD04C1957F9F5B496DE7C47818F3DF6D8DF870F1F7EB139E0FBF1380FD73357E1D52C92F0137CDF555D07AAF558F7E06D35BD1E9CE43AE3ACABFD42591BBEDA605BEFE8B65F5BEE44C44694FF0334A1B7E939C7FE04A39A46D9E79595F6739ADD962B6D7DA435C6BA0FD8B2648BECFD65EF518FD5E76B6BA0E5EF2D97F313CFB7DBFF4E571557661C483D20892F254A604860AD96CB9EA57B8EBB5FA8681F5085836F8F3DA782FD50853F11297FCEF59A7E4E4D3D3FBAF40946B30DDC69826FEC4D37DDE4CF36B6CAAAB2BDF5C4F34F769F5B27CF3DC1EBB6D293289E1AE5B92C3D4E33E13788F07B9234F86617E6486D06E06E17F5287869FBCC2213809FAC47DFD1C493F8716C4948486899E6E191E85B9CDFC20E40A20737E70F395FB2D2B2ECD2FF81FE258F19FAD25099F5D02C1B7EB5C9B10E5AA20721DA1C590F402A53F35BDF0F721A253492D81DB1B26AD52AF7A89E716536E8FEE63B8B373B5CFF4A6CF863CAD9919557EB745247B8BA81DDB061432B9D7FB753A7EAB778D11A5E0DF6A5CF78EBF5EA045FB7366DDAF8C5C4C414A6A6A60EF7A29D60792720AA727F9FEA7E36734096D7BB77EF6AAFD47A20AB351065E981597927652A7B92A269D3A6CE8D1B370E16DF579503ED13AD07A5D7B9F26AE1469DC4E7FCD9EC17CE4CABE5194A7E5AF8939C37E83C3BBAF2A237161DB57F284D4F82BA696DB1FBB69FBEFAC96EBB577EB0D2EE47DC344CBB4F94EE5CB753421B84DA00AD7F47C61FA9A8D0FD84BEAFEE0B1206271CB3FD6F10DFA0D6F7092AB6476CD9FDC2313F4D57CD53758FD7AA131C2AFB9CE00AF63B153DB63AFBA3B6DEF0E336DFC169663F5668B6B1D57E0DB6B175A6D2DB5B0F3C5F5BE81D6F633BAA9AEBE366B32E35CFCECEF6AF8D00AC2780CCFBE5FACA0A5167E1B7A17F44DE9EBCF480E641F1B5F7A60D02F6ECB8D091FFF5B8A449F5E50B4A4C4C9C58851FC301B383FCDCD52760AE36D3B9F9E69B8B6AE32067FB9AED36B46A33633D60090A0FB22377EADF7A20B2F1EB8DB67FAF5BC7FE1D256B6F96B4EAD5CA0658AD992D5DF3ABFD80CB9EE5AFEF0739217121D2A16B071D04CA23EB5F054D7B34247F57C9F527BFEC01969E403181F5CDAFBFFEFA61133683ABD2C7A9E400D604DE37DE78E398A65E7AFDBDF7DE936EDDBA552B04CF9F3F7FF5AE5DBB5AE8FA5EA6E6F7B83B9BE335E9D3A6E7E6BEED151EBD0507A79BDF55BA077FEF4595FCAE32CD679DE7FEAD9B1D60AF356BD6CCFCE28B2F8A2EBBECB26A9D9D2D3D1A6999F7B2F755662096B27EF8E187822D5BB6E49ACFF99F32DF51D9F748338FA96E33FE131D5C54691D28E73B4FF59611F54BAD27953E6032FF67966BBFF0B67BBF70CB2DB714D566F8D5EDFBDEAD7B4B5AEEE8767ECFE63D127BD69141F3747C885F7FF8F5A811FC7520441B1ACC6D7A9FBE8E8EE0AF2757DDB30768771A77602E7D5254F721A54F8AEA5812BACCFCE3F17B49947EEDDA10D428C8A3FB056F51956E01A57EA7C1AE0180AAA59CE7BF5989A7E9A04385E5EC0B77666666469A6DAC3FDBD82A7F0F556E7AEFEDDBE0DADE96BBB6E39F98658ABB19BE39BE4FCDC8C888AB8DF06BD67D9DAF3A93F07B925A069F96F963F6D6E8DA0CBF3F1CDCAC5FDC061FFBEDE838F93AEFE98C909090F99E3C30AFF047595824B31F9E2D6D2E6923E75E776E493F5CF5F6E8B765E4EB238F3A9B5FF6B93A6A73DB4BDADAA0EC6E0EBD7FFB7E39B8FFE051A337D7F7831C4FABA0EF55CAF19AA5990D6A81D998FAB97650FEE67ABAB99C5FFA048ADE3774E8D085FFFCE73FBF34212B40A762A88AB973E7DA0D6779F44060D6AC59556EF2B570E1C255FFFEF7BFCF30017A9009D0F3E5D470C87C3FFF35DF4D5239BFF5F9C3860DEB636E9BBF7FFFFE82EBAFBFBE4A7BC31D3B76C8BC79F38E9A6FD2EDC08103B6A95E42428254A5D9BB1E94FDE52F7FC9C9CFCF4F9C3163C61C416DCA718FF65C57FB85D2E63C3647AEF9F33525D7B505CF6B435E93DB66DC56D2FC59A73FD245074C8C8889B02752DD035E697369EDDAD220B741490B1E379DCAAEBC93A27B53F6DA81154F7850B727D3769D71DBBA62EB51E34BA066B8F62529D578EAFA1A0C1A15855FED1BAF676775E038A7F9DD38CBDB179A6D6C17B6B1A84507CC7AF81FA7D3F95E6A6AEAFCB203B0050606AEDDBA756BDCF1A6C6AA29BAFE9ADFC14F84DF93D434B8F1B2C519C9FDFB35EC5E6BEF3967DFE27D45225FF948E07DDF2C9F040707CFA9EB3362DA8CD93D759086D78DFFDB78CC889CA569C8D58395CD8B37DB66A43A32B406E0C3D987ED54185A63AB35C7210D4238C8A9797A563BCF947B902BF06AF0D5BDF1DCE39D40993E7DFA22B3E3EF3675EAD46F4CE00CD5119C2B233D3D5DFEF39FFF8809CD47D69752A33D6B28FEE28B2FEC88D095993AC9FE8EE7CC59F3EEBBEF9E615EA39F09BECB7D3DF09A45CFE27C74A2DFBACEED3A7CF8F02E1F7FFCF1E283070F168D183122ACB213DF6BCD7CE983327D9E7B746EFB210E1DB2F3523EF5D453957ABDD5ABFFBFBDFB00B3AABC1306FEDE9901860E22289648D058B145B1AC2968D4609A292A6349246ABE98982F9BB669BB0846779358369BFD8C4663023E6A04D144578D2524F6D8A2220A36C2824AA8024A9B19A67CEF3BF70C5E2733346760EE9DDFCFE7FF9C7BCF3D7766FCDFCB39E77FDE72A6D75F76D965354ECAB66EC11BFF6DDD143FB7DB3BC37161FDC5AF9FDE1D0E3BEDB0B0FDF0B7870CA682F7E3E33E1E2E3BFAB230FAFBA3C3C19F39B8E94266922E84A68BA2E978928E05E515E54D4571EA59D47CBFDF42693E88668517455B4AADC6B5AB6BC3BAB5F95BCBA49FF5FA8CD7C3F45BA7870F7EE9834DB7D76BDA67C582FBB5E9AFAD6FA5A664ADCB5A78D397A52C8B0D1E0BED63D90A9667E7F737C6FDF8631BDA8FC7F3ABA98F3FFEF851871F7E78878FC57DF4D147D7C5F3B55B15BFEFD23FF5DD7FE24F5EBFFE84FAC6FA509EDB2A33758747DF9AB96BB7FA7073317E50A94B735CDC575656D63CF3E08ACEF2B7A5EE6BF75E766FD358AEF71EF6DE365B79D37D7753AB703AC94845EE69979FB6FE9643CDF7EB5DB9786553AB6D9AA82A6DEF24A7DD956507FB555951B5C91750D281BFAAAA6ABF58703E150BE0EDD2CC951B73F5D557879A9A9AF5CFFBF7EF9FC6A686A79E7A2AC49387FC197B7575B8E28A2B9A6E03B131B1909E79F3CD37F78B07FC23A64E9D3ABB443FA3D5F1DF7BFAB7FEEBCDFDB77EC30D37BC3E76ECD803FEFCE73F3FB87CF9F2F79E77DE797DBA75EBB6B18B0961D1A245EFE88EB7CF3EFB345DA498397366D3C9597A2DB54EDC72CB2D4DF7ACDC90BFFDED6FB5975E7AE9BAF8BE93E249D9DD818E3C2EACCA8E0BBFE96CC78574B1F17F1FFBDFA67D6EDA9FB7948ADCD3AF3C3DCCFBEBBCA6DE3E856A56D784E9B74D0F77FDC75DE1DC5BCE6D5A978E2F1B937E4EDAAFA7D9FF5B4A85749AF4301DAF9A8F1B275E78E2FA0BA0E9FEC18F5DFF5853919DEE2440C9EB96CDE1B059C742FB583AC0FC187F48A74C0B172E9CDED6ED265B2A2F2FBF239E4BFD3CDD2B7A63DFC177230D517BE289271AE277F4778ADF77E98441874FAD7AE182B50FBEF96CCFA307BCBFC37FDF836F4E5F56DD50FDBF2F1F39796E917D46E3E20E726EDC29DFDC59C73CA4715BA3BF3B7AFDAD869EBBF3B9A62ECAA9B04DE37C9B5B6B6BD7D486BE43FA365DF56F2E64D3D8AF3436B8B9FB71EAC29C5A649B8AA2B7AA9B6E7191AEFA3BC9699713E574627CFFBBB9803279F2E4D48DFA905400C79DF48033CE38A3ACAD2BDF73E6CC09B366CD7AC758DF34B6F79C73CE09F3E6CD5B5FFCA6D7E7CF9F1F9E7DF6D9B0A15934AFBDF6DA57EEB9E79E748B9F4F946AE11BFFAD7F3E7E36EFEADF7AFA5C4F3EF9E47F9A3E7DFAD4F1E3C77FE0073FF8419F749B82D6A496F9D42DFD8D37DE1E36107F7FF8FAD7BFDE74303DF7DC73D75FBC58B66C59532BFD873EF4A1365BE95337BC4B2EB924DDB2EB6BF1BBE2A4AC0B1F17D27EFE804F1EB0C16D520FA1D67A0955F6AD0C479C714438FCB4C337EB9EEC479C7EC43BC60CB794BA4C17769B2EECF9D3D6455B1C0BED63E94047C773A98737B5E06D7921E64B5FFAD2E37FFEF39F3FB8298D115BEABEFBEE4B5DAC9F2FA5F3AEF26DF9CB3FF72F67F6BF79E97D47550D3E2694E5CA3AF47755BD3861D1EA86DA4B96FDEAF919C5F4013DFFFCF30FC6981177B25B748FBF2F7CE10B1396ECD4F1F7742CBC6550EA823C648F214D45F10E7BEDD0B44C91C66DB56CA94D134FEDBCFFCEEBB749EF6D7E3C74DFA1FFD0F5B9D9CEFBEDDC5448B725FD9CC34F7FBB4B7DFA7B0A8BF5742B8D14DD7B6DDD89AF862C1812AEBBEEBA0BB6E6EF1C3162441AD73B319E289F1D779637C4EFD38BF1FB54FD2EBE932BF6DA6BAF9B162C585015A3F7FBDFFFFE5C6B33554E9830E11DB77448B765F8CA57BE12D2F894F8FED48D66FD95F0B44C57C08F3FFEF8D05A319D15BEDDE349CB07E2017F56A91E05DFCDBFF542B366CDAA7DF6D9676FD87DF7DDDFF7D8638FED7DC8218774EBDDFB1F5BDF2EBBECB2A693B3E693AFF439A6DB711C70C0014DB392A67B08A68B12CDDDD4D367933EA7638E39A6B593B2DA8B2FBEB836EB867793731AC78576B818B459DB97959715E5E7B92D8E0B5D517B1E0BED6369A77DF9DCA8614BDFFFBEF7BDEFC93973E69CF5918F7CA4A2235A7F53CFBCD4CB203A29FE5B995F2A79DFA6478A0B867DF1BB9565DD574E5C745787FE9EAB16DEB660D9BA37E7EFB27AC164FFD44AE4AA4DF77249D844B158BCE8C61B6FBCBE3D5B88520B707D7DFDBE716738FBEAABAF6E683993F3B469D3DE71A53BDDEA284DE4B1EFBEF9D6955D77DD351C71C411EFB8475D1AF374E79D77FEC3EFBAF2CA2BFF3716BE69ECEBA1E9F7FA4437DDB5D75E7B563CF1BAF4FCF3CF5F9B26AC28F4D7BFFE352C5EBCB8A9ABDDFA93F02143C28927BE3D31513A014BB7D268965AEBD3E794AE04174A276FA935C2F833A02B1D0BED63D996E277E1F9EEDDBBFF362E6B3AE2E7FFFEF7BF6FE8D1A3C72D13274E7CBC94F2B6CD2F931EDFFFD0CFFC7AE11D8DD357BDD2213FFF8535F3EA7FFEFACDDD4359EE9CFB8FBEBFCE3F15681FA9EB576D6DED81F1A0FCF27FFFF77FD7A7712749BACADDF2D646E9607EFAE9EFBC1D6F9AE1B97022AC748531EEC09BBA7E358B85F5FC871F7E78493CE01F154F5A96CAFA167D4EE7C7CFE69BE3C68D5BF7CA2BAFACFF8C528B443A312B94BAE2B5F48D6F7CE31DCFD3095E1ACBDDFC3965DDF056C7CFFB734ECA00FB58FB58B69E9933677EF9B1C71E9B77D75DEDDB90982EC0DC7FFFFD7F5FB468D1974A2D67B9CEF0475CF8EAA46BA62D7FEAEC1BF61A1776EE31B8DD7EEEFC9A25E113B3BEBF6C55DDDA7F9E7DD88DD777C57F147FFCE31F1B671E32D3DEA193D8EFA9FDC271C71D972BA5FFA7934F3EB9CFC08103A7EDBAEBAE877CEF7BDF6B97AE37A9708E05F5C2A79F7EFAC58A8A8ACF74A6897C8AD599679EF9F174DB846F7DEB5BDD3734B67A7334CF381A4FFCC63829735CC071C13ED63E96ADEFF4D34FDFA5B2B2F2B9CF7DEE73034E38E18476297CA74E9DBA64F9F2E58795628FBB4E314066DC7BC69EF3D181237F77FA4B1786F66A017E61CDBC70E2AC1FBEB9AA6EF5255DB5F085AD21EE2057D5D6D68E9A3F7FFE133FFDE94FEB520BEEBB91DEFFE31FFFF88DACF03D41E1DB3EAEBDF6DA3BE389D9A77EFEF39FD7A6EE78EF566A8D4827655A2300EC63D976D2E457F1DC69FFDB6FBF7D4E3C675AB7A5E761E97D37DE7863432C785F2FD5C237E9340327FFF4B3DFDFF4F9EF7F69F0CFE6DF34B22C57963BB0F7EE5B3C09D6A44577D57C7BCEE5AB57D7AFFDC6ECC3A65CDE95FF4114CBC4265D45A94E6C9226DE193162C46F57AD5A75683CE8EF76D4514795A7C93C3657EA3A7DFEF9E72F9F3367CE23DDBA75FB74679DC9B658C593A9BFEDBBEFBEE9F60867F6E9D3A75B1A87BD859F77ED25975CD234F14A3C38FE41661D17705CC03E966DE7B9E79E7B2B7EE7AE880F87DF71C71DFBC673A8F2F7BEF7BDA1B509495B4ABDED1E78E08134B9555D2C7AEF5CB870E13137DD74D3E252CD55A79A35E8C1FFBAFD0F677FF7DC3F3CB272E667AF5F7C6FAF5D7B0C09BB55EEB8C9EFFFCB5BCF852FBF72D99BF72C7BFC859ADCBA8FBF3272F23427394E729CE46CBD02F8E9A79FFE6D3CF01FF8C8238FEC71E4914796A75B3A6CAA34FE3716BE6FC59DEE9DF3E7CF3FF5D65B6FADF58DE99003E4C23DF7DC73CAECD9B3CFACADADAD6C9E846C334EEED2F8B3DA748F4927658E0B382E601F4BE790668E7EFCF1C76FDD638F3D7E1FCFA38E8A05ECE0458B163555BFA9084E9186A6A516DE58E436DD92F2B6DB6E0BD75C734D5DFCBEBEBC7AF5EACF5E71C51517A7D9CC4B394F9D6ECADC07FFFBF6BFBF78C543171FFFED93EAFFB4FCA983AF58706BCF39D57F0F758D0DA1227E68DDCB2A42B75C4558D3501D16D72E0FD357CF0E9397FC29FC70EED5D5772E7BF4A5BFD72E397F87D5F3FFF9A9A3EE58EC9F81931C27395BDF534F3D3575FFFDF73FF0BEFBEEDB73E4C89165ADDDFEA1A5254B968471E3C6AD59B162C53DAFBEFAEA195B72CF3B365D3CB02DDB7DF7DD272D5EBCF80BF100D9FBA0830EDAA4ABC3E9561BF1A46C9DD608C7051C17B08FA5739A3973E6E2279E78E29723468CF84D4D4DCDB2E79F7F7ED0B469D379A9178A00002000494441547ADD72CB2D1553A74E2DBBF3CE3BEB1F7AE8A13571BB39CB962D9B180BE4B3264E9C78E1B3CF3EFB5A57C84FA79F60E14773AF3D78FEBAC5DF78A3F6AD7F7AB576D18E2BEBD7F45AD7505756912BAFEF555EB9B66F79AF97E366772F5AB3E4572F1EE936282D99D8A473E94A139B7CF9CB5FBEB6BCBCFCD458D4764BF7F66DCBCA952BC30F7FF8C3D5CB972FFF5D3C49384BE1BBF58C1D3B7640DFBE7DA7EF169D77DE79A1B2B2B2CD6DE7CC99537FFEF9E757BBD586E3028E0BD8C7527CAAAAAA9E8B8B11315E9E3C79F25E5D350F159DFD0F3C7FD899CFC4C599BEB2505CAEBAEAAA33BFFAD5AF3EF7A31FFDE8A27840EFD15A019C5A7C274C98B02616C03F8985EF4F14BE5B579A4C6CD4A8517BF4EEDDFB81F1E3C71FF9831FFC203760C0807FD82ECD387AE9A597563734349CEBA40CC03E96E23276ECD8CAEAEAEA11D9D33DD3F3AE3AAF4A99AF03D051AEB8E28A4BE3E2EBFFF66FFF5697C696149A376F5E6AF1AD59BB76ED77AEBBEEBA8B14BEDB46CAFB4F7EF293A37AF5EA75CFB871E31A172E5CF88ED75337BCECA4ECA41B6F34733E807D2CC52616BE47143EAFA9A919D55573A1F8053AD495575E79754545C53F5F78E185F5B366CD6A5AF7D24B2FA516DFFAF8F0DB13274EBC5296B6BDF8799C306CD8B09BCE3FFFFCD07CA1229B78A52E75C38B276577CB12807D2C45E9CC8D3C57FC02B497ABAEBAEA8ACACACA332EBBECB27593274F0EFFF99FFF59D3AD5BB773AEB9E69A5FC84EE7F19DEF7CA7EAC0030FFCAF8B2EBAA8F1FAEBAFAFBBF8E28BABD7AD5B3746373C00FB588ADA270A9F3434348C1E356A546BC35FBBC7F8B4E217E05DFAE52F7F39B967CF9E63D2B4FA8D8D8DA7FCEA57BF9A242B9DCFC30F3FFCF30103063C7CE79D7756A46E784ECA00DACFD7BEF6B56FBEFFFDEFFF45B68F3DCF3E968E76EAA9A77E202EB62F5C97CBE5060C193264542B9BF78DF12BC5EFB673D3367E3FD08E7EF18B5FFCBEB2B272602C7CFF47363AADB10B162CF8605CFE54373C80F6F7C8238FBC91968D8D8DEF950D3A406AD1DDB9B9CE8BDFB331AD6D140BE0312DDE33B4AB24A7B3A8CC3EA43505EB3ED5CA76BDB2E59A4DF8999FF2FD87CE25CD7E290B45A15A0A00A0A87C31C6B763BC18E380185F8F716C1BC5EF27B2599F4F8D4F2F8EF1788C618ADF8E978AD9DBB2BFA52646BAEF54BA1276458C1E31E667DBA5F52FC598939D94ED19E3E3319ECF5E6F8CF1CD18DF8BF1508CA5ADBC7F957F1300004089D923C6BFC4787F562BED3674E8D087E3729736B6DF71DEBC79A9A1F02731F68DB124C6E018B314BF1D6B748CD5E1EDC1D53B67CBAFC638ABE079C88AE2DAECF1B9217F65E38B05AFAF2CD8BEA195F7030000949AC363F48C31717D75BBE38E1BAC83BA77EF7E4E5CFC392B7C9BEBA792D6198ADF7475E1A8EC83BA37FB00DA92FAA69F1CE390ECC3BDA7C5EBBFF6BD070000BAA0BFC4F872F3933DF7DC33CDE1D16601DCAF5FBFC3CACACAEE686868E83209EA0C135EA53EE923624C8B717C8C17DAF890527FF5D4D2FB95ECF5B37CBF0100009AC6ECA65A2ACDD8BCEAB4D34EDB2397CBA59AA9B1AD37949797F7DF6EBBED3E121FF6C9561D50EA49EA0C2DBFBBC548B3DEDD90C503213F9E378DD5AD0BF9BEE7A9297E87182F87B7C7F0EEB7093FBBF0FD000000A568768C6FC5F86B8CA75E79E5952377DF7DF7B43EB7A137EDB7DF7E4B1F78E081BFC5870B62CC54FC76BCE1319E88F1688C41213FA1D57DD96B97C5782CC6E290EFF23C2EDBAE6FF601AFDDC8CF2E7CFF71C1845700004069BA2E8B5EC3870F7F3AB4B8BF6F6B860E1DDAB35FBF7EFBBCF5D65BA94EAA55FC76BC54E8A656DD34EB735D8BA48F8FF1EFD9E3B47EEFAC405E1EFE7140766B57355ABE1FA02B48B78EFB46C8CFE0D8727D9A5F21CD8CBF509A00DE95D4C276682BEB538FC3349FCDCB52C4B63066CC980372B9DC5E9BB8F9EE1FFBD8C70E983C79F2FD5D21379DE93EBF6DDDB7B765D1FAC666FE5C452FD0950C8B3137E46F7390C6F014F67849B33A5EA6F00578573E1CF2C3F47E5E702E5D963DFE8F906FD4699026B6952953A6A49EAFEF6818ACAAAA9A10F20D8317C442774257CD4D85AF07404949F73A4F13034E0FF9D6DFE6F9119E8A717D8C1D43FED672B74A15C016199B15BF8F64C5EE91D9FA3466F294186986DD6352912155A0F805A0E3DC12E36731EE8CF17056F026C342BEC537B5087F42F10BB0C52E09F90B8C9F8DF1CB183FCED60FCC960F6545B1E2173A9932290028197DB222F717A1F571686784FCE4172E7C026CB934FFCC41213F696B4B695E855D836ECFA0F805A0438D0DF96ECD6936FC34DEA7B2E0B583B2A277AE34016CB14BC3DB1710E7B4786D8F18D7C4784D9A40F10B40C7BA3C2B7A6F0CF996DF1D0B5E7B31E4BB3AD74913C016FB4E8C79213FDEB7A574E1F1CD90EFFEDC5DAAA0F3D1F5ADC4ADEBBEAEBEC7DA1EE5353D6B24631BEB5EDDFDADD0F6ACE6D05E52B7E62FC63822E45B2176C9D6A72ED197648F6F91A6AEABAE5B5D4D3C2EF4705CE814C785D0181A17CB44514AB7324ADD9ED3AD3A0765EB762E287E3F2D45A0F8652B5BD37BCDECFE2BFAEFB5B8A763EBB63668E9A0D71B1B1B67C8045B4175C1F2D8ECF1EB217F5B8EB46EB614755D6B7BAD9D118F0B231D17B6BD01CB062C88D5EF03325174FAB478BE3AE4C7F8A67DEBCA183D632C9226E87C747B2E71B57D6BCF19B0644063CFD53D25631BEA51DDA37EE0E281831A1A1AC6C9061DECE68293B334D3F3842CD238B4B931BE1CE35C69EABA1A7A369C3360F1807AC7856D2BB5FA0E5A30A8C271A128CD28D8CF3E1F6356C80F2D498F5397E8BD639C2C4DA0F8652B3B6DAFD31E5ED97FE5F777FDDBAE0D43160C693AD8B2754F6E062F1C5CB3FBACDD979785B273468F1EADC58D8ED63CA6F7E1565E5B15E35FC2DBB73FA20B3A69FF9366ACEDB7F6BC5D67EF5AEFB8B08D8ADE45831A86BF307C7979AEFC2CC7859228825B4AF32B4C951EE87C747BEE02C61C3CE6E29BA7DFFCC7DE2B7BFF66E092817B55ACAB28AACBFD4B972E0D4F3CF14418397264183C787051E5BEA1AC61556368FC73435DC3B78F1F7DBC131CB6A6151B786D95F4746D9F3BE47357DDF6E46DF7F779B3CFF503970EDCB7A2B6A297AC6C1DF565F5AB43597830AC0B5F3F76F4B18E0B008A5FDADB49079DF44C5C1C5C8C7F7B555555EA46B4DF6DB7DD367BCA9429EFF369429BD20457699295A51BD8268DF94DADC2AF4B57D776E2C8135F8A8B9132019B65688C9B3661BB2F857C576840F10B9B66ECD8B195D5D5D5FBA5C7B95C6E8FF47CD2A449D53203AD4AF7F54DDD9EE76E609B74FBA3DB43915E0C03D8C616C4F8CA46F6B3FD63BC12F263821BA40C14BFB04962E17B44E1F39A9A9A517171B7CC40AB5277E6E9CDFF7CB293B315E1EDD99F93BDB3133700B64C9AD1F99F62CC09F9199E9B677F4E73E9A4DB1AF688B1BBC21714BFB05972B9DC171B1B1BD73F8F8FCF56FCC246A5A277588CB131F6CAD6A52ED1A91B5EEA12AD2B1EC0BB736FC8DFE7F7C3317A6705F13931CE8CF186F440E764B6673AB5868686135AAC1A75F2C927F79119D868F19B3C16E38B59FC3A2B7A974A0F40BB49B7397A30C64352018A5FD862A79E7AEAE85C2E5738BD731ACBB87D7979F968D901000036876ECF745A0D0D0D1F8DC56FE1AAE62727C6B85986A04DBB64CB013126648F0F0CF9F1C0D3A507A0DD0C8CF1C790BF407F508C5B62FC8FB480E21736D9A851A3D277F39C16ABCBB3E5A7CDFA0C9BB46FBFBF45B1BB426A00DA4DBF6C1F7B905480E217B6D8D0A1438F686C6CFC87B1BD715D6D2E97EB53535393BA3EDF2A53F00FFBF4C293B0B64EC8D2ACD07F952E802D926E15377023FBD910F4B401C52F6C8A58E4FE9FD6D6C7C2B73C7BFD44C52FFC8374C12875BD1BB691EDB657FC026CB11931EA37B24D0F6902C52F6C54EAF21C8BDBD12DC6FB366B2E7E53D7E76F4E9A3449374E789B31BD001D6F8E14407132DB339DCE90214346B598E5B9A5B5F1F5016BD7AEFD806CC13FA894020000C52FC5F0A52C2B3B71239B343509C702F84CD98277F8468C235AAC4B5DA16F8CF133E90178D7C6C418D1CAFA4762DC273DA0F885CDF5858DBCDED4B2D5D8D8786C362B3490D7DA38F81FC7981DE35FA407E05D9B12634D8B75FF15E3F218474B0F287E61939D72CA29C786FCAD03362A757DDE61871D4E9235586F6E8BE7A362BC14635CC84F840540FB4AB33DDF11F23D6C00C52F6CBA58D01EBA99DBEF2D6BD0A61D43BE3502808EDBCF4E9306280EBA8CD2A94C9932E52771F193C27555555513E2627C8C0B264F9E3C41966083BE1CF2F7F11D1063618C0F64CBC296DF3474E045A902D82277C7F87C8C7401FEF16C59A82C3BC79E2155A0F805A0E33C1BE35F63A42104D7C478B3C5EBBD63AC8E3141AA00B6481A729526BEFA61C85F607CB345E1DB2DE85D098A5F003ADC6321DF7B62748CEFC5F86670EF5F80F6947AD7A48B8CA9575A1AEFFBCBD0FA84834027E3AA1440694ADDF23E19F2DDA047480740BB4BC349D285C67D629C2A1DA0F80560DB49AD135F09F9EE79DB4B07408748B794EB1B635FA900C52F005B4F9F56D6A55B1D7D426A00DAC5E056D65D1DF2B7970314BF006C258FB5B1FEE6A0F517A03D3CDEC6FA2BA4063A37135E019496A56DAC5F9505004097A4E517000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF000000A0F805000000C52F0000008A5F00000050FC02000080E21700000014BF000000A0F805000000C52F000000287E01000040F10B000080E21700000014BF000000A0F805000000C52F000000287E01000040F10B0000008A5F00000050FC020000A0F805000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF000000287E01000040F10B0000008A5F00000050FC02000080E217000000DEA50A2900E89AC68C1973442E977BB48D97C75755558D2F5C3179F2E49CAC0100C54ACB2F40173565CA94C7E2E2C54DD9B6B1B171A18C01008A5F008A522C6AEFDEC44DEF902D0040F10B40512A2F2FBF7653B6CBE57237C81600A0F805A028FDF6B7BF9D1E17AF6F64B3E50B172E7C58B60000C52F0045ABB1B1F1E68DBC7ECBFDF7DF5F27530080E21780A295CBE56EDBE081A2ACEC1659020014BF0014B5AC4BF3ECD65E4BB33C2F58B0609A2C01008A5F008A5AD6A5B9AD599FEFD0E5190050FC02501272B9DC94365EFA93EC00008A5F004AC28D37DE98BA3E2F6DB17A79434383FBFB02008A5F004A4ACB42F7CEA953A7AE92160040F10B4029B9B6F0492E9733CB3300A0F805A0B45456563E56F8BC478F1EF7CB0A00A0F805A0A44C9A34A93A2E5E4C8F73B9DC9CF87C85AC0000A5A2420A00DAD77DF7DDB74B5D5DDDB71BCB1A4FCA35E47629A6BF7DE9D2A5E189279E08871C72C8F0B3CE3AABB198FEF6C6D0B8241772B7D4D7D75F367AF4E8D9BE890080E217A0834C9B36EDD8DAFADA1B960F595EB77CFBE53BD5F4AC29BAFF87DD3EBA5B589AFD574CBA57771F3C60D980CF0C5A38E8B3F17338FBD8638F35533500B09E6ECF00ED24B5F8D6E7EA7FFBEAFB5E1DB070D7854559F816B3DACADAB078A7C53BCCDD7BEE80FAC6FADFDC7DF7DD7BC80A00A0F8056867EBEAD67D6FD990653D56F75DDD5D36B69DB5BDD6765FBAD3D2CAD02DFC54360000C52F40FBEF514F59B1DD8A7E9BB269C59A8AD07D59F750B1CAE8938EF0E6C037FBE61A73C7C80400B0FEFC4B0A00DA47AE213764635D9DCBD7968701CF0F08DD57BCDD385CD7AB2EAC18B122ACEBBF4E12DB49EA025DD6583640260080665A7E01B65671DC980BDB4DDFEE1D856F925A81D3FAB23ABB640000C52F4091AB78ABA2CD6ECE65B565A1C7921E920400A0F80528F2E277CD86479A54AC3512050040F10B50E452B767000014BF000000A0F80528668DB9C60DBF1E1A25090040F10B50DCD6F5DDF0AD8CEAFBD44B120080E217A0B8D5F5A90BAB765FD5EA6B6B87AE0DD583AA25090040F10B50FCD60C5DD3FAFA9DD684C672DD9E010014BF0025A0C7F2D6EFE5DB63450FB34103007420379504D80ACA6ACBC2805903428F25AD17BF7DFED627F458DA23AC18B122D4F5AA93300080F63E1F9302808ED57341CF30F8D1C16D16BECDBABDD92D6CFF97ED43AFD77B6905060068675A7E013A48F9DAF2D07F56FFD063598F4D7E4F2A7AFBBFD03FF4FA7B2FADC00000ED48CB2F4007E9B5A0D76615BE85522B70CF853D251100A09D68F905E820F595F5A176BBDA77F57E000014BF009D5ABA7D510A0000B63DDD9E81CEA27B8CE363FC7B8C1DDAD85F7DBA8DF756C6D87B033FFBC8189FDDC0EB4363F46965FDA53E160080D2A0E517D8565241DA37C6BA181F8FB13AC6A331FE2BC69BAD14C6212B8EEF8EF1B91837C4F85A8CB9310E8FF14C8C17DBF85D036374DBC0DFB224C61D3146C7F860F6772523637C2CDB577E20C6777D6C00008A5F804D950ACCFE311AB2FD509AD2380D8E2DCB0ACEA362AC8AF1E36CFB0F65EFF95D8C7131DE08F9D6E1B4EDE559E1DAD20D593417B169F6A895D9F36FC7382DC6A2EC795DF6B393276354678F3F1FE30FD9EFFEA18F0D0040F10BB0391E8AB173C8B7B8A6A2B76F56D04E8B313C2B4097146C9FD6A716D8E742BE95F73F37E1779465856BB3BE05CF3F5F50F836FB6DC1E39343BE257AA7ECF72683632CF0D10100287E0136472A62F78FF1488C1121DFD29B1C1BE3E1F0766BEEAE21DFF23B332B5A53EBEDB9315E8DD13BC66E59C1FCC9901F2FFC46F6BE2105856BCB96DF1D0BFE8E3D427EBCF045314E08F9AED5CD85F73305DBFD20C605053F1F0000C52FC0463577794EE379BB153C4ECBC231BFAF85B7BB2FA72ECEDF0AF96ECAE9FD6362CC8B5195AD2FB4386CB8E5B7D9EC2C4E0FF996DD6B637C35E4C712DF9B6D73608CF13196FBD8000014BF009BEBA9AC202DECF63C28468F16DB1D9FEDAF8685FCA454A925776207FE5D6932AE6B0A9E9FAAF0050050FC026C8954ECEE13F25D930F0EF92EC9A9E537CDCCFC648B6DFF1CE31B21DF1A9BE2F1901F933B77033FBF70BC6ECB6ECF43DA784F1A277C40568C1F5EB07EA08F0B0040F10BB025FB9E1DB3A236DDEA6878560CA771BD7342BE5BF2BF166C9F5A5E532BF1B090BF9D519A99794A7867B7E696D26CCEF30B9E17767BBEBB95EDD3F8E13493F4BF677F5F5FFB4A0080D2512605C03690C6EC4E0DF9B1B669CCEE922CE665C56D2A7C8FCAB6ED9EC52305FBACF362BC27E45B8093C1ADFC8EF91BF8FD0DADAC4B935E4DCAFEB637B242B93916F9C800008A9BD60C606B1B9415B67505EBFA64056E7337E5D40AFBE1909F802A7555FE75C88FC31D16F2B7463A22C62505EF1FB191DF5916367EB1EFA0186B5AAC4BF712FE661BC53500008A5F8036A556D5FFD984EDA6B678FE68561CA722764A8BD73EB5919F756F56346F4861E17B76B64C2DBEDFF7910100143FDD9E8162D35A97E58D15B6B59BF93BEAA4B96B3BE594538EADAAAAFA37990080D2A1E517802E6FD4A8511543860C195556567662C8DF377AFBECA58B64070014BF001491FADAFAB0FCF5E561FBE1DB87C686C6A675B9B2DC3BB6A95E591D2AFB56BE63DD5FAEFD4BD8EFF8FD42FFA1FD9B9EFFE9E77F0A879D7658E83BB86FD117BC43870E3DA2B1B13175733F36C62EBE2500A0F805A0C895772F0F8F5EF76838F05307865DF6DF254C1C3B311C79E69161E63D33C3B091C342EFED7A87FB7E715F38EFD6F39AB69FFDC8ECB0DD7BB60B739F9C1BDEF781F785C76F783C0C3B6C5858F0C282D0BD57F750B3BA26CCB863461839666451E5E1D4534F1DDDD0D0F0D1F8706C2C7C0734AF8F8F1B73916F0A00287E012872479F77747873C19BA1ACA22CF4DFA97FD8F7B87DC3F37F78BE69995A8107ECB4BE160C7D87F40D7F7FFEEF61D5D25561D1CB8B42CDAA9AA6D6E37E3BF40BF367CC0F77FDF4AE70C2F74E08AB97AD6E2A9C3BABB163C756565757A719C2CF8C716CAC717729A871531378D313852F00287EA1B3185F5555250B745A4F3FFD74D3CD987A0CEAD169FFC6D5CB57879DF7DF79FDF319B7CF082B16AC686ADD1D346CD03BB67D63EE1B4D45726AFDDDE723FB8487AE79282C9EBD38ECF1813DC26E87ECD654280F3F7278A7FD7F5DBA7469183366CCCC58F8EEBB81CD3658F0C67DCE04DF6CA0BDCF67A40014BFE08041517BE69967C22E3BED1276F978E71B3ABA72C9CA30F789B9E181AB1E08675C794618B0F380B06AC9AAA6D6DE6E3DBA35B5E8CEFAE3AC771E20BA5784DA35B5E195075F092F3FF472D398DFBD8FD9BBE93D977FEAF270D2252775EACFE3C9279F4CADB9FBDAE700008A5F8AC52429A0181C7CF0C1E3C3119DF36F4B9353EDFFF1FDC38C3B673415BE499FC17D9AC6F0A6F5A96BF3019F3C20DCF0D51BD6BF67CF0FEF19EEFEE9DD61C7BD760CE515E561E14B0BC3C19F39383C32F191B0F747F66E1A037CDCB78FEBB4135F8D1C3932DC76DB6D2FC6877BBF8B1F73816F36E0FC0614BFB0554C9E3C796E5C4C90093ABBB3CF3E7BFCCC41338BE6EF4D05ED1D3FBAA36902AC07AF7A309CF1CB33D6BF965A8A5F9BFE5A38E6EBC78427273F19F6386A8FA696E0D43A7CE82987366D93667DBEFD82DBC327C67DA2691C7067B3FDF6DBA7FDC73E69CC6F4D4DCDA8C6C6C6D373B9DC0971396833F63FF63D00A0F805A058BDFACCAB61970377097FFBCBDF9A26BB4AB336F7D9BECFFAD7536B6E5AFFC29F5E681A0B9C667E9EF7D779615DCDBAA622384905F1EE47EEDE348B74673669D2A4EAB8B83B452A84D7AE5D9B6E6B74622C844F8FCB9EBE0D00D03594490140D791EEEF9B5A6B97BDBA2CECB4EF4E4DEB96BDB6ACCDEDD34457CFDFF57CD8EDD0DDC2CE07EC1CEAD7D587BADABAA642B8DF8EFD3A7DE1DB5A213C65CA943B627C69E1C285FD524B705ADDD8D8B8CAB703004A9B965F802EA4CFA03EE183E77C30FCF5A6BF86834E3C288CFEEEE8A631C0637E36A6CDF7A45B1CF5E89D9FC17A970376696A114E91A4EED19D75CCEFC6DC7FFFFD75E1ED16E1AFAC59B3E603656565A7C742F8D3B1281EE0DB02008A5F008AD4A7FFFDD34DB730DA6FF47E4DCF9B27BF7AEDD9D7C203573ED0D4BADB6CE63D339B66764EB73A4A637DDF5AF45653CB6FF3ACD0CDF7FFFDE4F84F167D5EB2AED1D3528C1A35EA4B43870EFD442C8247F8C60080E2178022D5F27EBEC97B0E7E4FF8FCD59F7FC7BAFD3E9A2F909B5B79BB8AAC45F8D62C00801261CC2F0000008A5F00000050FC02000080E21700000014BF000000A0F805000000C52F000000287E01000050FC02000080E21700000014BF000000A0F805000000C52F000000287E01000040F10B0000008A5F00000014BF000000A0F805000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E217000000C52F000000287E01000040F10B0000008A5F00000050FC0214A186F286653DD6F690884EA07B75F7505F56BF52260000C52F403BAB2FAFBFA3FF8AFE0D32B1EDF55BD12F349635FE45260000C52F403BEBD9D0F35FB75BB4DDDA9EAB7B4AC636945A7D072D1CB4265793FB9A6C00008A5F807676F4D147BF5E16CA4E79CFECF7AC1DB260485311C6562E7A170D0AEF7DE9BDD515A1E2F3A3478F9E2D2B0040B30A2900683FC71F73FC1FEEBBEFBE3DFB2FEF7FED764BB63BAC7C5D799F62FAFB57AD5A155E7EF9E5B0E79E7B863E7D8AEA4F0F75E5756BEB2BEA9F0E8DE1ECE38E39EE25DF460040F10BD081520B705C7CA418FFF6AAAAAA097131FE99679EB960F2E4C9137C9A0040A9D0ED19000000C52F000000287E01000040F10B0000008A5F00000050FC02000080E21700000014BF0014182305004057532105002563B718BF8FD1903D1F15E3C1186363CC28D8EECA1853A40B0050FC02508CE6C53829C69C18C363AC8AF15C8CDAACF8FD718C33630C932A00A0ABD1ED19A0B4F4CA968517375F8CF1E518E363CC8FF1963401005D8D965F80D2F2468C81319664CFD345CE3D623C1563EF90EF1A3D22C6F352050074255A7E014ACBE8ACB8FD54F67C568CD9312ECA9EA7AED1C74A1300D0D568F905282D0F84FC98DFF9D9F3FBB3E52F0BB6B92646BFA0FB3300A0F805A00855C6B87913B65B1BE328E9020014BF0014A363627C2118CF0B00A0F80528618FC63820C6F4184363CC6D659B1E31BAC7787F8C6A29030014BF00149BE5213FE6F7A090EF023D2EC6E331FE476A0000C52F00A528B5EAFE6BB69F4F512725004057E6564700A56BD7ACE855F802008A5F29002829B7163CBE5F3A0000F2747B06282DDF09F949AFD6C47838C615318EC85EDB37C6ACE056470080E2178022B72EC68C18C3B3E797C6581CA367F6F8CC909F080B0040F10B4051FA63C8DFE2A8217BDEBB8DED2E942A0040F10B40B13A2EC66E31E6857CCBEF7829010050FC0294B2CA6C79748CFF1BF2333EA7D99F9F0EF996E143A5080050FC0250CC0687FCC456699CEFAFB3383EC6BD52030074556E7504505A5297E725D9E30905EBEFCD8AE04A290200BA222DBF00A557FC4E8BF1C31833633CD7E2F5749BA33411D61AA9020014BF0014ABDD0A1E5F1FE3F3520200A0DB334029BB5C0A000014BF00A5EE71290000C8D3ED19A0B4A47BFB5E1063DF182BDBD8E635690200BA1A2DBF00A565765600EF1963C71817B558EE1FA35A9A0080AE46CB2F4069B921DBB7A796DF19D9BA275B2C3F254D0080E2178062755D8C4362D4C5688871501BDBDD2B550080E2178062D57C5BA354F4BE251D00008A5F8052F5871857C41814E38E18EF8971708CE121DF2A9CE67A7823C607A50A0050FC0250AC3E16F2637AD3C45787C65823250000667B062835BBC59815E391906FFD9D18E3FFC4182835004057A6E517A0B4FC264655F678488C2FC6E81EE347314E0FF9C9B0DE0C6D4F860500A0F805A0D3FB48B63C2AC627633C15A336C6FFCB0A60DDA00100C52F002563518CEF173C9F2F250080E217805292BA3A5FD7C66BBF0BF9D9A0A76DE4678CAFAAAA924900280DE3A540F10B508A3E14E37B213FA9E10531A684FC58DFCF66AF4FDBC49FE3400900287E01E8B42E8C31277B9CEEEF7B578C7E311E282880DB3249FA00A06439CE03505252C15B912D2F0FF96ECEBBC6F863C8DFFE080000008ADEC742FE7EBFDD0BD6ED9C2D7F10A3528A0080AEA65C0A004A46EAD2DC27C61B315664456EEF2CBE13E399184FC7382FC6C3D20500287E0128462FC4F8708CB5317E18F2E37E0F8D918BB17B8CA531B68BF16A8CD7A40B00008062B55BB6BC365B0ECF967BC718283D004057A5E517A0B4A4F1BE7D43BEC577518C0342BE2BF490181F8DF1A81401000050EC46C618DC46CC971E0000004ADD7029000000000000000000000000000000000000000000000000000013EF7BBF00000088494441540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A068FD7FDE8CD9EF8E2563740000000049454E44AE426082, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('212511', 3, 'source', NULL, + 0x7B227265736F757263654964223A22323132353130222C2270726F70657274696573223A7B2270726F636573735F6964223A2270726F63657373222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C2270726F636573735F617574686F72223A22222C2270726F636573735F76657273696F6E223A22222C2270726F636573735F6E616D657370616365223A22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566222C22657865637574696F6E6C697374656E657273223A22222C226576656E746C697374656E657273223A22222C227369676E616C646566696E6974696F6E73223A22222C226D657373616765646566696E6974696F6E73223A22227D2C227374656E63696C223A7B226964223A2242504D4E4469616772616D227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D41453336323135452D353838452D343946332D423734332D383330454243423330344130222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E5BC80E5A78B222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D38323934394441432D433932442D344241422D393932342D314632373945353044424338227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A37392E32323232323232323232323232332C2279223A3131367D2C2275707065724C656674223A7B2278223A34392E32323232323232323232323232332C2279223A38367D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D39434334443631332D313435312D343133432D414638352D383046383839314244313934222C2270726F70657274696573223A7B226F766572726964656964223A226D616E616765222C226E616D65223A22E7BB8FE79086E5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A7B227461736B4C697374656E657273223A5B7B226576656E74223A22637265617465222C22696D706C656D656E746174696F6E223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C22636C6173734E616D65223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C2265787072657373696F6E223A22222C2264656C656761746545787072657373696F6E223A22227D5D7D7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D43423837323236392D433930412D343839342D394538382D304538384238364543384446227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3238382E32323232323232323232323232332C2279223A3134307D2C2275707065724C656674223A7B2278223A3138382E32323232323232323232323232332C2279223A36307D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D38323934394441432D433932442D344241422D393932342D314632373945353044424338222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39434334443631332D313435312D343133432D414638352D383046383839314244313934227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3138372E36303530353132333635343432382C2279223A3130302E39303833313534363834373331327D2C2275707065724C656674223A7B2278223A38302E31373533333037303739303031392C2279223A3130302E32393039303332383135323638387D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31357D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D39434334443631332D313435312D343133432D414638352D383046383839314244313934227D7D2C7B227265736F757263654964223A227369642D32323745363933372D423435362D343735432D424332332D453842383539374238354131222C2270726F70657274696573223A7B226F766572726964656964223A226872222C226E616D65223A22E4BABAE4BA8BE5AEA1E689B9222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A7B227461736B4C697374656E657273223A5B7B226576656E74223A22637265617465222C22696D706C656D656E746174696F6E223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C22636C6173734E616D65223A22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572222C2265787072657373696F6E223A22222C2264656C656761746545787072657373696F6E223A22227D5D7D7D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D37363332463035442D343046342D343145362D383039352D323634444444333541324332227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3439372E32323232323232323232323232332C2279223A3134307D2C2275707065724C656674223A7B2278223A3339372E32323232323232323232323232332C2279223A36307D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D43423837323236392D433930412D343839342D394538382D304538384238364543384446222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D32323745363933372D423435362D343735432D424332332D453842383539374238354131227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3339362E34323134343039373232323232332C2279223A3130307D2C2275707065724C656674223A7B2278223A3238392E30323330303334373232323232332C2279223A3130307D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D32323745363933372D423435362D343735432D424332332D453842383539374238354131227D7D2C7B227265736F757263654964223A227369642D42383042363037442D363646352D343834422D383041312D373935334238444445363943222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22E7BB93E69D9F222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3632382C2279223A3131347D2C2275707065724C656674223A7B2278223A3630302C2279223A38367D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D37363332463035442D343046342D343145362D383039352D323634444444333541324332222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D42383042363037442D363646352D343834422D383041312D373935334238444445363943227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3539392E393730343836313131313131312C2279223A3130307D2C2275707065724C656674223A7B2278223A3439372E37333433373439393939393939342C2279223A3130307D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D42383042363037442D363646352D343834422D383041312D373935334238444445363943227D7D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A313230302C2279223A313035307D2C2275707065724C656674223A7B2278223A302C2279223A307D7D2C227374656E63696C736574223A7B2275726C223A227374656E63696C736574732F62706D6E322E302F62706D6E322E302E6A736F6E222C226E616D657370616365223A22687474703A2F2F62336D6E2E6F72672F7374656E63696C7365742F62706D6E322E3023227D2C227373657874656E73696F6E73223A5B5D7D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('212512', 2, 'source-extra', NULL, + 0x89504E470D0A1A0A0000000D49484452000002A6000000BE0806000000E761CD40000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000000467414D410000B18E7CFB5193000000017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA793000000097048597300000EC400000EC401952B0E1B00001B104944415478DAEDDD097C54D5BDC0F1FF9D992C6C090442202C52A4802B8BA855A1202250B18A169B44C402DA67DD5ADBBEF7146D2D7EACFADADA576DA9FAEA82C56042D14FA90BE256A3E02E104411102112246058122021093373DFF9E7CE984B4C3090643299F97D3F9F6366EEDC593CDCFF9CFF3DE7DC33220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4178B2A0044366FCEB9FAC081E3675556669E5A51715CE76030914A69EE978B15908E1DB797272595AE32B7EF1B39F2D667A8156208C41040620A34E2D34F677E7FEFDE11F36B6ABA77CFCC7C41BA76FD4852533F118FA786CA69264D4CF6EF3F5ECACA4E96929249C160D0F7597575CA65E3C75FBA86DA2186400C0124A680CBA64D33EFFAE28B0BE60C18906FF5EBF7AFDADE09B49EE2E28B65F3E619871213F7CF3CFBEC594F5223C4108821A03E2F5580786D5077EE1C3FE79453EEB43232969B06D5A6525A596AEA06E9D1E33D6F49C9F7BE3F6BD60FD7CF9FBF781DB5420C811802484C11D70A0B6F1B5D5A3AE6316D5075C8B1BE9A83A9B2FD93F1F2C5DAC952B27EACECDBF96DF1FAAA25B9CB2E2AAF991213CB242DED03EFB66D174EB9FCF259CFE4E6E67E49AD1043208680300F558078535595B948871E1B6A50FDD59DE4B3B77364EFB693C55FD3A176DBC17D3D656BE1F7654FF1A9545E0BE8DCB948060D9ADF2131B1F2116A83180231049098226EAD5A75D7797E7FD7DE3A1FAE21BB3E1F2187AABA34F8D88E0DDF15DB26645A42BF7E4B3C3EDFC1C12FBFFCF277A80D6208C41040628AB864DB093FCBCC5C6A357691C6C1F25E8D3E577B7FB437082DA34F9FE7F5CF0FA8096208C41040628AB8545DDDFD0C5DCEA6D14637E8FB8646999069296969ABBA793C3593A8096208C41040628AB85459D93BBDA1797188BC2E5D3E936030E1446A82180231049098222ED976828785BFA3E4CBA7F6DFC16265106208C41040620A3424A143F9911F4FAAA092006208008929D0FABAF75F2309C9FBBFB6DDB282923EF07DB13C7E2A09208600909802ADAF63D7ED92D66FEDD7B66B43DB7B68011504104300484C81C8F1D7247F6D5B3090585B00104300484C810834A61DA4F8C3EFC99EADC31B7C6CE31B3365DF97C75351003104A095F8A80240E4C0EE7E52BC664AA3BF58A3F4F7BF8B3EB854BAF72F945E43DE106F42351507104300484C8196113894243B379D23BB8B463479E1EFDD5B87CBFED26F49E689AF494AC6A7542288216208400B61281F714D7B78766D39EDA87F8DA6B6E767E5D423FEFC22400C114300484C81266BEEC518017F02950862881802D04218CA475C1B78663E9500104300A2043DA6000000203105000000484C01000040620A000000D4C7C54F0000006D60FAF4E97DFD7EFF54CBB2C69ABBFA9369BA7E5A6753AA4CD961DB76A179EC4DAFD79BBF70E1C26D24A631E68C85975FD6B928382BB95C4E4F2EB7527D07ED044F8D48D06BDB810E96BFBA8BECAC49B13F0874F3DDFDEA4D0BDF27640000404BCBC9C9996AFE5C1FF4FBBF6B12CF86D65C4B366580796C80F93B351008FC213B3BBBC0DC7F342F2F2F97C4B49D3BEF7739BFEF506A5F9FB022D8715F1F91D253450EF6B0A5C69C9304CDE1E0A9B12C5F952474D8257D53B65A7DBB6E084CBDF8869C2F2D4BEE59F297BCFB08210000D05C26B91C60D9F643B66D4FAADD60128DA330CE3C6F9C798D6B4CA23A6BF1E2C59B484CDB9931F3B2CF4BD9224FFB8AEDD46DA345CAF5BCA38159B59A9CD6684931FB0C14291E27925A64F7CC5C21FF3BF59AAC9F275404272ECE5DBC8190020000C7222B2B2BDB63DB0F042DAB5B789BD7B6E5E41D3BE4CC6DDB64D0AE5DD2B5AA4ABA54574B6562A29425274B51D7AEF25EBF7EB22A33530E79BDE1A78DF67ABDAB737272AE8DC5DED3984D4CCFFD5DD62369AB64F6CE5162ED1829477D999726B1A6583D575BFDFBBCE35B3BF5C69CFFA6F71400001C43527AA1C7B2728326170D27A4DFDBB041267EFAA9A457547C6DFF8E3535B52573DF3E397BEBD6DA24F5F9A143E585214324E0F4B276B66DFB09939C269BE4F49158AAAB98BC2A7FCC5FB39FE8F69975D5A68B4D523AAA79FF975F8E10D930CD4EF054D97FB8F867D9B7125E0000E02892D26C93942EB14349A9269BF72C5B26D30B0B1B4C4A1BA23DA9BABF3EAF5F79F957DB4D72FAB0494EAF20318D62E7DE9D3DAFC71A99BEFE872215BD5BE6352BD345D66789CF572173A75D95733561060000BE89CE2935D9E803E1A4744869A9CC7DF5D5C392CBA3A1CFD3E79FB273A73B397DD024A743494CA3D079F7649DDE7D9375EDE62962E97CD196A4AFF7E9259260F9EDFB63E900000000AD96643D129E53AA3DA5BF5CB1A2760E6973E810FF4D6FBEE94E6E7558FF6112D328D469A767E98E51B6A7A57A4AEBD39ED32FCE968E8712ED45841B0000688C2E091514394F6FEB9C524D269B9B94BA93D31BDF7AABF6754346C7CA907ECC24A613EFC899631DB2BBEB9CD0D6A4AF7FA8A31C1F6B733ADA8BECECEC5F69B08F1B378E1F87008821209A63E5FAF00DBDD0E95887EF1BA3AF77E1FAF55FDDB76DFB9A58A8F798F9624A2AB3FF73DB18B182DED67FAFADE3A5D3C0A5C19BCDCD5C4237E2EE34C127191919E5E64BE359CBB216FAFDFE158B172F3E108D1FB6A44464DB3691D34F3F7CBBDF2FB277AF487AFAD1BD9E394996C4C4861FFBDBDF4466CE6CFCF1F03EA3478B9C78A24861A1C8F0E1CEF6CF3F1739EE380EAE788AA15EBD7A556465652DF1783CB9D11C436E0B173AC76F538FD537DF14D9BF5F64F2E4BA6DC1A088C7430CE1A862A5CAB437AF9AF6665E5363457FD12918089CABB76BAFC0DFB8B1553EE06493F02E1D3C38BC94D4689DD39A9F9F5F4462DAC626FC317B846F8374AB5DA73402F61FA76BE27AFAC7C201D05E992F8854F3E70AF3A57185D7EBDD63FE2D9E31DB16252525153CFEF8E355D1F239172C10193850E4B4D3449E7842A47B77A7517CFC7191F1E3457EF21367BFDDBB4556AF766E57563AF757AE14B9E00211FD3E1B30C06960B76E15B9ED3667BFE26273C6DCAFEEBD3A751279FF7D9173CEA9DB567F9F0F3F14B9FC72E7F68D378ABCFAAAD308EBB6E5CB1B6FB011933A9998996E6268BA89A17D2686FE65EE3F196D31E4A631A4B1D05802F8DC73871FC36FBF5D978CAA22F36DBD6C99C8534F39C73D318426D25F619A6262658A3991AB34B1F2A2B9FF687272F2AB8DC54AE867466BB3C561252592A65FECAD40AFD61FB97DBBBC5B77904E33E55E12D3B6FE9FD823D7EF1B2056242726EC1D6CFBD30BDBFF011023D24C9969BE346656555555982F8DC5E60BE15F252525CF151414F8DBEA4369EFA6F698DE7CB3C84B2FE919B439567D4ECF4A8F1E7549A9D284F58413449E7D56E4B2CB44BA741179EB2D2731D52475CC1867BFA54BEB9EF3E49322279D54D710EA459AA9A975FB141438AFABEFAF3DB4E6FB4B0E1D12D9B44964D72E91BE7DEB7A86FAF7A7418D737AB9E80C1343334C0C55E5E4E4FCC3DCFF675BC7507D1B3638230D8DB9F0422791DCBCD9399E93939DED1A4F1A031A63D75D470CA1599D221DCD9F4BB49850A931EDCDF366DB82FAB162B68D0DDF3E430FCA56A4AFEF4A4CC792984681844A19BBFB84C8BE67D90049EBF1919C4F621A7DBD40E124B557AF5E7B4C036B5242F97B5BF4023DF698C86F7EE334A40F3DE4F49A262589DC7AABD3806A43E77345609F3EE6584E70F6D1C64E135B6D20D7AC697C68515F274CA70C68E378EAA9CEFDA1439DDE5AA50DEA8E1D4ECF51B76ECEF6471F753E9BBE67D8451799CAFABBB30FE2B777C8C4CF95E6EF952686B427F525FD7DEE68E8490D4F813912EDF15413273A31A1468C70924CBD7FEEB9C4105A8C7E335F62E2E5928C8C8C4AD3DE2C37F7EFD3583149EBF0F04E03F7EC69D50F31A0ACCC7D77787BAFD498484C13F7591995E97644DFF3600FF39F803DC27C69CF2536A3569AF9C2C8367FB3CD97842E72BCA9B4B434226FAC43889A546AE3F4FAEB220F3EE8346C7FFEB3C8BC794EE376CD35221326E8959BCE7D6D74B53766FB76A7C74793D1708FA9EEA7DC3DA6DA8B73E79D4EC2ABD6AD737A62B571D5214B9D673F678EF358E7CE2283063949AFF600E93EDAA0EA67D3A151A5AFF5EB5F47B6413D70E0801043514D7B52A799389AA63164FEAD3E8B540CD5A7276A3A57BB29D78F7CFCB1D35BAA31A1B417544FF0860D3B7CBFF61E43A5A59D64D5AA55C45014D09E54132793CCCD491A2BC6574949D7AAD63D9FABF7FA3D484CA380B7DAEE78A85384CFDC7588C8B67408F9378464BBF9E218F4DE7BEFD52682ADEDACB39C796CAFBC2232638636204EB9E38EBA7DB4B7E5A69B9CC454870075EE9B0E11EAF0A0366C4DE931D5FDB521543A6D407B89B401D5B96EDAB0BAE930A5EE9F9B2B72E595CE7B4C9DEA3CA6C9B07E9E8E1D23FB6FB2D1B92080186A3F8E8F540CD5A7B1A4C3EE7A02A7C7724646C3FB69423AA281D559B427D4B526794CC4D0EBAF7F4B563B93D389A1286C72C2375A6A89A8C6E8D251EE1020318D021EBF788389917D4F7D3FCBF925873B88BF883AE62F6093986E1E3E7CF8C0487D506D2F34A10C2799DAD8E9C5197A5B1BCF7FFFDB994F1AA643809ABC8E1BE7ECABBD31EE1E539D2757BF61D5463ADC8BBA76ADF35EFADA7A3B33B36E3F6D641F78C079FC8A2BBEDE78EABE914E4AD5E0C183B5612586A22F8602B66162C6573F86468D1A35B02D3EB426A63A4FBB572FE758BEA391A34663262CDC5EEB367DBE269E7979725862DD9E6368ECD82DB279F30C62A8EDDB1BBDBCCE532F568226846AB7ED4F4A6AD5E4B4F2F09E8BAAF65EE931919806BDE2F7D4882F92C9A9793FB1C5AE5E94BF682EB11B39D9D9D94D4E4CCD974299F972784597944A4A4A5AA6F3E366CF9E1D91391F3A34FF8B5F38BD2F59597573D694368ADA38BA1BD0FACFD57972FA5C6D58B5E1D4BF7A45BE26A9EE2B84758E6AF875DCBD3D9AC4BA7B7BF4E2292D37DC70E4CFAD89F1D12E61D51C9DCD87CDCFCF2786A220864CBCE8851B41132FFA4DEA357FDB3486DCF4244DA7B78487DC350EB4B3DD9CD77C452F2A0C9F0C86E9CA164AB7E963FA3ABAD493FB386FCF31949E5E2123478E949B6FBE99188A7C7BE34E463DF563A5AAAACA9CDAC8207DB0CC9CE9B466625A967C5827E92E12D368484C93A522A14252AB239898FAAA6A4F897613BA6D2BD4AB63B936E9FA72CB4C59D4A14387574C435AD6169F4B87E6C34BC76862F9DA6B5FBFE8C22D3C6CFFC61BCE73B4674893D38A0AE74A64EDA5D1C6B2FEDC355D4BB1A1DE1E6DC48736E18773B507D6DDF8BEFBEEE1178320E6699F62C0940EAEDED1A88821B75B6E11B9D77599A90EBD4F9922F2FCF37543FABA8494165D01A3674F2716C2173FE914009D2FAA71161E7A2786700CED8DDF15279E23C58A496A0BC389E9E6B4B4165F5CDFADA86B57F7DD4212D3281048904F3A96CA77AA2378D146A71DB2CDB2DBFF01D0DE859252FD7278CA94E79393939F8B863518B537E7AEBB447AF71639FBECC67B47754D44ED4DD5354A35019D3FBF6EC999F05A8ADAF0694F8D5E70A1FBBBE9C51B61EEDE9E867A9C0E985A3A7830743217747A90162F767A80F4FD9536E4DACB14EE9942CC4B7425A3511543613A64AF8BDE0F1A54B74D93D1BBEF1619354A64EE5C6754227CDC6B0C8417D1D72453AF98D784557B4DC3EB99124338C6F6C6D7D4583149ECEB667F5D5252DEEBD74FC66ED9D26A9FEB3DF7309AC8EB24A6D170B0F8E5D994AD72C6DEC1915BC9B4DB46DB7C4D59AF13AA6D76E6AA67A6051E8F27BC145459347D3E1D62D4A5A2C24BCD2C59E20C196A63A9F34AC33D34DA23AA8DAC967003A9C3943A17353C1CA8438ADA0BA3F4A45BAF306E688171BDA25F1BC5867A79C2AB0368C21C6E74B5072ADCB3A36B3BEA851B7AC5B15E240262A8ADE90999FE7293267D7A52569F2690FA0316EFBCE31CFB6E9A406AC278FBED222FBEE86CD393C46F420CA1A562C5E7F32D0904027FD29B6BCCC1B7A763C75659645F87F1576666EAF49AF0C8E15324A651A0C341EF026B53E0579F8F970E914A4DBB1659DD63E10068877E6DCE428BCC99EA53D1FAEB3461035D9788D41F3E3C126D847FF4A3A37FBFD9B38FFC538AFA19DC9FC33DDCD8588F2E88A1B6A2276B975E7AE47D747A4C435364525244AEBA4A64D6ACA35BF49E18424BC5CAC2850BB7E5E4E41498A47642C0B2E485C183657A61CB0FB22E1B3244FC5E6F38295D110BBF46191389A91E00D366E77C9C5A648F2A8FC0F5A2DD36DA1F5935529E9FBFA888B88D2C1374BFA5161A9698481D8018723BDA5F622286D0C2B1F257536A57A17EC12490DFDDB2A545E79A16A7A6CAB343877ED55B6A92E8FF8B89B88D950328E1A0DCD5FF356BBF045BFFBD06BC6CF93C96E721C216000034242F2F6F89F953A0B7B5D7F4BE73CEA95D3AAA25E81251F79F734E205877F1EF8A9292927C12D3283B00122BECB5BD3F90565DC9B6DF6BF61BDE6AD9152B070000006835B324B484D3F69414F9E3E8D1CD4E4E35293549AEFD454A8A37B4E980C94F7F5C5050E027318D32965FA6F77E47AA3A6FAF5DFEA4C575DE2145196B3C4363E900000000AD43E77CDAB67DA3B9599B336C484F97B9E79D573B0C7F2CF479B74F9810589B91F1D532892627B9362F2F6F7DACD49927D60E00EB90FD93414BACFD89FB5AF6B593CA65C790459260D9F2CB583A00000040EB59B468918EB0FE389C9C6ACFE99CC99365E1F0E1F517C76F94EE973F6C98DC3279B2BBA754570C98637292DC58AA2F5F2C1E00D9D9D9C9272D907B375E2A5D2A32A5D9D3D93B9758EB86FCC34E15BF3D2F6F517E2E610600009A2A3F3FFFF1ACAC2CBDB2FF41CBB2BAEA9CD3E7860EADBD286A5849899C515C2C03F7EC91AE5555B5BF12A5C3F59A8CEAE2F92BFBF695957DFA04ABBD5EED4C0CF794EA7AAA379A9CE7F158AB2B5F2C1F004317590F947C47766D3F53328FB16FD8DFFF6579B9E747F648B1E596FC183C00000040EB0B759CBD6312D387751929DDA609EAAACCCCDAF20DDC59CC0A9D5218ABA3B7BE583F00FABC633D9CB1DA0E6C99248965C74B46539F9FF689FDC680973D291EBFDDC51C00E3F2F219BE070000C72EB4CEE8F9263F9966728B6B4C823AEE2872B115A63CBA63C78EDC58BECEC5172F07C0B79FB1AE09786D39D05B8A779F2C29077ADA9DFC5D24239068F9BC35B2DB77400E74DE21C53DD64975972FAC4112D0B313FBFE583F00000040C4F313FD819EA7A64F9FDE37180C4E3309AAFE08F528537A99A2134F75D85FAFE6D755F9F557269F8A85C5F3E33E316DE80048DD169C9652AC0780A507803F54079D4CD15F402E730E003B6E0E000000D036F40782CC9FFB4205F192987200000000443F0F55000000101159A61CE7BAAF1D84BF6FC2F396C54BCE46620A00001019634CF9DC755FA714760CDD0E2F6FA9734C4F0B25B0E152634A3FD7FDBB4CE9168B15E48BE38363B029E9A6BCE9DA7653E8AC247C05FE99A69C250CFD030080E6196ECAFC50FE3138B42D68CA00532E30E574531E30A5D49495A184B532B45F852BA1D515866E8BD54A8AF5C454CF4CBA9832DE94BDA6AC0E9D89CC0EFDE3EFAFB7FFB07A49E845A1FD0000008E95F6868E3065A13843F7F798B233F49826A54B43C5ED5953FE18BA9D19DA4FCD34253B94D49298B633CB437FBB9B5262CA2BA6740E25AAEE03A04FE880E91BFA87D7B397BCD073BE30657228B17D97D8020000472939945CCE31E56953768B33DF543BC8B45774AA381D694FB89EF3A52B5799E1BA7D4AAC26A5F1909836E50CA626947CEA01A1BF675B60CAEDA1339AA75D6728DAFD7EA9D40DF303000034C53E531E136764767928FF7821B43D9C70A6D77B4ECF500EA2CFE96FCA2C717A59CF8AE58A8AE5C4F444530686CE2AC2FFA889A1B39601A17FEC8B4D992B4ECFE8845022AABDA96F859E5B2DCE1CD49AD0D9CD6E620B00001C835C53FE29CE34411DC1FD2F53DE0E3DA6B989F684DEE1DA5F87F1DF17A767756B281759EA7A0E89693BB32E54944E320E5FD4E41ECA770FE7A78712543D13F95DE8AC242394B04A28B965281F00001C8B4952F7C33E43433947380FD1DCA453BDFDFF6DCAFDA6FCC29479A6BC64CAFF88D3A14662DACE9D24DF7C65BDF6ACEA4F8269D7F9BE50325B2475F3542F21A60000C031E81E4A3035BFD02BEE5F09E515E1CEAFE47AFB6B67D9D5A6DC22CE352E4AAFD6FF9B38530034697D2494DC9298B633BACED7F626ECA7DDE73F15679DB0D389210000D042742AE022533E746DDB164A50556757EEA149ACF6A8DEE3DAB726F477B32953C419C52D89C58A8A87C4F43FC4199AFF267A76A2DDE87A65DC0DE20CE59F2DCE4551F152570000A0757C58EFFE7CD7ED03A6BCE64A6297D7DB7796EBB65EC51FB3F34C6339D9D2330E5D205FE76754B9B66BF2B9B181A4F42CD7D9C9BDE24C4ED649C7E1ABF00712530000A00D04E3E57F349613533DE358DAC076ED09FD73BD6D3A6FE3997ADBEADF9F475C000000B41E0F5580786259FE403098484544C3E97FEDBF831DA02688211043008929E2526262D9E6F2F213A88828505E3EA4C4A439ABA9096208C41040628AB864DBBEE7CBCA4E0952136D6FE7CEB1BA60740135410C811802484C1197AAAB53FF5E5C3CB5D2B6BD5446DBF297944CD60B149FA62A88211043008929E2D2C489130BFDFEE4F7B76EBDA49ADA683B1B365CB73C10482A3AFFFCF3DFA13688211043008929E296DF9F70DD679FCD3C585E7E02170DB4817DFBBEBDA9B878EA89C160F0E7D4063104620870632C067127373777D79557CE5EB973E7D8C9DDBAADE9909CBC8B13B48835A8833FFEE083BF249BAF9E6B274E9CB8821A2186400C0124A6887B0B162CD83C63C6D585DBB74FBCC8B67DC5DDBAADED6E593615D37A0EAC5BF7CBA5EBD7FF748836A813264C788E2A2186400C01F5595401E2D98B2FBE38D4E3F1FCC9EBAD19DEB3E71B9B32320AD2D3D2561FEFF1D4F013B4CD140C2696EFD933ECA39292F37797968E19120CFA8A75E871D2A4491F513BC410882180C41468C44B2FBD34DCB2AC1F989BE34C19654A32B5D26C7E530AC559CEE6692ED22086400C010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022E0FF0121C2023A02FEDB030000000049454E44AE426082, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('247534', 1, '请假流程.bpmn20.xml', '247533', + 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0A20203C70726F636573732069643D2270726F636573735F6C6561766522206E616D653D22E8AFB7E58187E6B581E7A88B2220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D22737461727422206E616D653D227374617274223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D22757365723122206E616D653D22E7BB8FE79086E5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572223E3C2F61637469766974693A7461736B4C697374656E65723E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C73657175656E6365466C6F772069643D227369642D30443235384332342D314631392D343233332D413937362D4130443843423944414541432220736F757263655265663D22737461727422207461726765745265663D227573657231223E3C2F73657175656E6365466C6F773E0A202020203C757365725461736B2069643D22757365723222206E616D653D22E4BABAE4BA8BE5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572223E3C2F61637469766974693A7461736B4C697374656E65723E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C6578636C7573697665476174657761792069643D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D227369642D33334642463234452D464537302D343730412D394442352D3942313838314531333834372220736F757263655265663D22757365723222207461726765745265663D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E3C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E3C2F6578636C7573697665476174657761793E0A202020203C757365725461736B2069643D227573657222206E616D653D22E8B083E695B4223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4C656176654C697374656E6572496D706C223E3C2F61637469766974693A7461736B4C697374656E65723E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22656E6422206E616D653D22656E64223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D227369642D34373638373538312D333535422D343335342D383433432D43333034323333323836414622206E616D653D22E5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D46423539344242452D383030352D344544432D423343382D39373831454432323643393522206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D39394343413337462D413233352D343835332D383437322D44453233334144324544333222206E616D653D22E9878DE696B0E794B3E8AFB72220736F757263655265663D227573657222207461726765745265663D227573657231223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D35313046453036322D433042432D343643382D394231372D38413338303732413242433622206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73756250726F636573732069643D226368696C6422206E616D653D2273756250726F63657373223E0A2020202020203C73746172744576656E742069643D22737374617274223E3C2F73746172744576656E743E0A2020202020203C757365725461736B2069643D22616C6C6D616E6167657222206E616D653D22E680BBE7BB8FE79086E5AEA1E689B9223E0A20202020202020203C657874656E73696F6E456C656D656E74733E0A202020202020202020203C61637469766974693A7461736B4C697374656E6572206576656E743D226372656174652220636C6173733D22636F6D2E6C656E2E6163746C697374656E65722E4163744E6F64654C697374656E6572223E3C2F61637469766974693A7461736B4C697374656E65723E0A20202020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C2F757365725461736B3E0A2020202020203C656E644576656E742069643D2273656E6422206E616D653D22656E64223E3C2F656E644576656E743E0A2020202020203C73657175656E6365466C6F772069643D227369642D46333946364639322D463330412D344630452D423946382D45304444454231313530363522206E616D653D22E5AEA1E6A0B82220736F757263655265663D22616C6C6D616E6167657222207461726765745265663D2273656E64223E0A20202020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A2020202020203C2F73657175656E6365466C6F773E0A2020202020203C73657175656E6365466C6F772069643D227369642D33453941414432332D343444412D344138352D383242442D4436433833304134433439382220736F757263655265663D2273737461727422207461726765745265663D22616C6C6D616E61676572223E3C2F73657175656E6365466C6F773E0A202020203C2F73756250726F636573733E0A202020203C73657175656E6365466C6F772069643D227369642D41453541454438342D303734362D343738372D393836462D36413739323743333443333422206E616D653D22E5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D227573657232223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E3C2F6578636C7573697665476174657761793E0A202020203C73657175656E6365466C6F772069643D227369642D30344339463239412D304242352D343639312D383034432D37363445344530413237313622206E616D653D22E58F96E6B688E8AFB7E581872220736F757263655265663D227573657222207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D37463032463244352D413642412D343233342D413732342D3346383938443233354134422220736F757263655265663D226368696C6422207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D38344442433035362D303639312D343733452D383243462D44333235454637333641373222206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30413541464638362D414541342D343231322D423146342D3932373541343430364332442220736F757263655265663D22757365723122207461726765745265663D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30443039333043392D394241312D344636382D383545412D33383445313642343039413022206E616D653D22E5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D226368696C64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F70726F636573735F6C65617665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2270726F636573735F6C65617665222069643D2242504D4E506C616E655F70726F636573735F6C65617665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227374617274222069643D2242504D4E53686170655F7374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D2233302E302220793D223232382E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657231222069643D2242504D4E53686170655F7573657231223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939342220783D223132302E302220793D223230332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657232222069643D2242504D4E53686170655F7573657232223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2237392E3939393939393939393939393937222077696474683D2239392E39393939393939393939393938392220783D223531302E30393038383236333634343631372220793D223230332E3730333730333130343131343233223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222069643D2242504D4E53686170655F7369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223731352E353435343431333138323233312220793D223232332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222069643D2242504D4E53686170655F7369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223337302E353435343431333138323233312220793D223232332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2275736572222069643D2242504D4E53686170655F75736572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E30303030303030303030303032332220783D223334302E3534353434313331383232332220793D223336382E37303337303636343732373932223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22656E64222069643D2242504D4E53686170655F656E64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232382E302220783D223838302E353435343431333138323233322220793D223232392E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D226368696C64222069643D2242504D4E53686170655F6368696C64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D223136312E3130323038303930333236363036222077696474683D223238342E36303837323832303738373235362220783D223234382E32343130373732313432383638362220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22737374617274222069643D2242504D4E53686170655F737374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2232392E39393939393939393939393939372220783D223236362E373539353935363738323937332220793D2237312E3035313034303435313633333033223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22616C6C6D616E61676572222069643D2242504D4E53686170655F616C6C6D616E61676572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939372220783D223333382E32343130373732313432383638362220793D2234362E3035313034303435313633333033223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2273656E64222069643D2242504D4E53686170655F73656E64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232372E39393939393939393939393939372220783D223436352E302220793D2237322E3035313034303435313633333033223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222069643D2242504D4E53686170655F7369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223236342E39393939393939393939393939342220793D223232332E37303337303339393831383338223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136222069643D2242504D4E456467655F7369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223434382E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223439342E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223439342E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223235372E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732222069643D2242504D4E456467655F7369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223330342E353930383639353736373134332220793D223234342E3131323833343432313436393437223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223337302E363430313837323338373936332220793D223234332E373938343439393138373537223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D46333946364639322D463330412D344630452D423946382D453044444542313135303635222069643D2242504D4E456467655F7369642D46333946364639322D463330412D344630452D423946382D453044444542313135303635223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223433382E32343130373732313432383638362220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223436352E302220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336222069643D2242504D4E456467655F7369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E393837353134343839383930352220793D223236332E32363136333038323635313634223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E36363730323138363333373736372220793D223336382E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143222069643D2242504D4E456467655F7369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2236302E302220793D223234332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223132302E302220793D223234332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437222069643D2242504D4E456467655F7369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223631302E3039303838323633363434362220793D223234332E3834353738353439363831313337223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223731352E393838343436343031363631392220793D223234342E3134363730393038313632323632223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146222069643D2242504D4E456467655F7369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735352E313035353637393030353031362220793D223234342E3134333537373431353930353333223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E3534353531303937373036392220793D223234332E3734373836373831363239343733223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130222069643D2242504D4E456467655F7369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223238342E3637393931353936313034392220793D223232342E3032333738383033373133343735223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223235332E33343530333333323234383436352220793D223136312E3130323038303930333236363036223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442222069643D2242504D4E456467655F7369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223136312E3130323038303930333236363036223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E353435343431333138323233312220793D223232332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332222069643D2242504D4E456467655F7369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223334302E3534353434313331383232332220793D223430382E37303337303636343732373933223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223430382E37303337303636343732373933223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223238332E37303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935222069643D2242504D4E456467655F7369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223236332E32303337303339393831383338223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223430382E37303337303636343732373932223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E35343534343133313832323332352220793D223430382E3730333730363634373237393236223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334222069643D2242504D4E456467655F7369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223431302E31303138303630343037373735352220793D223234342E3134373333393237353632393338223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223531302E30393038383236333634343631372220793D223234332E3835313539323539373636343134223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244222069643D2242504D4E456467655F7369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231392E39393939393939393939393939342220793D223234332E393230313534323134363334223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223236352E343133303433343738323630382220793D223234342E31313637343734373634343437223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938222069643D2242504D4E456467655F7369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223239362E373539353935363738323937332220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333382E32343130373732313432383638362220793D2238362E3035313034303435313633333033223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, + 0); +INSERT INTO `act_ge_bytearray` +VALUES ('247535', 1, '请假流程.process_leave.png', '247533', + 0x89504E470D0A1A0A0000000D4948445200000396000001F80806000000316A727D00004B3D4944415478DAEDDD09985C559D37E0282232A3830B88382AE038E0363A220CA2A3068619409045A8AEBED59DA4D982B208B20884C1B083AC437001648DC8221F46C8B048164242482420888160420264212121040890B0DEEF9C9ABA6DA5D3DDE9AE7477AABADEF779CE53D55DD5DDC9A97BCFF9FFEE3A6000D0AF5D71C5159BEFBFFFFE0F6FBDF5D6AF872F534DD3B49E6A5B6EB9E55B43860C993176ECD82F196D0100FAA961C3866DBADD76DBBDB6C71E7BA4D3A64D4B57AC589102F48437DF7C33FDCB5FFE92EEB7DF7EE917BEF085D7E3462CA32E00403FB4EFBEFB8E8FA112A037C57019C69BA9465D00807E68F3CD377F31EEA904E84D3366CC483FF5A94FAD34EA0200F44F0E7F05FAE4B0D801FF77DE250000FD315802F405C1120040B004102C0100E8FB60592A24D3C6C646553508968225008060597931F9894F7C62B5EF0F1E3CB83578AEBFFEFAE957BFFAD5F4B1C71E537D836009008060D9B56059FEDADB6FBF9D0E1B362C1DE0D05C102C0100E8BFC1F2FAEBAF4FB7D8628B74BDF5D66BDDD3181D74D041C5E73BEFBC73FAFAEBAFAFF25A564C1E76D861E9E73EF7B9E2F34B2EB9A4DD6079CC31C7B4FE5CF9EFB9E28A2B56F99D8B172F8EF7C36BFDDE11471C517C7FE6A5975E4A9B9B9B5B5F1F356A54EB6BF16777DB6DB7D6D7E2D76BFAFFADE93540B00400102CBB5714AE71AFE46F7FFBDBE2D70F3CF0C02A3F17C3E371C71DB7CAEFF8F8C73FDEFAFA17BEF085F4CF7FFE73BB7FF3F9E79F5FED7BF136293118B6FD770D1D3AB4F8F5B3CF3E5B0C956D436EF6F559679DD5E16BDDF9BF038225008060D945F3E7CF6F3D5C35EEB99B3B776EBBC1320B73E5C1B26DE8ECCA61B2D9EB1FFDE84757FBDEBFFDDBBFB57EDDDEEFDC7AEBADDBFD7D5FFFFAD75B4362DBB0D8D9FFAFB3D700C1120040B0AC40477BFBE25EC933CE38A3F8FCC1071F5C6D6F5F3C6CB5BBC172A38D366A77EF61BCE17A3CECB56D40CC0E837DE185178AAF8F1C39B2DD7F676C1D5D2CA8EDFFAFABAF018225008060D989DD77DFBD35987DEC631F4BAFBBEEBAD6D76288CC5E8BE7509687BDF818DF9B7D6FF6ECD9C5EF975F1576F9F2E5ABFCADF8F580367B16B3F328E3E1AFFBECB34FEBF78F3CF2C8E261B1E57B17070E1CB8DADF8B162D5A94EEB2CB2EADAF4D9C38B14BFFBFCE5E03044B0000C11240B0040040B004044B0000044B40B0040040B004102C0100044B00C1120000C112102C0100102C01C1120000C11240B00400102C01044B0000044B40B0040040B004044B0000044B40B034E4020008960082250000822520580200205802822500008225205802002058020896000008968060090080600908960000089680600900806009205802000896008225000082252058020020580282250000822580600900205802089600000896806009008060090896000008960082250080600920580200205802822500008265ED9A3B776E3A65CA9474DCB871E9983163B43E6C63C78E4D274E9C98CE9A35CB82285802002058D66EA89C346952BA78F1E2F4F5D75FD7D6415BB264493A61C28474E6CC991648C1120000C1B2F6C43D9542657584CBB8C718C1120000C1B2E6C43023D855478B87C6225802002058D69C1866843AC152B0142C0100044B7A3D58BEF2E2C274CEB4ABD3C7C69E566CF179FC9E4028580A960000089682E51A03CFF2650BD2E97F3839FDF3EDC7ADD2E2F7E26B42A1602958020020580A969DB6798FDDB65AA8CCDAFCC7460B8582A560090080602958761E7866DCF3D30E83657C4D28142C054B0000044BC1B2D3367DCC291D06CBF89A5028580A960000089682A56029580A9600000896F45EB08C5781ED2858C6D78442C152B0040040B0142C3B6DB326FFACC360195F130A054BC1120000C152B0ECB42D5DF0683AFDEEE1AB1F061BBE175F130A054BC1120000C152B05C637BEAC191AB05CBF83D8150B0142C0100102C05CB35879E952BD359F7FF72F5C360C3F7E26B42A1602958020020580A961DB6E5CB16A433275FD2E13996F1B5F81EC150B0142C0100102C05CBD5F6522E9C353EFDCB5DC33A0C95598BEF89EFB5F752B0142C0100102C05CB2EEDA5B4F752B0142C0100102CE9345876652F65677B2F8544C152B0040040B0ACF3605969A8CC9A9028580A9600000896CEB1D4044BC1120000C112C152B044B0040040B52B580A9608960000089682A526580A960000D449B09C33674E7AF5D557A7A79D765A7AC41147A443860C491B1B1BD3418306A5871D76587AE69967165F7FE69967044BAD6E82E5ECD9B3D38B2EBA283DF4D043D3E6E6E6344992E27A115B535353FAFDEF7F3F3DF7DC738BEF132C0100A8DB6079F3CD37A7279E78627AE49147A6975D76593A75EAD474C18205E98A152B8AAFC7C7C58B17A70F3DF4507AEDB5D7A6471D75543A7CF8F0E2CF09965A7F0D9637DC70437AD04107AD1224D7D40E3CF0C0F4CA2BAF142C0100A89F60F9C4134FA4C71D775C7AECB1C71643E35B6FBDD5E59F7DE49147D261C38615DB8C1933044BADDF04CBB85E1C7CF0C15D0E93EDB5FDF7DF3F7DF4D147054B0000FA77B01C397264B1781E3D7A74B702655B77DD7557F150C05B6EB945B0D46A3E58C643BD0B85C22A21311EEE7AF6D967A7E3C78F4FE7CE9D9BBEFCF2CBC5F7BEFAEAABC53DFB93274F2E1E2A1B0F192FFFB9B8A7B396F65E0A9600008265B7C41018CF179B3973668FFCBEA79F7EBA784E66AD1E1A2B580A96D16F7FFBDBD5CE9FBCEEBAEB8A878177C5B265CB8AEF8F3F571E307FF18B5F08960000F4AF6079CD35D7144365578BE5AE8ABFAF56C3A5602958C63D95E5A1F2E8A38F2EEE9DAC44FCB978887979B8AC853D978225008060D9E573C70E38E0801EDB53D9DE9ECB430E39A4E6CE2D132CEB3B58C6F5A27C2F63BC305576B86BA5E261B2F12ACAE587C53EFCF0C382250000B51F2CE32D436EBBEDB65E2D4EE33997C71F7FBC60A9D54CB02CBF504FDC53B9B6A1B23C5C96EFB98C17F4112C0100A8E960196F9D106F27F2C61B6FF47A811A83E5F5D75F2F586A551F2CE37A517E4E65A587BF7676586CF9DED06A3E2456B00400102CD7E8F0C30F2FDE52A42FC443614F38E104C152EB956019DFD753E27D2AB3D0172FBCD3DBE1B59AF75A0A9600008265A766CF9E5D3CDC6F6D6E2BD25D471D7554AF9DCBD99DD070F7DD770B96FD28583EFBECB3C5DB7BC410D859C0ECCA671FD78BEC823D71AFE2D2A54B7B65398C578B2DBF15493CA753B00400A0E68265BCC7DECF7FFEF33E2D5263E17FE9A597AED342392BE463C818376E9C6059C3C1325E7578C58A15AD5FAF5CB932BDE9A69BD2471E79A4E2CF3EAE17D9FBCE3DF7DC5E5D16FBF26F09960000F44AB08CB701993A756A9F16A9F1B0DB934E3AA92A8265D6E25EDBF6F6620996D51B2CDF7CF3CD4E6F8DF3D4534FA5BFFAD5AF8A17CAE9EE671F6FBB93BD3E61C2845E5D16E35ED6EC6FC52B270B960000D45CB01C326448BA70E1C23E2D526318887B8BAA295896EFC52A0F1982657506CB78D8EBDB6FBFBDC6CFF99D77DE295E8DF88E3BEEE8D667DFDCDCDCFAFD9EBE684F5B0B162C68FD5B854241B00400A0F682652C64CB0F23EC0BF1EFC5C2BD1A8365F95EAC7898A460595DC172F9F2E5E98B2FBED8EDCFFB85175E48AFBAEAAA6220EDCA675FFE754FDD62A423718F6AF9DF132C0100A8B960B9AE0AD93515F7D5D204CBEA69A3468D4A478C1851BCE04D2517C9893F5BC932D0D7EB8360090040CD05CB75B5C7325E69B31AF758C643837FFBDBDFB65E55B4378365BCF268F9EF8F9FE999679ED9EE7BE3219AF1F5B877EBF6DB6F4F070F1E9CDE7AEBADE9EEBBEF9EB6B4B4F4E8BF2BFE9DF3CF3F7F8DEF39F6D8638BCFE38572E2679A7D3FBB2A6B6FECB18C7D76CC31C7A4F7DF7F7F973FEBB8C7F1473FFA51FAFDEF7FBF78D5D5AE7CF6D91561EDB1142C010004CB2E88B73A5817E7581E78E08155152CDB06CABE3AC7327E8E53A64C29EE518BCFE3855C3A7ADF85175E580C215988CBBE7FE28927B67EBD68D1A274A79D762A86CE18F076D86187E2FF2F7E9D85D1912347A61B6EB861EBCFDC7BEFBDABBCBED9669BA5DFFCE6378BCF63BBE5965BD22DB7DC72B57FCF15575CD1FA3CFECEEC790C9ABD7D8E65BCFFE3E9A79FDEE9DECB787E65FCB7C4C3AEE3FBBBF3D93BC752B00400102CBB215EFD72E2C4897D7E55D8B8D7A91A8265DCDB17434747F73DECAD60397DFAF46260DB64934D8AE16D830D36287EFDF9CF7FBE1820DB1E029AFD3BE2E77EFCF1C7B73EDF679F7D56FBDD317CC6D7E29ECDEC7DF1FCC2F818C3630C9C9FFCE427570989E561307E1D435BF6F5FAEBAFDF1A5EE39556E3BF37BEE75BDFFA563150C6E7714F60F6B38F3EFA68F1F1E28B2FEED5ABC2C650396CD8B0F477BFFBDD6A17F2896170FFFDF74F4F38E184F4F9E79FEFF667EFAAB08225008060D90DF11E7AF1B0C7BE14834DFCBBEB52477B28FB2A58DE79E79DC5C0D6F6FB1B6DB451BAD75E7BB57E9D85B4183A0794ED9D8CCFE3EF8881303EBFE79E7B56DBA3180360F63C06D9F878FDF5D7172F60139FCF9B37AFF87ABC204EBC5051B68732BE76C00107149FC7E01AC3687B7B50CBF7586EBAE9A6AD87EBC6BD9B712F685FDDC7326E18F9F18F7F9CCE9933A7B837F7A73FFD69313476B4C1A42B9FBDFB580A960000826537C473D662A1FDD65B6FF559917AF8E18717F770D582751D2CE35EB9182EE3E1B2DB6CB34D3120C6F7C4AFB3F73CF3CC33C5C23FEED97CE9A5975AC3610C7E975C7249F1F9CD37DFDCE11ECB2C1CC6F7B40DA5F1DF19FF5E7BC132EEB17CF0C1075B0FE7CDBE1FFF665FDCC7B25C7CFD820B2E2886B3F8B8A60D065D592FB2B017CF075EBA7469AF2C5FF1F32D3FECB65AD70BC1120040B05CA378FFBE78385E5F8821E9073FF8415A2B7A3358C6CF305E502686BDECFCC6F8BDA38E3A6AB5C366E36B3134C620173FAB6CEF6276186DB6F730DB03197F4FDC839885BD6C2F65DC63195F9F356BD66A41F11BDFF8C66A7B2CE3F9966DF7A0C68BF6C4F75C7EF9E5ED86D2BE38C7B2B380D993EB4516F86218EF0DF150DCEC6FC44377AB95600900205876A9B88D45745FECB58CA1E4CA2BAFACFB60F9F8E38F175B16C64E3DF5D4E2F318F8E6CF9FBF5AE88B6DD2A449C5433DE339946B0A7103CAF63AC6809905C6189076D96597D50E6FED6AB08C17078A7BF306B439D4B63C586687EFB6FD7FF445B0ECADD017F75AF6F4457CE2EF8BBF37FB1BD5BC5E08960000826597C4ABB45E7BEDB5BD5A9CDE71C71DE9D0A1437B74AF522D06CB786E630C7BF1D0D61FFEF087C53D9159108BA12D1E221B837EDB9F8B812D5EF1B5A38BEE94B70F7DE843C5DF1FCF758CBF3F7B7FDC63D9D11ED4F642693C34330BC09D9D6319FF6DD961B1F1023F3168965FBDB6168365B65E64C1EFE8A38FEEB15B8FC48D03F10256E57B2BAB79BD102C010004CB2E890122DEEA208688DEF0F4D34F172FA8F2F0C30FA7B5A4A783653C576F40E9B62231FCC5F3EBCA5F2FBF6D47F9F993F16AB131B095DFC3327E7FDF7DF76D7D1E4364B63771ABADB62A1EFE1A836876FB9101A5732CB3E7F182406BDADBD9B6C5C368B3436DAFB9E69A55F6A8C620191F870F1FBEDA6D506A3558C6F5A2FC9E96F1FFB6B6E13286CA33CE38A3F577C6DF5FEDEB85600900205876D9D5575FDD2BF7B58CF7AD8C7BE06AE910D8DE3E1436BB8D4816CAE2B996F15613034A7BFF3AFA99AEEC058CC1AF3BEFEF4EB08C2DBB426DF9057BCA2F26D45B6D5D04CB6CBD28BFEF65DC7359E961B1F1E7CAF75456FB21B082250080605991CB2EBBACB8172D5E30A6A7F654C6C309CF3AEBACB416F566B0D46A235866EB4579188CE746C6F355E3555DBB7AF5D778CE66F93995B1D5CA7A21580200089615EDA18987E7C5431DD7E6823EA3478F2EEE018D4579AD122C05CB8EF65C660133DE7B72C28409C5BD91D961B2F170D7050B16140F791E316244F1963EE53F17D7AF5A5A2F044B0000C1B2E273CBE2E1ABF1A222F7DD775FB77E369E2F76C4114714AF2C5A6BE7540A96826557D68BB601B33B2DAE53B5B65E0896000082E55AF9F5AF7F5D2CA4E3E1B1F18223F7DC734FF1EAA5AFBDF65AF1F5780E5FBC05C51FFFF8C7F4E28B2F2E16CD3150C6BD31B574F557C152B0AC64BDE86EA0ACD5F542B00400102C7B44BCDAE805175C901E7AE8A1AB9D2716AF261B2F3C130F098C7B74FA13C152B0B45E08960000822582A56089600900806029586A82A5600900806029586A82A5600900806029586A82A56009008060896029582258020020580A9682258225000082A560A909968225000082A560A9099682250000822582A56089600900205822580A9608960000089682A526580A960000089682A526580A9600000896089682258225008060896029582258020020580A969A602958020020580A969A6029580200205822580A9608960000822582A56089600900806029586A82A5600900806029586A82A5600900806029586A82A560090080604925C68D1B27D4099682A5600900205852B9499326A58B172F16ECD6715BB4685131E4235802002058D69CD9B367A713264C489F7BEE39016F1D87CA9933675A20054B000004CBDA0D97E3C78F2F1E8AA9F57D132A054B0000044B40B0040040B004044B0000044B00C1120000C112102C0100102C01C1120000C112102C0100102C01044B0000044B40B0040040B004044B0000044B40B0040040B004102C0100044B00C1120000C112102C0100102C01C1120000C11240B00400102C01044B0000044B40B0040040B004044B0000044B40B0142C0100044B00C1120000C112102C0100102C01C1120000C112102C0100102C01044B0000044B40B0040040B004044B0000044B40B0040040B004102C0100044B00C1120000C112102C01005807C172C58A152A5EA057BDF9E69B822500407FB5E9A69B2E9A366D9AAA17E8553366CC4837D9649365465D00807EE8C31FFEF0B93BEFBCF32BCA5EA037EDB9E79EAF7DF4A31FFD99511700A07F7AFFFAEBAFFFF0F6DB6F3FFF81071E783D1EAE46EF58B972A54EA0EE0E7F9D3163C65B3BEEB8E3820D36D860761C6F0CB90000FD385C8676CABBDEF5AE2706FCDF39505A0FB6F7BFFFFDE90E3BEC10F7D8A4EBADB75EBFF97F353636FA7CB535B677BFFBDD31509E27540200400572B9DCFB9324393B04B015F97CFED5D08EEE4FFFBF52B0040000A0378410B947085E4FC5F0155BF8FAE5534E39E5DD82250000009D2A140AFF1A02D7A42C509605CBD1FDEDFF2A58020000F4A02449360E41EB9278D86BDB50596AA70B960000007414B006E6F3F9651D04CA6C8FE5E182250000001D4A92E4A010B41676142C1B1A1A76162C010000E8542E97FB58085B7776B0C7F28B82250000005D0D5CC3437BAB3C58C6D02958020000B046F1DE9521703DDDD0D0B06F78FC7529582EE9A7015AB0040000E885B015AF0C7B65D9D7FBC5C363054B000000D6A8A1A1E11B216CCD6F6969F960F9F7070E1CF81EC1120000804EEDB6DB6E1B84A03523B47DEAE5FF2C58020000F46CC83A33B49BEBECFF2C58020000F4847C3EFFE510B29E4B926453C1120000806EC9E572EB8580F560682DF5F67F172C0100007A4092243F0E01EB0FF5F87F172C010000D652A150F8E7788FCAD0B6102C010000E8AE772549726F08573FACD70E102C010000D62E547D3FB4FB4F39E594770B96000000744B5353D32742A85A9CCFE73F57E7E15AB0040000A830508D0EED64FD2058020000745B128440F5E7A14387AE2F580A96000000DD0D951B8730B530B46DF58660090000504990FA4D68E7E909C1120000A09210B57B68B372B9DC867A43B0040000E896A6A6A67F08216A6E6803F58660090000504980FA656897E909C1120000A0DB1A1A1ABE1502D4BC5C2EB791DE102C010000BAA5A5A5E57D213CCD0C6D4FBD215802000054129CCE09ED463D2158020000745B3E9FDF2604A745B95C6E13BD215802000074CBC08103DF1382E5C3499234EB0DC1120000A092C0342CB43BF48460090000D06DB95C6EEB10989684C74FE90DC1120000A0BBDE15C2D27DA11DA62B044B0000804A82D261A14D8A01536F0896000000DD120F7D2D1D02BBB5DE102C0100002A094977264972A29E102C0100002A094883E2ED45E26D46F48660090000D02D83060DFA6808488B42FB8ADE102C0100002A094737254972B69E102C0100580B699ABE67CE9C39374F9D3AF5ED71E3C6A563C68CD1FAB08D1D3B369D3871E2F3A1355B1AFB563E9FDF2B84A3BFB6B4B4BC4F6F08969817CC0B00B01662F13069D2A474F1E2C5E9EBAFBFAEAD83B664C992F4DE7BEF7D291413FB5922FB462E97DB2804A379A17D536F08969817CC0B00B096E21669C543551411AF8F1933668625B2CF42D1E5A1FD424F08969817CC0B00D003E2614E26F0EA68A18078D312D9FB1A1A1A760CA1E8993DF7DCF3037A43B0C4BC605E00801E10CFE73079574D01A150EF65B95C6EC310889E2C140ADFD11B8225E605F30200F47101F1CA8B0BD339D3AE4E1F1B7B5AB1C5E7F17B267E05442DC9E7F3E72749729D9E102C312F981700A08F0B88E5CB16A4D3FF7072FAE7DB8F5BA5C5EFC5D74CFE0A881A0995DB8530B43004CB8DF586608979C1BC00007D5C40CC7BECB6D58A87ACCD7F6CB4C95F0151F5860E1DBA7E08968F86D6A837044BCC0BE60500580705C48C7B7EDA6101115F33F92B206A20049D1CDA683D2158625E302F00C03A2A20A68F39A5C30222BE66F2574054B35C2EF7F910821687C77FD41B8225E605F302002820141074CB29A79CF2EE1080A624497288DE102C312F981700601D1610F16A7F1D1510F13593BF02A25AE5F3F92343009A109EBE4B6FAC55881C1D83E41ADA343D655E302F981700504074D8664DFE598705447CCDE4AF80A8D230B445684B72B9DC67F4C65AF7E5B6A1BDD959B00C217E0F3D655E302F981700504074D8962E78349D7EF7F0D50F770ADF8BAF99FC1510551A86EE0E61E7383DD163FD796727C172CAC08103DFA397CC0BE605F302000A884EDB530F8E5CAD8088DF33F12B20AA510894FB87B0F3602E975B4F6FF458B0DCB6A3609924C9DE7AC8BC605E302F00A080E8BCAD5C99CEBAFF97AB1FEE14BE175F33F92B20AA4908931F0B61E7B9102EBFAC377A3C5CB677AEE5347B2BCD0BE605F302000A884E27B5E5CB16A433275FD2E1B934F1B5F81E058002A25A8440F9FF922439434FF44AB05CED5C4BE7569A17CC0BE60500E8B88058B9325D386B7CFA97BB8675583C642DBE27BED7566A05441584CAEF85B03363B7DD76DB406FF45A1F8FB2B7D2BC605E302F00C01A0B88356D8DB6955A01518D0A85C28742D05910DAD7F546AF06CBAF959D5BB9AB1E312F9817CC0B00D06E01D195ADD19D6DA5560C2820D6C2072BFDC11072AE0AA167842EEC7D0D0D0D77C560696FA579C1BC605EA0BAE64280AA2A202A2D1EB2A61850405428EEFD4A4B8FDD0D3A3B87A0F3542E977BBFB5BAF73FA70F7FF8C3C53D96BAC2BC605E302F503D732140D515109A02621DD839B465A15D547AECF20561060D1AF4F721E4CC29140ABB58A3FBEE732A054B17EE312F68E605AA602E045040680A88BF4DA4D9041AB7D22EE9EA849ACFE72F4A92E45A6B73757F4E981734F302C6584001A12920FA6A225DD3F7DB86CA7821996773B9DC87ADCDD5FB39615ED0CC0B1863010584A680E82DBBAE61C2CC5E6FF73C931026DF9B24C963215CE6ACC9D5FB39615ED0CC0B1863A1263435357D221496870F1932E4B6E6E6E6A70B85C26BA54BE1AF0CCFE796EEB9766C7C9FDE52402820AA6E225DD344D9E1D6DA102A4F8DEBB7B5B8BA3F27CC0B9A7901632CD59BA1424EBA39B459A12D2F65A815F182887595A14251B9F7D0A143A71D72C8212F8E1831E285A953A7A60B162C4857AC589146F171F1E2C5E9942953E65D70C1057F09C1737EE89C7BC2CF355B9414100A88756AE76E6E7D5DEDFD6190FB97B03E2F6E6E6EDECC5A5CBD9F13E605CDBC803196EACB50A18D2905C8B48BAD7F66A8F01FDB2284C93F1E79E491AF3CF4D043E95B6FBD9576550899330E3CF0C099E1774CCAE5729FB16829201410EB6C22DDA3829F5B1E27D4B0EEAE17D6E107423BD01A5CBD9F932E342F68E6058CB15457860AEDCE6E84C9F65AFFC9502D2D2D830E38E080D76EBBEDB6B7BB1328DBFACD6F7EF34048DD8BECBD544028206A62225DE5E777DC71C72BC3C036CE1451DD9FD300876C991734F302C658AA423E9F0FA553E392F290D8D4D4949E7DF6D9E9F8F1E3D3B973E7A62FBFFC723127BDFAEAABC5A340274F9E9C5E74D145E9A04183DA86CBE5359FA1860D1BD6F2831FFCE0F5993367A63DE1C9279F7CAAB9B9797EE898831410266F0544AF5BD3C509BAE4EFFEEEEFF60ADEDE7CF3CD0F324D54EFE7D483BF07F382790163AC3196B50B957B8430F86679A0BCEEBAEB8AA70C76C5B265CB8AEF8F3F571E306B36431D73CC3187066F74B503BA6AD1A2450B4BE1B26EF75C2A2014107D3891F6C8A13B215CEE6E42ADFECF6980ADEAE605CDBC803196751D2A1BCB43E5D1471F5DDC3B5989F873C71D775CDB70595B196AE8D0A1FF74F0C107BFD1537B2ADBDB73593A2CF6B30A084D01D1E3DA5E6CE05DA10D293D7647DB9F7311039F13E605F302C658632C1D289D53D97AF8EBF0E1C35B0F77AD543C4CF6CC33CF6C7B586CED64A8638E3966CEE8D1A3D3DE74F5D5578F8D27A32A20340544AF4CA47B944D88578696961EBB3AA176F47326549F13E605F302C658632CED285DF9B5754FE5DA86CAF270D966CF656D64A8534F3DF507C71E7BEC3B6FBCF146DADB060F1E3CA31E0F8955402820FA68221D50DACA9A96B5AE4CA8E51369D60697BDEE3C139F13E605F302C658632CAB86CABDCBCFA9ACF4F0D7CE0E8B2D3FE7B22632D409279CF06CBCA5485FB8EFBEFBEEADC7BD960A0805442FE868826B6F62EC6C426DEFFD57B4F37EE799F89C302F981730C61A63F95BB06CDD5B192FBCD31B6EB8E186DAD96B79E38D376E77F8E187BFB336B715E9AEE6E6E6A7E3F1C80A084D01B1D613E9AEDD9820DB9B50BB3A91B69D501D0AE473C2BC605EC0184BDD6A6A6AFA4476C19EB85771E9D2A5BD929BE2D562DBDC8AA47A33D425975C72E315575C91F6A533CE38239E6B796C7FD95211DABF2B201410BDBD0C5530A1AD6942EDEE445AFEF797D4DBD65A9F13E605F302C65863AC653293CFE70FCFC2DEB9E79EDBABD929DEE7B22C58566F863AF5D453E74E9D3AB54F83E5F8F1E3EF0B9D32BA3F2C7465C73C8F090BD8D714100A88DE5A86DA4CA45D9DC83A9A50DF5DE144DA762B71DD4CA83E27CC0BE6058CB1C658CB64D9EB3767EF99306142AF66A7C993279707CBEACD50471C71C4EB0B172EECD36019FE5E3C14765E7F5AE8CADA9DED6DDD50402820D676191A50F9791DED4DA87F5D8B89746DFF3DFD7A5DF739615E302F608CA5FF2F93E1EB59D96B3D7DD19EB6162C5850FEEFA8DE0C3564C8907756AC58D1A7C1F2B5D75E7B3E74CA8A7EBAD0B56EDD285FF814100A88B55C86D676AB687B13EADA4CA46D27D45DEB7082F139615E302F608C35C6D6E93219EF2D997DAFA76E31D2D9AD47CAFE0D2BAABAD3D685F877FBF34257BE7523EE3E574028202A5D86F6DE7BEFB1A549EFA2B5FC53EF6E67EBEC5F4BDF5F1B17957ED707EB7182C95A2E971BFB918F7CC4E7444DCC0B715928140A5D7EFFADB7DE9A6EB5D556DDFAFDE79F7FFE1ADF73ECB1C7169FDF74D34D69DCC89D7D3F5E5D51B0B4DE980BA9F2B1BCB5F55576CA5AD5765A4B4B4BDAD77B2CC3DF7BB33B1F567F687D5D40DC7DF7DDC5C1326EE1B8FDF6DBE3FD438B85C1EEBBEF9EC6CFBCA70B945A2B206A6DF9F9F6B7BF9DBEF7BDEF4DD7626B68675B69BB73E3E80EB7D2D6DB3ADD59F339695D6DEB3258EEB4D34EEDBE16C7E7EDB7DFBED8B2B963B3CD362BB6F83CB6ABAEBAAAF83BE6CF9F5FFC997BEFBDB7F8FDF2F77FF39BDF6C7DFF2DB7DC926EB9E596ABFD1BE2C503B3E723478E6C7D1EE709F382662ED46AA5D9635972C41147BCD1D7E7582E5AB468613F3EC7326BD3F2F9FC1E03070E7C4F7C5F5F07CB38485E78E185C505310B71D9F74F3CF1C4D6AFC367512C2EE2C41F03DE0E3BEC50FCF797170871B2DF70C30D5B7FA63F1410B5B80C9526AEE5037AE7BC924A26D47A3FC7D2E7444DCD0B6DC7E44D36D9A4C3D7E3DC316BD6AC74975D76592D58DE7CF3CDE9673FFBD9D57E5FF9581EBF3EFDF4D35BBF5E7FFDF55BE79EA79E7AAAF87BE27BBEF5AD6F15E783F8FC89279E68FDD9471F7DB4F878F1C517DB6369BD31C65295CB64787CD239966D9C75D6594BFBFAAAB093274F9ED9DFAE0ADBC90038A0AF0B8851A346B5EE218D03E5F1C71FDFFA7C9F7DF669B78088AFC53D9BD9FBB2ADD1313CC6C0F9C94F7E5201B18E97A1B65B45D76222BD6240FB57C2EBCE845AB75785F539518BF342DB3D927159DA60830D3A7D5F0C901FF8C007560B961B6FBCF16A73C9F2E5CBD371E3C6B56E608CBFFF80030E283E8FEF8D73497BE1B67C83E3A69B6EDA7AB44DDC381937623A14D67A638CA55A974957856D4718D4EFE8EBFB589E77DE7953FBCB7D2CCB3EE4294992ECDDC100D867054416D2E25EC301657B27E3F33BEFBCB31808E3F37BEEB967B5093E1600D9F3E9D3A7171FAFBFFEFAF4D9679F2D3E9F376F9E02621D2E43156C1D5DD3BDB9BA7AE3E8B6B61D5087F7EEF23951ABF342DB3665CA94E272F4A10F7D6895235ADAB6B84131B6B6C1F24B5FFA52BB1B29E3EF8C61B4ED9C12E79E8D36DAA8DDF7C70D8E0F3EF860F179FC7765DFBFE4924B9C6369BD31C652D5CBA4FB58B6E38F7FFC63EE88238E48DF7AEBAD3E0B962D2D2D0B42A76CD14F16BACEB6A8F57901B16CD9B262B88C13F436DB6C530C887142CF26ECD89E79E699E2C019F76CBEF4D24BADE13006BF389967C5C1800EF6582A20D6CD32D4CDADA45DBDE1737727D4EC10A4BDEB7082F1395193F34247E757C60D8CF1796787C366CF63988C2DBB904FFCB9B6A1347EEF1BDFF8C66A1B1C6320DD6BAFBD56D9001ACFB98FEFB9FCF2CBDB9D53EAFD1409EB8D3196EA5F269B9A9A3E11DE53BC6E4C789E2E5DBAB4577253ACED070D1A541E2CAB3B439D7AEAA9AF3DF4D0437D122A1F7EF8E1A5A143EEABB785B32F0B881826E3641E43630C7271F779B67731B678F853B6F730DB031907D1B807319BD4B3BD94718F657C3D9E6BA380A83A1D6DADEDEA44DADD0935FB7B26529F1335362FB43D0C369EEE908DC1E79C73CE2AEF89A730ECB6DB6EC5D6DEC57B4E3EF9E4F4A8A38E6A3DBAA5BBF3423CB77FF6ECD9AB1D29533E2F6447DF641707322F608CA51AC55B8F64812FEE88E90D37DC704379A89C54F59D72F5D5579F7BDC71C7F5C95ECB430E39E4A9F021342B207A776B746C93264D2A1611D956E7CE425CF9041F03665618C495245EBCA1EDE1AD0A88AA11B7D6B63D1467C880EEDF9BABBD09757037B60AE373A20682E580D29128D9D78F3CF2C82A1754CBC2676CE557145FD33996D9112BEDCD29F19CFAC71F7F7C8DA748C4B9203BAA2586DB384F7476A8AE7901632C55102CF7CE425FDC6BD9D317F189BF2FFEDEB27B68D646863AE9A4935E1E3D7A74AF86CADFFFFEF7CFC6BD95DD3CCC4101B116E75B965F4EBEB36019CFB58987CEC6731DE39ECEECFD718F657BEF574054DD845A7E1183F289B13B377CEEE8E7DCF8D9E7443F981706747001B7B80131BE16E6E6550E7FCD0266769BA86C8360DC4BD9DE38DFD1C6CAB62D1E05931D2973CD35D7ACB24134DBA33A7CF8F0D5AE626E5EC0184B350AD9E69E2CF81D7DF4D13D76EB91381EC71D7FE57B2B6B26438D1A35EA3F0E39E4907766CE9CD92BA1F2E9A79F7EABB9B9F9F990B43FAB80E8BD969D3FF9F9CF7FBE18D8CAB738C7EFEFBBEFBEADCF6388CCF626C61B5FC7C35F6310CD6E3F926DD9CE9EC70B022920AA56DB4381DE55DACADADDCBA6B7FDB95D4DA43E276A7B5E88175E8B174C8BE7D577F49EB8B1308EC36DFF4D7143637635EF78718AEE84D88EE685D8B20BCC959F6F5F7E2D80BE6E82A531D618CB5A04CB2D425B9205C058D7AE6DB88CA1F2CC33CF2C0F95CB6B2E4385C2FF8A78219FC58B17F768A88CBFEF80030E585A8F87C0AEAB2DD3E55B9CD7F49E18FCBAF37E0544CD4CA83DB1F5D715EF7C4EF4B37941132C8DB1C6587A563E9F6FCC2EE493EDB9ACF4B0D8F8736DF654A6359BA1468E1C794B0C973DB5E7F2E9A79F4E0F3AE8A01743879FA08030792B206A664275C3679F13E605F302C658632C5D1402604B79B88CE746C6530DE2555DBB7AF5D778A19EF2732A63ABF90CF5AB5FFDEA67210CBE13CFB95C9B0BFADC71C71D2B870C19F262EC680584024201D167D6F6901D87FCF89C302F981730C61A63E9A6B8E732B465E5C13006C5782AC18409138A7B23B3C364E3E1AE0B162C28DEBD61C48811F1768CAB04CA78F86BBFC950975F7EF976279D74D2F371576CBC6A5C77C40BB3849F7B71F0E0C1D3EAF59C4A058402A24A26D4EE6E657571029F13E605F302C658632C158AE75C96DF86A4C236A95F66A80B2FBCF0BF8317E2E1B1F1AA9ED3A64D4B172E5C583C172F8A8FF11CCA183EE3EEDEC30E3B6CC5C1071F3C3D26EC7ABCFAAB0242015145BA7B088F437E7C4E9817CC0B18638DB1F44CC0DCAF1430DFEC4EA0AC8B0C75EDB5D77EE5BCF3CEBBF6E4934F9E3574E8D0E5CDCDCD6F9776EFBE75E081072E0FC1F3A1D0CE8C29DDA2A4805040D4DC84BA6D68CB07B8E1B3CF09F382790163AC31961E13B2D22742C03C2A64A49B437B2AB4156541725E68A3433B56864201A180A805BB9626CA5D3B797D8989D4E78479C1BC8031D6184BEF2B85C9D4D19D28201410B5A8A3ADB50EF9F139615E302F0896C658632C7D249FCF7F2D3B3C364912E7F1A2805040F48B09D544EA73C2BCA00996C658632C7D1B2C47951D0A3B4D8FA0805040D4FA847A9189D4E7847941332F18638DB1F49D1024B76D7B319F10342D7F28201410352B1E76910E7019759F13E605CDBC608C35C6D297C172743B57829DE65C4B14100A885AF6415D501B9F539C7474837941332F608CA5E643E5B61DDD7A244912178D4201A180805E9F882CAFE605CDBC803196DA5FD6EEECE4FE9553F4100A080504287A302F981730C64267CB59877B2B9D6B89024201018A1ECC0BE6058CB1D095E56C7467A1D215625140282040D18379C1BC803116BA65D0A0417F1F96BD57F4040A080504287A302F981730C6424572B9DCFBC3B2B75C4FA080504080A207F3827901632C5464CF3DF7FC4092242FEB0914100A0850F4605E302F608C858A343535FD4358F65ED21328201410A0E8C1BC605EC0180B15C9E5721B8565EF453D81024201018A1ECC0BE6058CB150919696960FE6F3F9657A0205840202143D9817CC0B1863A1228542E14361D97B414FA080504080A207F3827901632C542497CB7D382C7B4BF5040A080504287A302F981730C64245060F1EFC91B0EC3DAF275040282040D18379C1BC8031162A9224C9C661D95BA2275040282040D18379C1BC8031162A92CBE53609CBDE623D81024201018A1ED6DAB871E38CC9D5D1568479E14D4BA43116FA4A92249B86656F919E4001A18000450F6B6DE2C4890B172F5E6C5C5EC76DC18205378679618625D2180B7D2597CB7D2C2C7B0BF5040A080504287A586BE3C78FDF6BC284092F3EF7DC73AF199FD7CD86C638278C1D3BF699D0F6B3441A63A1AF3437376F1696BD67F5040A080504287AE811613CDA63CC9831D3E29114F1307DAD4F5BECF319E60463AC5E601D2C771F0F6D819E4001A18000450F8031162A92CBE5FE312C7BF3F50475ABA1A161670330287A008CB150B9A6A6A64F84656F9E9EA09E07DF49A1BDA32740D103608C858A97BB4F8636574F50AF2BC0C038F8C69624C9BFEB1150F4001863A1FB72B9DCA7C2B2F78C9EA05E07DE7BCA82E5183D028A1E00632C745FA150D83C2C7B4FEB09EA4E0892BB66A1D25E4B50F400186361AD96BB2D427B4A4F508F0BFFA4B6C132B4D17A06143D00C658E89E5C2EB76558F6E6E809EA6DC0DDAF9D50596C8542E15FF510287A008CB1D075A186FE7458F666EB09EA6DC0FD4B47C13249921BF410287A008CB1D075B95CEE3361D99BA527A81B2138EEDD51A8CC5A3E9FFFA29E02450F803116BAA65028FC7358F666EA09EA46088D0FAF29588676B39E02450F803116BA5C636F1596BDBFEA09EA5692241B879560899E00450F8031162A93CBE5B60E75F5137A82BA3568D0A08F8601F8393D018A1E00632C542684CACF86656F869EA06E3537376F16568267F504287A008CB150997C3EFFB9B0EC3DAE27A85BB95CEE1FC34A305F4F80A207C0180B15D7D49F4F92E4313D413D0FBE9F0C6DAE9E00450F8031162A1342E517C2B2375D4F50B70A85C2E66125785A4F80A207C0180B9589B7EB8BF78AD713D4AD5C2EB7655809E6E80950F4001863A1324D4D4DFF12C2E5A37A82BA1556807F0A03F0937A02143D00C658A84C92245F0ACBDE9FF50475AB5028FC73580966EA0950F4001863A132F97CFECB61D97B444F50B7DCCC15143D00C65858EBE5EE2BA1FD494F50B7DC7307143D00C65858EB9A7A9BB0EC3DA427A85B2E8D0C8A1E00632CAC9D42A1F0D5B0EC3DA827A85BAE60058A1E00632CACF572B76D68D3F40475CB89C6A0E80130C6C25AD7D4DB8565EF013D413D0FBE4E3406450F803116D642A150F8B7B0ECFD514F50CF2B81E3C141D103608C85B55BEEB60F6DAA9EA06ED96D0F8A1E00632CAC754DFDB5B0EC4DD113D4FB4A60EB0A287A008CB150A124497608CBDEFD7A827A1E7CBF1EDA643D018A1E00632CA8A9A1224992FC7B580926E90950F4001863A1320D0D0DDF08CBDE7D7A827A5E09BE15C2E5BD7A02143D00C658A878B9FB666813F504F5BC120C0CED1E3D018A1E00632C54C6CE1AEA5E5801760A03F0383D018A1E00632C545C537F3B2C7B13F40475ABA1A161E7B0228CD113A0E80130C642C5CB9DA300A96FF97CFEBFC24AF0073D018A1E00632C54A6A1A161C72449C6EB09EA565801760D03F09D7A02143D00C658A8B8A6767A19F5AD50287C279FCFDFAE2740D103608C858A97BBFF086DAC9EA06E8550B947580946EB0950F4001863A132AE5B82C1B7B171CFD06ED513A0E80130C6426542A8FCCFB0ECDDAD27A8E79560EF7C3E3F4A4F80A207C0180B9571414CAC04F9FCF7C24A708B9E00450F8031162A532814760975F55D7A827A1E7CF70BED663D018A1E00632C54C69D16B01224494358096ED213A0E80130C64265DC6901C1320803F0F57A02143D00C658A878B9DB3DB4FFD513D4AD7C3EDF14B2E5757A02143D00C658A8B8A6760B3FEA7EF01D14DA483D018A1E00632C54264992EF8670799B9EA09E5782216100BE464F80A207C0180B152F77EE0D4F7DCBE7F3FB877079959E00450F8031162AAEA9F70ACBDEEFF504F53CF81E18DA157A02143D00C658A84C92247B8770394A4F50CF83EFC1A15DAE2740D103608C858A97BB7D42FB9D9EA06E254972483E9FBF544F80A207C0180B9509F5F4F7C2B2778B9EA09E57821F8495E0177A02143D00C658A84C9224FB86BAFAFFE909EA79F03D2CB49FE90950F4001863A1E2E56EBFD06ED613D4AD24498EC8E7F323F404287A008CB15099504FE7425DFD5B3D413DAF04478695E07FF404287A008CB150F172970FED463D413DAF043F0AED423D018A1E00632C54269FCF37264972839EA06E8515E098B0229CAF2740D103608C858A6BEA242C7BD7EB09EA560895C785F5E05C3D018A1E00632C54BCDC1542FB8D9EA09E83E509612538474F80A207C0180B15D7D44D49925CA727A8E7C177586867EA0950F4001863A1322154368765EFD77A827A1E7CFF3BB4D3F504287A008CB150F1723728B4917A82BA95CFE77F9224C9A97A02143D00C658A8B8A61E1C6AEA6BF504F53CF89E12DA703D018A1E00632C542684CA2161D9BB464F50CF83EF69A19DAC2740D103608C858A97BB96D0AED613D4AD2449CEC8E7F327E90950F4001863A132A19EDE3FD4D557E909EA79F03D2BAC0427EA0950F4001863A1E2E5EE80D0AED413D4F34A704E68C7EB0950F4001863A13249921C94CFE77FA527A8E795E0DCB0121CA72740D103608C858A97BB8343BB5C4F50B742A83C3F84CB63F404287A008CB150F1723734B4CBF404F5BC125C18DA8FF404287A008CB1509924490EC9E7F397EA09EA7925F89FB0121CA92740D103608C858A97BBEF87F64B3D41DD0AA17244089747E80950F4001863A1E29AFA0761D9FB859EA09E07DF9F8576989E00450F8031162A9324C9A1215CFE5C4F50CF83EF2FE216163D018A1E00632C54BCDC1D1677D8E809EA7925B82C5EC54A4F80A207C0180B95C9E7F3878765EF123D413DAF04BF8A3774D513D06B05CEE858E4ACA14DD353008225B52B5EB3245EBB444F50CF83EF95A11DA027A0D7D6B16D437BB3B3601926A23DF4148060494D2F773F0CED623D413DAF045787D6A227A057D7B33B3B099653060E1CF81EBD04205852BBE2EDFBE26DFCF404752BAC00D7861561B09E805E2D72B6ED28588675706F3D04205852F3CBDD8F42BB504F50CF2BC1AF4361DBAC27A0D7D7B5F6CEB59C666F25806049EDCBE7F347879AFA023D413D0FBEBF09ADA027A0D7D7B5D5CEB5746E25806049FF1042E531615E3F5F4F50CF2BC10D612568D413D0FBC2BA36CADE4A00C1927EB9DC1D1BDA797A827A5E096E0AE1B2414F409F04CBAF959D5BB9AB1E01102CE93773FC71616E3F574F50CF83EFCDA1EDA727A0CFD6B9E2B996F656020896F41F2154FE3884CB9FEA09EA79F0BD25AC04DFD31354BB344DDF3367CE9C9BA74E9DFAF6B871E3D23163C6687DDCC68E1D9B4E9C38F1F9D05CF00B102C61D5E5EEF8D0CED113D4AD78CE97DB1D500B62A89C346952BA78F1E2F4F5D75FD7D6515BB264497AEFBDF7BE1442A6231D00C112FE56539F106AEAB3F504F53CF8DE1ADA9E7A826A17F7540A9555132E5F1F3366CC0C4B252058C2FF09A1F2C4B0EC9DA527A8E7C177B45B1E500BE2E1AF425DF5B4102CDFB454028225B42E77C3423B534F50B742A8BCBD50287C474F50EDE2397E025D55054B851B2058C2DF6AEA93922439434F50CF2BC15D6E7B407F0A96AFBCB8309D33EDEAF4B1B1A7155B7C1EBF270C0A96806009BDB8DC9D1CDA697A827A5E09EE0EC1F23FF504FD21582E5FB6209DFE8793D33FDF7EDC2A2D7E2FBE26100A96806009BD219FCFFF24D4D4A7EA09EA79F01D1BDA7FE809FA43B09CF7D86DAB85CAACCD7F6CB4402858028225F4D672373CB453F404752B4992F10D0D0D3BEA09FA43B09C71CF4F3B0C96F1358150B004044BE8A5E5EE94182EF504F5BC124C08E1F2DB7A82FE102CA78F39A5C360195F1308054B40B084DE100F838D87C3EA09EA79F09D18DA37F50482A5265802822554BCDC9D162FE0A327A8E795E0BE8686866FE809FA43B08C5781ED2858C6D70442C112102CA19796BBD343FB6F3D413DAF04F72749B2839EA03F04CB59937FD661B08CAF098482252058426F88F7B08CF7B2D413D4F3E03B35B4EDF504FD21582E5DF0683AFDEEE1AB1F061BBE175F1308054B40B0845E5AEECE0C6D989EA09E578207F2F9FC767A82FE102C637BEAC191AB05CBF83D6150B004044BE8C5E5EEAC24494ED413D4F34AF060A150F8AA9EA05F04CB952BD359F7FF72F5C360C3F7E26B02A160090896D01B42A83C3B9FCF9FA027A8E7C1F74FA17D454F50EBC172F9B205E9CCC99774788E657C2DBE4728142C01C1127A61B93B27B4E3F504F5BC123C92CFE7BFAC27A8D960B97265BA70D6F8F42F770DEB3054662DBE27BED7DE4BC112102CA1272549726EA8A98FD313D4ADB0023CDAD4D4F42F7A825A0C966BDA4B69EFA560090896D047CBDD79A11DAB27A8E795607A92245FD013D462B0ECCA5ECACEF65E0A8882252058424FC8E7F3E7879AFA183D413D0FBE8F8715E1737A825A0C969586CAAC098882252058424F08A1F28250531FAD27A8E7C1F7AF6125D84A4F508BC152132C01044BAA64B9BB30B41FE909EA79259895CBE53EA327102C35C112102CA132F97CFEA224498ED213D4F3E03BBB50287C5A4F20586A82252058426542A8FC9F102E8FD413D4F3E0FB54685BE809044B4DB004044BA878B9BB38B41FEA09EA7925782697CB7D4A4F20586A822520584265F2F9FC8824498ED013D4F3E03BAFA9A9E9137A02C152132C01C1122A5EEE2E09E1F2703D413DAF040B42FBB89E40B0D4044B40B0848A97BB9F8576989EA09E578285B95CEE637A02C152132C01C1122A93CFE77F9E24C9A17A827A1E7C9F1B3468D047F50482A5265802822554BCDCFD32B4EFEB09EA7925589224C9C67A02C152132C01C1122A93CFE72F0D35F5217A827A1E7C97E672B90FEB09044B4DB004044BA878B9BB2CB4A17A827ADEBAB2ACA5A5E5837A02C152132C01C1122A5EEE2E0FED603D413DAF042F353535FD839E40B0D4044B40B084CAE4F3F95F254972909EA09E07DFE5B95CEEFD7A826A3070E0C0F7089682258060490D2E77578476A09EA09E578257BFFBDDEFFE9D9E605D4B92A4391603A1ED27580A9600822535B6DC5D19DA017A827A5E0956B6B4B4BC4F4FB0AEE472B9CF1C7BECB1F73DF9E4938B9E7FFEF9B1871F7EF88361B9BCA4ED722958D65EB00C9FE3B6F97C7E94A51C102CE9EF9224B92ACC79FBEB09EA79F07D63E8D0A1EBEB09FA5A3CEC75D0A0413FB9E5965B9E7FEBADB756A47FB3ECF6DB6FBFBBB9B9796A0C9D8265ED05CB1828431B1DDA9B0A3C40B0A44E96BBAB436BD113D4F34AF05628DED7D313F4A52449FEFDA73FFDE99C175E78E1F9B4032FBFFCF213279C70C282ECD058C1B2FA8365DB4099354B3C20585207CBDD35A1BE19A227A8E795E09DF0F02E3D415F88B7B639EAA8A3AEFBD39FFED461A06CE3CDBBEFBE7BC1C1071F7CE95D77DD25D05569B0CCE7F35F8B87BCB60D9482252058522F42A8BC36CC8583F504753DF8C67019DADBA5A2F08D78DE65682BE2857D427B25AC282FC7DB92C47B5E86C717427B3EB425A13D17DAA2D09E0D2DEE599A17DADCD09E09EDA9D0E684F66468B342FB6BF83D4F84C7C7C3E363E1F12FE1F73D1A1E1F098F0F87C787428BE7D63D10DA1F439B12DAFDA1DD17DAA4F033F786C709E1717C781C171EC784C7BBC3CFDE151EEF0C8FB787C7FF0D8FB785C75B4B45EEEFC2E3FF0B8F37877653683786767D68BF09EDD7A18D8C83403C74211E171FAFE6152F151D6F701B1E2F0D8FBF088F3F8FE7FB85C711E13DFF131E2F0A8F1784C7F3C3E3B9E1F1A7E1F1ECF09EB3C2E319E1F1F4F0786A783C25BCF693F07872783C293C0E0B8F2784C7E3C3E371E1F1D8F0787478FC51783C323CFE303C1E1E1E0F0B8F3F088FDF8F37D98DF7438A57188B2783C7E3F6E396B03868C50BDD84C7A6F09884C7C6F0D0101E73E171DFF0F8BDF0B87778DC2B3C7E373CEE512814BE131E770B8FBB84C7FF6A6868D839FCCEFF088F3B86C781E1F15BE1F19BE1F11BE1F1EB312884C7EDC3E376A5F3E4B6098F5F098F5F0EBFF34BE1F18BE1F10BE1F173E1F1B3E171ABF0BBFF393CFE5378FC742E97DB323C6E1E1E3FD5D4D4F489F0F88FCDCDCD5B5F76D965E98A152BDE4ABBE9E5975F7EE997BFFC653A77EE5CA1AE8A8265477B28DBB678BE6C5806368C170A1B3468D0DFC72B51EFB9E79E1F88B73A0ACF378A2D6E7408CBCC87C2F30F0F1E3CF82361B9DA383CDF24B6F0331F0D5F6F1A9E7F2C2C479B85DFF9F1B84CC5652BB6F0F527E3B21697B9F07C8BD2F2F7E9D8E232190FA92E2D9F5B85E75B9796D9CFC516BEFE7C6959FE62F85DFF525ABEBF1C5BF8997F2D2DF7DB84E75F2DAD0BDB85E7FF165B691DF95AF8991DE27A13D79FB8373EAE4BA5F5E95BE1EB6F97D6B11DC3F39DE27A575AF7760E5FFF675C1FE37A199EEF5A5A47BF135B78CFEE71DD8DEB7078BE67697DDE3BB6F0F53EA5F57CDFB847BFB4EE3784E7F9D84A6342129E174AE344BC30D6A0D84AE3C79078B8561C53E2D812C7987889FCD84A63CED0F0FC90380EC5F1283C3F34B6D2F87478787E4469CC3A323C3F2A8E63A5B1ECE8F0F531A5F1EDB8F0FCC7A531EF84D8C2D72796C6C23826FE77697CFC4969AC1C1EC7CDD2F8795A692C8D63EA99A5765669AC3DA734EE9E1B9E9F175B693CBE203CBFB03446FF4F787E711CB7638B6378683F2B8DE7BF08ED97718C2F8DF3F186E69797C6FE7845C72B4BF3C1D5A5764D699E1819E78DF0FCBAD21C12E792EBC3D73794E6969BC2F3DFC6F926CE3BA5B9E796D23C14E7A3DF97E6A6DB4AEBCCE8D29C15E7AE3B4AF3589CCFFE506A7797E6B9B1A5392FCE7DF7C479B03417C63971629C1F4BF3E4E4D29C797F69FE9C5A9A4BE39C3AAD34BF3E546A7F2ACDBB8F84F6E7D25CFC97529B5E9AA31F0F6D4669DEFE6B68334B6D56695E9F5D9AE3E35CFF7469DE7FA65403C45A607EA92E88F5C1C2525B54AA1B16976A88584B2C2DD5152F946A8C1763BD51AA3B96C71AA4D4623DF25AA9368935CAEBA57AE5CD527BAB54C7BC638316EBB0A68EE3C4203D41BD7BD729A79CF2EE78CE5B3CDF72B7DD76DB201682591198158059E197157D59B197157A5981575EDC65455D56D065855C56C465C55B56B865455B56AC65855A56A065C55956946505595688654558567C658557567465C5565668B529B00E2C1556C5A22A2BA8B2422A2BA2B2E2292B9CB282292B96B222292B90B2E2282B8AB282282B84B222282B7EB2C2272B78B262A74D919315385961532C6AB262262B64B222262B5EB2C2252B58B262A5AC48C90A94AC30C98A926231921522590192151F658547567094171B5991F1ECF0E1C397CD9B37EF9DEE06CB65CB96A523468C28160BD51A2E972C59120B99F4E69B6F4E5F7DF5D574F3CD374F77DA69A734AC2FC576EBADB7165F6FFB73F17BE79C734E875F5779B0EC6A5B512A0A5F2D1589CBB30D56A542F2C5B20D574BCB365E2D2EB56C23D6C2B20D59F34BCB56F906ADA7CB366ACD2EB56CE3D6CCB20D5C334ACB6EB6A16B7AD9C6AE3F9796F36CA3D79FCA367C4D2BDBF8F5C7D23A926D049B9C6D082BAD4B13B30D62A575ACB851AC1414C6661BC7E2FA986D202BADA3B7671BCA4AEB6E716359697D1E956D342BADE7C50D67A540936D3CBBB134261437A295C6895F970A9E6C63DA35651BD4AECC36AA95C2D5E5651BD77E996D602B85B29F651BDAE298956D6C8BE358692C2B6E742B8D6FC50D6FA531EFEC6C035C692C2C6E842B8D8FA7661BE3E2B8996D902B8DA5C58D72B195C6D8E2C6B9D2B85BDC40175B693C2E6EA82B8DD1C58D7571DC2E8DDDC58D76A5F1BCB8E12E8EF1A5F05CDC80571AFB5B37E2C57921B66C635E69BE286ED02BCD2149B661AF34B71437EE95E69B7DB38D7CA579A8B8A1AF34371537F6C516E7AC6CA35F691E2B6EF88B2DCE6FD906C0D29C57DC0818E7C1D25C58DC18589A1F8B1B04E39C195BB661B0349716370E96E6D76DB28D84A579B7B8A1B034177F31DB60589AA38B1B0D4BF37671C3616CA5F9BC7503629CEBB38D88B1C51A20DB9818EB82581FC40D42B1C57A21D60D716351AC21622D113724C5BA22B65863C48D4CB1DE887547DC00156B90D8623D12374EC5DA24D628E1F97B63BD12EB96D8E2293DB18E19E0082CD6ED1ECBEBE218A12700FA48C889EF993C79F25D2B57AE7CBB2BA1F2FEFBEF5F70E08107BEF2939FFC247DFAE9A7AB3A6C3DF0C003E9669B6D16F7CA1603E2E38F3F5E7CBCE4924B5A4363F6DEEDB6DBAE356C5E75D555E9C61B6F9C3EF8E083C5AF77DF7DF7D6D7E2EFA8F643614B05F0948E82A5A51E80FEAE743443414F00F4B11B6EB861BFD9B367BFD651A07CF6D967579E7EFAE98BE35E8AB825BBD62EDE1343E1C891238B8F03070E4C274D9AB44AB09C356B563A6AD4A8D660B9C30E3BA4A3478F4EAFBBEEBAD69FBFE9A69B6AEAE23D71AF4B698F9D600940BD05CB781459A22700D68178A8530857F7AF58B1E2CD2C50BEF1C61BEFFCFEF7BF9FB7FFFEFB0F89873865EFADE660397FFEFCE21EC60D37DCB01820B36078E9A597B606C7B8D7B23C58C6F79F7CF2C9AD0174BDF5D64B43902E06B6C9932717BF1FC3672DDE6EA4B4077392600940BD88A721C4C3E3F504C03A74DA69A7B5C4301582D4E2CB2FBFBCDDF313AA7D8F6576F8EB2DB7DCD21A2CE31EC9B67B31B3E74F3DF55471EF64FCDE17BFF8C562D08CDF5FBA7469F17B219CD5EC7D2CCB26D9B807738A251C80FEAE749E7B5E4F00AC63E57B276B3158B60D93F1F9F5D75F5F0C8CF1BCCB458B16AD122CB7DF7EFBF4F6DB6F2F7E2FEEF1DC6AABAD8A87C25E73CD35AD17028A2DFE5CAD064B00A8A360192FA4D8A02700AA5CAD04CBE9D3A7A72FBDF452EB61B0D91EC8F8FD2C58CE9B37AF78E5D8183AE3A1A2F171CB2DB74C0F3DF4D0E2F3B8D733BE77DCB87135BDC71200EA45E9EAFC393D012058F648B08C81F2B39FFD6CEBC57AE20578E2633CF475409BDB8DC4C367A74C99527CCCAE021B1FE3F996D9457C044B00A87EA5FBA6EFA7270004CB1E0996F150D6F818F748C6C7679E7926BDFBEEBB573BC7B2FC671E79E49162A08CF7BEAC95ABDE0A9600F037F1DEC2F11EB67A0240B05CEBB67CF9F2F489279E281EF65AFEFDECFE94F1DE95EDDDC73286D1E1C38717EF6579D2492715BF9F05D478BEA5600900D5ADB1B1F196102EBFA7270004CB3EBF8A6C2DFFFB054B00582558FE2EB47DF4048060A909960050917C3E3F2A4992BDF5048060A90996005091C6C6C65B43DB534F0008969A60090015C9E7F3B72549F25D3D0120586A82250054A4B1B1717408977BE80900C152132C01A0D260F9BFA1EDAE2700044B4DB004808AE4F3F9DB0B85C277F4048060A90996005091C6C6C63B42B8DC4D4F0008969A6009009506CB3B9324D9554F0008969A60090015C9E7F377150A855DF4048060A90996005091C6C6C63F8470F95F7A0240B0D4044B00A83458DE9D24C97FEA0900C152132C01A02221548E696868D8594F0008969A60090015696C6C1C17C2E54E7A0240B0D4044B00A8480895E31B1A1A76D4130082A526580240451A1B1BEF096DA09E00102C35C112002A0D96139224F9B69E00102C35C112002A1242E5BD0D0D0DDFD2130082A526580240451A1B1B2786F64D3D0120586A822500541A2C272549F2EF7A0240B0D4044B00A83458DED7D0D0F00D3D0120586A822500541A2C2787F6753D0120586A822500541A2CEF4F9264073D0120586A822500541A2CA7E4F3F9AFE90900C152132C01A0D2603935B4EDF5048060A90996005069B07C209FCF6FA72700AADCB871E304BAEA692B42B07CD3520900ADC1725A68DBEA09802A3771E2C4858B172F16EAAAA02D58B0E0C6102C67582A01A035583E582814BEAA2700AADCF8F1E3F79A3061C28BCF3DF7DC6BC2DDBADB531943E5D8B1639F096D3F4B2500B406CB87F2F9FC367A02A0068430B3C7983163A6C5C330E3397EB5D8468D1A95D6EABFBDD4EF33844A00582D58FE29B4AFE809007ADD73CF3DB7EF881123D230F16CA13700A0FFC8E7F30F170A857FD51300F4AA344DDFF7C20B2F2C0BD2A14387FEAF1E0180FEA3B1B1F191102EBFAC2700E855F3E6CDFB755A72FFFDF72F4892646FBD0200FD2658FE39CCED5FD21300F49A575E79E5CB6FBFFDF63B699933CF3C735E4B4BCB07F50E00D4BE7C3EFF685353D3BFE809007ACDA2458BE6A46DBCF8E28B8BC20474B1DE0180DAD7D8D8F897102EBFA82700E81573E7CE3D39EDC0A851A316B9993200F48B60393D49922FE809007A5CC88E1F5BB972E51B1D05CB77DE79E7F51FFDE8478F0E1C38F03D7A0B006A5708958FE572B9CFEB09007ADCFCF9F3A7A46B3067CE9C7961323A4A6F0140ED6A6C6C9C11E6F3CFEA09007ADCE4C993D7942BD3152B564C089351DAD2D2F23E3D0600B52984CA2772B9DCD67A02801EF7939FFCE4B0CE0E858DB972D8B06137D9630900B5ADB1B1F1AFF97C7E2B3D0140AFB8F1C61BFFDA51AA7CF2C9272F0D13D114E7580240CD07CB998542E19FF50400BD2297CB7D2604C815ED5CB8677A5353D374578505807E112C67C5395F4F00D06BCE3BEFBC4B42907CBB3C585E71C51557E6F3F98BF40E00F48B60F96498D7FF494F00D06BE2A1AE77DD75D7E22C54BEF8E28BD7C72D9B2D2D2D1FD43B00D02F82E5EC42A1F0693D0140AF3AFCF0C3775AB66CD9CAD0D2A143878E4D92646FBD0200FD2658CEC9E5725BEA09007ADD65975D76E7881123D27C3E3F4A6F0040BF0A964F85B6859E00A0D7C5435FE33D2B9DDC0F00FD2E583E5D281436D71300F4D5C493EA0500E877F3FB33B95CEE537A0200C11200A8747E9F1BDA27F5040082250050E9FC3E3F97CBFDA39E0040B004002A9DDF1784F6713D0180600900543ABF3FDBDCDCBC999E0040B004002A9DDF17E672B98FE90900044B00A0D2F97D5192249BEA0900044B00A0D2F9FDB94183067D544F002058020095CEEF8B73B9DC267A0200C11200A8747E5F9224C9C67A0200C11200A8747E7F7EF0E0C11FD1130008960040A5F3FBD25C2EF7613D0180600900543ABFBF5028143EA42700102C01808AE4F3F9652D2D2D1FD4130008960040A5F3FB4B4D4D4DFFA02700102C01808A2449F2F29E7BEEF9013D0180600900543ABF2FCFE572EFD7130008960040A5F3FB2B83060DFA7B3D0180600900543ABFBFFADDEF7EF7EFF4040082250050E9FCFE5A2E97DB504F002058020095CEEF2B5A5A5ADEA72700102C01804AE7F795BBEDB6DB067A0200C11200A8747E7F3D97CBBD574F002058020095CEEF6F0C1D3A747D3D0180600900543ABFBF3970E0C0F7E80900044B00A0D2F9FDED534E39E5DD7A0200C11200A8747E7F273CBC4B4F0020580200E677006A63E2D1344DD334ADFF35550E00000000000000000000000000000000000000000000000000000000000000B04EFD7F52A9DA10FF9FDF790000000049454E44AE426082, + 1); +INSERT INTO `act_ge_bytearray` +VALUES ('247539', 1, 'var-userLeave', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF2E18C78737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000163FF066800787400203266643739336364643964333432663862303335333063383566326233303533737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('247541', 1, 'hist.var-userLeave', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF2E18C78737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000163FF066800787400203266643739336364643964333432663862303335333063383566326233303533737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('247542', 1, 'hist.detail.var-userLeave', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF2E18C78737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000163FF066800787400203266643739336364643964333432663862303335333063383566326233303533737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('247554', 1, 'var-userLeave', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF7CF0278737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000164042CC400787400203765393832666139393863303434386538306231353832346333303439633562737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('247556', 1, 'hist.var-userLeave', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF7CF0278737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000164042CC400787400203765393832666139393863303434386538306231353832346333303439633562737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('247557', 1, 'hist.detail.var-userLeave', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665000000000000000102000F4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000675736572496471007E00024C0008757365724E616D6571007E000278707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000163F9E00C007874002061346137343362666665393731316537623437323230316130363863363438327371007E0006770800000163FEF7CF0278737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E0006770800000164042CC400787400203765393832666139393863303434386538306231353832346333303439633562737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787400043230313874000CE6B58BE8AF95E8AFB7E581877070707071007E00087400037A786D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302553', 1, '请假流程.bpmn20.xml', '302552', + 0x3C3F786D6C2076657273696F6E3D27312E302720656E636F64696E673D275554462D38273F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0A20203C70726F636573732069643D2270726F636573735F6C6561766522206E616D653D22E8AFB7E58187E6B581E7A88B2220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D22737461727422206E616D653D227374617274222F3E0A202020203C757365725461736B2069643D22757365723122206E616D653D22E7BB8FE79086E5AEA1E689B9222061637469766974693A61737369676E65653D223062373632356665646161303565383566323832343836653163396339316239222061637469766974693A63616E64696461746547726F7570733D226533343665393633363834383463386661376632313763653535306130313836222F3E0A202020203C73657175656E6365466C6F772069643D227369642D30443235384332342D314631392D343233332D413937362D4130443843423944414541432220736F757263655265663D22737461727422207461726765745265663D227573657231222F3E0A202020203C757365725461736B2069643D22757365723222206E616D653D22E4BABAE4BA8BE5AEA1E689B9222061637469766974693A61737369676E65653D223938623035316230333638316465363032383939336135643134616339336362222F3E0A202020203C6578636C7573697665476174657761792069643D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222F3E0A202020203C73657175656E6365466C6F772069643D227369642D33334642463234452D464537302D343730412D394442352D3942313838314531333834372220736F757263655265663D22757365723222207461726765745265663D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222F3E0A202020203C6578636C7573697665476174657761792069643D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222F3E0A202020203C757365725461736B2069643D227573657222206E616D653D22E8B083E695B4222F3E0A202020203C656E644576656E742069643D22656E6422206E616D653D22656E64222F3E0A202020203C73657175656E6365466C6F772069643D227369642D34373638373538312D333535422D343335342D383433432D43333034323333323836414622206E616D653D22E5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D46423539344242452D383030352D344544432D423343382D39373831454432323643393522206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D35353636443037362D414234432D344134322D393938462D32353337373839463831383122207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D39394343413337462D413233352D343835332D383437322D44453233334144324544333222206E616D653D22E9878DE696B0E794B3E8AFB72220736F757263655265663D227573657222207461726765745265663D227573657231223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C6578636C7573697665476174657761792069643D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222F3E0A202020203C73657175656E6365466C6F772069643D227369642D30344339463239412D304242352D343639312D383034432D37363445344530413237313622206E616D653D22E58F96E6B688E8AFB7E581872220736F757263655265663D227573657222207461726765745265663D22656E64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30413541464638362D414541342D343231322D423146342D3932373541343430364332442220736F757263655265663D22757365723122207461726765745265663D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222F3E0A202020203C73657175656E6365466C6F772069643D227369642D37463032463244352D413642412D343233342D413732342D3346383938443233354134422220736F757263655265663D226368696C6422207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222F3E0A202020203C73756250726F636573732069643D226368696C6422206E616D653D2273756250726F63657373223E0A2020202020203C73746172744576656E742069643D22737374617274222F3E0A2020202020203C757365725461736B2069643D22616C6C6D616E6167657222206E616D653D22E680BBE7BB8FE79086E5AEA1E689B9222061637469766974693A61737369676E65653D226438313861633661383663663161363464323138346266303639396436376138222F3E0A2020202020203C6578636C7573697665476174657761792069643D227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222F3E0A2020202020203C656E644576656E742069643D227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341222F3E0A2020202020203C656E644576656E742069643D227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244222F3E0A2020202020203C73657175656E6365466C6F772069643D227369642D33453941414432332D343444412D344138352D383242442D4436433833304134433439382220736F757263655265663D2273737461727422207461726765745265663D22616C6C6D616E61676572222F3E0A2020202020203C73657175656E6365466C6F772069643D227369642D41323335414337362D354242452D344133382D383243342D31304545383141463834363522206E616D653D22E5908CE6848F2220736F757263655265663D227369642D31434331333342322D343442312D343833302D394335392D37443335363443393333464122207461726765745265663D227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341223E0A20202020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A2020202020203C2F73657175656E6365466C6F773E0A2020202020203C73657175656E6365466C6F772069643D227369642D44413934353339452D463639342D343041312D424534412D42434343314439424431314422206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D31434331333342322D343442312D343833302D394335392D37443335363443393333464122207461726765745265663D227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244223E0A20202020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A2020202020203C2F73657175656E6365466C6F773E0A2020202020203C73657175656E6365466C6F772069643D227369642D34454238313431392D314141372D343937452D413545452D4535414546313743354530422220736F757263655265663D22616C6C6D616E6167657222207461726765745265663D227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222F3E0A202020203C2F73756250726F636573733E0A202020203C73657175656E6365466C6F772069643D227369642D41453541454438342D303734362D343738372D393836462D36413739323743333443333422206E616D653D22E5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D227573657232223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D35313046453036322D433042432D343643382D394231372D38413338303732413242433622206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D42453337324431342D463530392D344544422D383745382D37423231303738333541453522207461726765745265663D2275736572223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D38344442433035362D303639312D343733452D383243462D44333235454637333641373222206E616D653D22E4B88DE5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D66616C73657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D227369642D30443039333043392D394241312D344636382D383545412D33383445313642343039413022206E616D653D22E5908CE6848F2220736F757263655265663D227369642D39353037343945412D344242362D343237362D423637412D44453033453334413035373322207461726765745265663D226368696C64223E0A2020202020203C636F6E646974696F6E45787072657373696F6E207873693A747970653D2274466F726D616C45787072657373696F6E223E3C215B43444154415B247B666C61673D3D747275657D5D5D3E3C2F636F6E646974696F6E45787072657373696F6E3E0A202020203C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F70726F636573735F6C65617665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2270726F636573735F6C65617665222069643D2242504D4E506C616E655F70726F636573735F6C65617665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227374617274222069643D2242504D4E53686170655F7374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D2233302E302220793D223232382E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657231222069643D2242504D4E53686170655F7573657231223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939342220783D223132302E302220793D223230332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227573657232222069643D2242504D4E53686170655F7573657232223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2237392E3939393939393939393939393937222077696474683D2239392E39393939393939393939393938392220783D223531302E30393038383236333634343631372220793D223230332E3730333730333130343131343233222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831222069643D2242504D4E53686170655F7369642D35353636443037362D414234432D344134322D393938462D323533373738394638313831223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223731352E353435343431333138323233312220793D223232332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535222069643D2242504D4E53686170655F7369642D42453337324431342D463530392D344544422D383745382D374232313037383335414535223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223337302E353435343431333138323233312220793D223232332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2275736572222069643D2242504D4E53686170655F75736572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D223130302E30303030303030303030303032332220783D223334302E3534353434313331383232332220793D223336382E37303337303636343732373932222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22656E64222069643D2242504D4E53686170655F656E64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232382E302220783D223838302E353435343431333138323233322220793D223232392E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733222069643D2242504D4E53686170655F7369642D39353037343945412D344242362D343237362D423637412D444530334533344130353733223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223236342E39393939393939393939393939342220793D223232332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D226368696C64222069643D2242504D4E53686170655F6368696C64223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D223137322E3130323038303930333236363038222077696474683D223431312E36303837323832303738373235362220783D223138342E37343130373732313432383638362220793D22312E34323130383534373135323032303034452D3134222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22737374617274222069643D2242504D4E53686170655F737374617274223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223230332E32353935393536373832393732352220793D2237312E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22616C6C6D616E61676572222069643D2242504D4E53686170655F616C6C6D616E61676572223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2238302E30222077696474683D2239392E39393939393939393939393939372220783D223237342E37343130373732313432383638362220793D2234362E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641222069643D2242504D4E53686170655F7369642D31434331333342322D343442312D343833302D394335392D374433353634433933334641223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2234302E30222077696474683D2234302E302220783D223431392E37343130373732313432383638362220793D2236362E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341222069643D2242504D4E53686170655F7369642D46363844434341302D463741342D343444342D394534342D353641363832443837454341223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E30222077696474683D2232382E302220783D223530342E37343130373732313432383638362220793D2237322E3035313034303435313633333036222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D227369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244222069643D2242504D4E53686170655F7369642D36393442374132412D393841442D343530442D383146452D313135424335363237354244223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2232382E303030303030303030303030303134222077696474683D2232382E302220783D223432352E37343130373732313432383638362220793D223133352E30222F3E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136222069643D2242504D4E456467655F7369642D30344339463239412D304242352D343639312D383034432D373634453445304132373136223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223434382E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223439342E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223439342E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223839342E353435343431333138323233322220793D223235372E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732222069643D2242504D4E456467655F7369642D38344442433035362D303639312D343733452D383243462D443332354546373336413732223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223330342E353930383639353736373134332220793D223234342E3131323833343432313436393437222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223337302E363430313837323338373936332220793D223234332E373938343439393138373537222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635222069643D2242504D4E456467655F7369642D41323335414337362D354242452D344133382D383243342D313045453831414638343635223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223435392E333632383732303836303831372220793D2238362E3432393234353537393833383138222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223530342E373431333631313932383236322220793D2238362E3134303231303631373337343835222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336222069643D2242504D4E456467655F7369642D35313046453036322D433042432D343643382D394231372D384133383037324132424336223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E393837353134343839383930352220793D223236332E32363136333038323635313634222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E36363730323138363333373736372220793D223336382E37303337303636343732373932222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143222069643D2242504D4E456467655F7369642D30443235384332342D314631392D343233332D413937362D413044384342394441454143223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2236302E302220793D223234332E37303337303339393831383338222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223132302E302220793D223234332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042222069643D2242504D4E456467655F7369642D34454238313431392D314141372D343937452D413545452D453541454631374335453042223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223337342E37343130373732313432383638362220793D2238362E3236373439303636383038333235222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223432302E31353431323036393235343737342220793D2238362E3436343038333932393839333932222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437222069643D2242504D4E456467655F7369642D33334642463234452D464537302D343730412D394442352D394231383831453133383437223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223631302E3039303838323633363434362220793D223234332E3834353738353439363831313337222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223731352E393838343436343031363631392220793D223234342E3134363730393038313632323632222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146222069643D2242504D4E456467655F7369642D34373638373538312D333535422D343335342D383433432D433330343233333238364146223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223735352E313035353637393030353031362220793D223234342E3134333537373431353930353333222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223838302E3534353531303937373036392220793D223234332E3734373836373831363239343733222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144222069643D2242504D4E456467655F7369642D44413934353339452D463639342D343041312D424534412D424343433144394244313144223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E303837373235313633333532342220793D223130352E3730343339323530323536373534222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223433392E383533313635313630393039322220793D223133352E3030303434383731313033393938222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130222069643D2242504D4E456467655F7369642D30443039333043392D394241312D344636382D383545412D333834453136423430394130223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223238342E32343236393939353539333433372220793D223232342E34363130303430343232343934222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223139332E34393435373938303736303230372220793D223137322E3130323038303930333236363038222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442222069643D2242504D4E456467655F7369642D37463032463244352D413642412D343233342D413732342D334638393844323335413442223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E35343534343133313832323331342220793D223137322E3130323038303930333236363038222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223339302E353435343431333138323233312220793D223232332E3730333730333939383138333738222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332222069643D2242504D4E456467655F7369642D39394343413337462D413233352D343835332D383437322D444532333341443245443332223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223334302E3534353434313331383232332220793D223430382E37303337303636343732373933222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223430382E37303337303636343732373933222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223136392E39393939393939393939393939372220793D223238332E37303337303339393831383338222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935222069643D2242504D4E456467655F7369642D46423539344242452D383030352D344544432D423343382D393738314544323236433935223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223236332E32303337303339393831383338222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223733362E303435343431333138323233312220793D223430382E37303337303636343732373932222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223434302E35343534343133313832323332352220793D223430382E3730333730363634373237393236222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334222069643D2242504D4E456467655F7369642D41453541454438342D303734362D343738372D393836462D364137393237433334433334223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223431302E31303138303630343037373735352220793D223234342E3134373333393237353632393338222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223531302E30393038383236333634343631372220793D223234332E3835313539323539373636343134222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244222069643D2242504D4E456467655F7369642D30413541464638362D414541342D343231322D423146342D393237354134343036433244223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223231392E39393939393939393939393939342220793D223234332E393230313534323134363334222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223236352E343133303433343738323630382220793D223234342E31313637343734373634343437222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D227369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938222069643D2242504D4E456467655F7369642D33453941414432332D343444412D344138352D383242442D443643383330413443343938223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233332E32353935393536373832393732352220793D2238362E3035313034303435313633333034222F3E0A20202020202020203C6F6D6764693A776179706F696E7420783D223237342E37343130373732313432383638362220793D2238362E3035313034303435313633333034222F3E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E, + 0); +INSERT INTO `act_ge_bytearray` +VALUES ('302554', 1, '请假流程.process_leave.png', '302552', + 0x89504E470D0A1A0A0000000D4948445200000396000001F80806000000316A727D000062194944415478DAECDD097C54D5FDFF7F5CEBBFF5E752BF55DBAAB5D65A977EADD6B57611BFB5162B5AA424933B4920ECC862485804110822A8280209680111152C8A451414902433804650401417108CB2C85264515C5204BDFFF3B9B967B8339949662699C9CCDCD7D3C779CC649604CFDC39E7BCEF39F7DE162D80CC77FCB5D75E3BFBDC73CFFD5ADD3729140A8542698A72D65967FDF7861B6E582CFD0C5D2D0000191E2ACF38E38C8D37DD74D3772B57AE346B6A6A4C00001AEBE0C183E63BEFBC63B66BD7CE3CEDB4D33E215C020090C18E3BEEB87B6EBCF1C6830C81000089D2B66DDB43279D74D2787A5D00003237586E90994A00001265DDBA75E6F1C71FBF9D5E170080CCC5F257004042C9B2D816B5C75D0200804C0D960000241AC112000082250000044B0000D03CC1D21E48983939398CAA0080600900000896F10F26CE38E38C3A8FB76FDF3E103C8F39E618F3B2CB2E33DF7BEF3D465F0040B004000004CBE882A5F3B96FBFFDD6BCF3CE3BCD162CCD050082250000C8DC60F9AF7FFDCB3CFBECB3CDA38E3A2A30D328BA74E962DDBFFEFAEBCD03070E043DA70713BD7AF5322FB8E002EB7E595959D860D9AF5FBFC0FB9CBFE7D1471F0DFA9DBB76ED32FFF18F7F041EEBD3A78FF57AEDF3CF3F37F3F2F202CFCF9D3B37F09CBCF7C61B6F0C3C273F37F4FFD7D07300008225000004CBD806050DCE4ACE9E3DDBFAF98D37DE087A9F84C701030604FD8E9FFCE42781E72FBAE822F3EDB7DF0EFB3777EFDE5DE731B94C8A04C3D07F57B76EDDAC9FB76FDF6E85CAD090AB7F1E3D7A74C4E762F97F0700102C0100205846E9934F3E092C579599BB2D5BB6840D963ACC39836568E80CF7BE480391534F3DB5CE63575E7965E0E770BFF357BFFA55D8DF77CD35D70442626858ACEFFFAFBEE70000044B00000896718834DB27B392F7DC738F757FD5AA557566FB64D96AACC1F2C4134F0C3B7B2817DC9665AFA101512F83DDBB77AFF5FC934F3E19F6DF2925D2C98242FFFFA27D0E0040B004008060598F9B6EBA2910CC4E3FFD7473E6CC9981E72444EAE7E4184A67D8935B79AD7EACBABADA7ADC7956D82FBEF822E86FC9CFA1338BFA384A59FE7AEBADB7061E2F2C2CB496C53A67175BB66C59E7EF899D3B779A7FFDEB5F03CF2D5BB62CAAFFBFFA9E0300102C01002058020040B0040000044B0000C1120000102C0100044B000040B004008060090000C112000082250000205802000896000080600900205802000082250000044B000008960000102C010000C1120040B0040000044B0000C1120000102C0100044B000040B0040080600900000896000082250000205802000896000080600900205802000082250000044B000040B00400102C010000C1120040B0040000044B0000C1120000102C01002058020040B004008060090000089600008225000020580200089600008060090000C112000082250000044B000040B00400102C010000C1120040B0040000044B0000C19260090000C11200008225000020580200089600008060999E0EAAFFE67C38C79C5F35DF5C5CB1D82C2F2FA724B1489D2F5CBAD07C7FC3FB6C8C00C1120000102CD39384CA05CB169853374F35C7EF1D4F69863279EB64F365FFCBE6860D1BD82001822500002058A61F99A92454A646B8ACACAC648304089600008060997E642926C12E358A2C8D0540B004000004CBB42361865047B004089600008060898407CB29DBC79A152B869A2BCB075945EECB630442822540B0040000044B826514A1F24173F5A281E6DB2F0D082AF2983C4728245802044B000040B02458D65BE6BD35A24EA8D465FE5B77130A099600C1120000102C0996F5079EE5958323064B798E5048B00408960000806049B0ACB7AC5C7C47C46029CF110A099600C1120000102C0996044B822540B0040000044B243058960F8A1C2CD5738442822540B0040000044B8265BD65D9B2211183A53C4728245802044B000040B02458D65B6654DF67AE7AB9EE7258794C9E2314122C01822500002058122C1B0E3D2B86D50996F21881906009102C010000C19260D960E099B067BCB9E4D5BBEA044B794C9E2314122C01822500002058122C239629DB1F6CF0184B790DC1906009102C010000C1926059679672CE7BF7986B160E8C182A7591D7C86B99BD245802044B000040B0245846354BC9EC25C11220580200008225EA0D96D1CC52D6377B4948245836C6A64D9BA804102C010000C132DD8365BCA152174222C1325E23478EB406F9720B102C010000C1328D83258560D91CEEBFFF7EF388238E302FBDF452EB76D8B0617C4141B0040000044B82258560195BA8D46152662C8F3CF248C22508960000806049B0A4102C630F950D3D0E102C010000C1926049215806C8CC647DE1513FCF31972058020080B409969B376F3667CE9C698E1E3DDAECD3A78F59505060E6E4E498F9F9F966CF9E3DCDE1C3879B53A74E353FFEF86382258560D944A1B2A1D0C8CC6578D5D5D5E6B871E3ACB6292F2FCF340CC36AAFA4E4E6E69A3D7AF430C78C1963BD0E044B0000089649307FFE7CB3A4A4C4ECDBB7AF3979F26473C58A15E6B66DDBCC9A9A1AEB79B9DDB56B97B97AF56AF389279EB05E77C71D77984F3EF924C19242B06CC4F2D7686722637D7D269B356B96D9A54B9740888CA674EEDCD99C366D1A099260090000C13211366CD86005CA01030658A1F1D0A14351BFF7ADB7DE32EFBCF34E2B64AE5DBB9660492158C6182A639D81747BB85CBF7EBDD9B56BD798026568E9D8B1635AB757044B00009072C172EEDCB9D6523199AD8C2550865AB4689135D84BD7D94B8225C1321D42A5DB97C54E9F3E3D68A9AB5EEE7AEFBDF79A3E9FCFDCB2658BB97FFF7EEBB55F7DF595B5E2A2AAAACA5A2A2B4BF99DEF93DFC3EC25C11200008265138529398652662C9BC2A64D9BCC5EBD7A998F3EFA28C19242B08CA0A113F524FBF7A48BD9B367D70994722CB82CCF8FC6BE7DFBACD7CBFB9CBFE7E1871F2651122C01002058C66BCE9C3956A88C7650162DF97D72120D99592058520896E1C360532D6375CBCCA5B427CE30585C5C6CCD4EC643DE27CBFE9DBF8F994B8225000004CB387CF0C10766F7EEDD9B6CA632DCCC65A74E9DCC356BD6102C2904CB9010A843E5B7DF7E6B9D7C466E6311FABE4C3FE6528EA9742E7F95B352EBE5AEF19265B2A3468D0A5A169B4EED15C1120000A444B01C326488754C6522C9319772EC26C19242B0AC3BB328A1F0BCF3CEB306F2721B6DB88CF4BE4C0E97CE33BFCA4C656343A5335C3A672EE5843E044B8225000004CB283DFFFCF3D660EA9B6FBE49F820A5A8A8286D9698112C0996C90A953A2CD983F8A8C3A53354EAD2AD5BB73ACB6C336959AC5C52C4794C65BCCB5FEB5B16EB3CE6D2ED4B6209960000102CA376D75D775997144906399DFF6DB7DD46B0A4B83658460A7BE142627DE132DAD767DA3197CED94A39F14EA2C3ABDB672D09960000102CA3F2F1C71F5B27EC69CC65456225CB61E518A9E61E9C2E5EBC986049B04CE836142954465A9E1A6D588C3584A6CBB2D886EAB4BABA3A68B672CF9E3D09F977C8D9629D972269EEF68A60090000523E58CA6540927D2990C71E7BCC1C33664CB30E96F4805106B2959595044B826542B6A178C25D43A131D650E9FCFB471E79644ACF5C3654A772ED49FD9A44B721C9FC5B044B000090F6C1B2A4A4C45CB1624552072AB2EC562E3F920A03585DBA76ED5A67A6846049B06CEC3614EF72D448E1F1E0C1837185CA8696E1A64B9D4ABBA19F5BB2644942FF2D55555581BF2567CC265802000082653DE478C71D3B762475A022D7B5CCCBCB4BA901AC73A6440F64099604CBC66E43F184CAFAC2E5B1C71E1B77A86CECBF2715EA54DA0DFD58539FB427D4B66DDB027FCBEBF5122C010000C1B23EEDDBB7376B6A6A923A5091BF27D7884BC501AC73A6846049B06CEC3624A531212E5CB86C4CA88C75596EAAD5A9B334D5254622914B8F38FF1EC1120000102C1B18C8A5FA00B2B90AC132F582653A6C37BAB46DDBD61A94FFEA57BF6AD4774596BF86CE54CACFF278635C7AE9A5D6EF4AA73A4D76D02358122C010020584649CE7CC88CE5E1D2A1430773F6ECD9E6810307121A2C4BDE29317BCFEF1DF8593ED39B87DF1CF6B5BD5EE8653DFFD0AE87CC1E737A98577AAF34BB3DD3CDBCA8D545E655B95735E9BF4BFECEADA36E6DF0357F2EFCB375BFD3139DCC71BBC7051EEF30AD83EB672C9DDB5043678165C632B63A65C69260090000523458CA49299AE3184BB954402A0D609D61404BF48CA57C8EFD7CFDCC31DBC658F78B2B8B23BEAEEDBD6DAD60A9439C7EFC86FE37047E1EFDD168F3BC6BCFB342A704BC9F5FF973F3B27697593FEB30DA7E6A7BF398E38E09BCA7EFCB7D839E3FF1F413CD5F5CF30BEBBE942E4F75314F39FB943AFF1EEF246FE0BEFC4E7D5F82A65B8365B86D88632C6BF52DF599031F596A8E98FE5AC432FFB56AEB755D074D8858A71C6349B0040000291A2C070E1C98F4B3C22E5FBEBCD9CFB2A8078C050505D6C5D043C3402283E5909543ACC076FC8F8EB7C2DBD1DF3BDAFAF9F4F34FB702A4F3B55D67750DCC6CCAE7FE97E2BF04EEFFE6E6DFD4F9DD123EE53999D9D4AFCB7D24D7BA95F02881F3E4334E0E0A89CE30283FB71EDA3AF0F351C71C1508AF23DE1B61FD7BE535E7FEE15C2B50CAFDA16F0E0DBC77F0EB83ADDB760FB4734DB0AC6F1B8A778630D3CE0A2B81F1B197DE89EA753D4A1E0BAAD39D7BBF32074F5E6695821EFD382B2CC1120000A462B02C2B2B33A74E9D9AD481CAA449939AFDBA7091669792112C7BCEED6905B6D0C78F3BE138F3E2D617077ED6214D42A7737652EECBEF904028F70B1716D699519400A8EF4B9095DB82E905E6A80F4759F7477E30D27A7EECCEB1E6ED2FDD1E98A194E7AECEBFDABA2FC155C268B81954E78CE509A79E1058AE2BB39B320BEA8619CB68B6A178660A13751DCB279F7CB2D9AE632981F1AD8DFF3117BCFE719D59CA992FBF673DBF7EF3EEDA99CD092FD6A953FDFFD66D7019D7B12458020080540C96D5D5D5668F1E3DCC43870E256DA0D2B1634773FDFAF5293FA06AEE60294B64255CCA72D9332F39D30A88F21AF959BFE6EE75775B033F99D97C60C703817028C12F6B6C9675BFF38CCE11672C753894D7848652F977CADF0B172C65C672E02B0303CB79F5E3F237DDB214361E0DCD18461B1A630D973AD40E1A34A859FEBF75B03C70E06083AF1B3AEDD5C0CF4BDEDC6C963CF69A552484DEFEE03CD330BC56D893E5F47BF6EC49C8BF77DFBE7DD6F1E73A58A6437B45B0040000CD1A2C459F3E7DCCD5AB57276590F2C61B6F58C1321D243258CA67F8872E7FB0C29E3EBE511EBBAED7757596CDCA73121A25C8C971987A76512FA3D5B3877A06527E8FCC20EAB0A7672965C6529E1FF6F6B03A41F19CABCFA9336329C75B86CEA0CA497BE4354699113694BAE918CB78459AB98C352C46FBFAE60E953A30CEF6AD0FDC1FFCCF6541C7554E7B716DD860596307D1E232BF39C87E4FFBAE7D02816FE6CC9909F9F7CA325CFD37D2A5BD2258020080660F9632882A2C2C4CCAACA51CAB346DDA345707CBBB56DD65151DC66E1A7293755F02DF3D1BEEA913FAA41495175927EE9163281B0A71CE594709983A30CA6CE505D75F5067796BB4C1524E0E2467B36D11B2D4D6192CF5F2DDD0FF0F8265DD99CBD065A95DBA748979796BB870D9AD5BB7A867489B2B58FE7BC90741CFE9E32F438365B8F73B439FCC5A36F5497CE4F7C9EFD57F235DDA2B8225000068F660691DBBA406A32FBCF042420728322094BDFFD11E939689C1528E6D94B0274B5B5BDED6D29A89D4414C429B2C91BDA6C33575DE27814DCEF81AE9A43BCEF2FD93BE6FFD7E39D6517EBF7EBDCC58469A410D174AE5A43C3A00D7778CA5FCDBF4B25839C18F044DE7D96B0996F52F8BD527F47186C4584EC813E97DA97449918682E553E5EB1A0C96FD27F9AD194E6BD6B24BAF40F02B2E2E6EB24B8FC82546060C1810345B992EED15C1120000A444B0946388E44C8C1B366C48C8E0E4A38F3EB26601D6AC59933603AAA60E96F76FBD3F705911097F57E45C11F4BCF3B21DCEE327E56CB112D89CD7B094C72FF9FB2581FB1222F56CE2A9E79E6A2D7F9520AA2F3FD2C23EC652DF9713023534DB195A6419AD5E6A9B3F393F68465582A4DCDE38F8C63A9741215846BF2C5642A1ECE489F51222A1EF6BECF533131D2CFB4D5A12B414564EEA134BB01C5CF6A269E41E3E0672F8F0E18D0E97122A478D1A15F89D72ADDD746AAF08960000202582A5983E7DBAB51C4FAE33D99476EEDC699D0823DD969425F23A9672B21D1DCAE458CBDF77FA7D60F62FD27BA2990594E017CBEB63099652F4196A9D27EC719E4C285125538365B870998865B6A9162C9F5BB631E8B97FBEF076BDC1B272F516EBB223424268F1C425567BE5BC8EA8CC5CC6BB2C56DEE79CA964092CC11200008265234D9E3CD9ECD4A993F9C1071F34C9EFDBB871A3152A478F1E9D7603AA44064B0AC13211E1B2A9436A22826543AF0B0D96CF541C0EA4231F7F2D70FFAEA9AF5AED554E8E1174CCA59CD047CEEA1A0D799D2CD1771E5329251DDB2B8225000048A960A9672EF3F2F2CC7FFFFBDF8D3AA18F0CD8BC5EAF35F84B47044B8265323576F96AAA2D7F0D0D8C53E7BD1DF6B9CFBF3A600E7C64A9351329AF9BF8DCE1E5A79B77EEB71E7B7FD39EA06331777F5E1358F6DB7DD894A070A903A65C7B72C99225D66CA45E262BCB5DB76DDB6656555599A5A5A5D6F27FE7FB64F96BBAB657044B00009072C152C831975DBB76B5CEE2BA6AD5AA98DEBB62C50AEB782F39F1453A1FA344B024583657B88C75C631954ED41329583E5DB92EE2F3727D4B798D94D0F7C9352CAD1D5E0BDE09BC46CAE819CBCD11D3ABACFBABDF7EC75AC6EF0C89B196746FAF08960000202583A53663C60C6BC0267BF6EFBBEF3EF395575E313FF9E413B3A6A6C67AFEEBAFBF3677ECD861CD003CF8E08366FBF6EDAD019AECF54FF7B329122C0996E9B02C365597BF3607DD5EC51A2833A1BD2258020080940E965A7575B53976EC58B367CF9E758E4792E5AE32B3294BCF64A63353102C0996A91E2E9F7CF249EB7583060D2201B9BCBD2258020080B408966E44B02458A6C2B2D848CB5BF5D95F099520580200008225C19242B08C79E692E5AF20580200008225C19242B08C3B5C122A41B0040000044B822585601977B8BCF4D24B099520580200008225C19242B08C8F1C5329DF7D39010D40B0040000044B8225856019974D9B36112C41B0040000044B82258560D938044B102C010000C19260492158122C41B0040000044B8225856049B004C1120000102C41B02458122C0182250000044B102C0996044B80600900000896044B0AC1926009822500002058122C29044B8225089600008060098225C1926009102C01002058826049B0245802044B000040B02458520896044B102C010000C19260492158122C41B0040000044B102C0996044B8060090000C112044B8225C11220580200008225C19242B0245882600900000896044B0AC13211C1B262E52673C4F42ABBBC6695F9AF55078AF3B1BEA53EB3A8D41FF43BE4B1818F2C0DBC2E5CD1EF7D70D6CA7AFF3D2BDEDD6EBD6EE7DEAFF87008960000806089508B2B1613EA089629192C6B0E1C0CFB9C04BCFE939634F83BE4758FBDF44E54AF1B3AEDD5A0C724400E9EBCCC2ACE007AD7D4576BEF97F9AC9F41B0040000044B280B972D34A76E9E4AB06BE6327BD36CB3B2B2920DB281A5B095ABB758816EC99B9BA30A8C6F6DFC8FB9E0F58FEBCC52CE7CF93DEBF9F59B775BB7231F7FADCEFBBFFDF6DBC0EFF9E70B6F5BF73FDCBAD7FA79F11B9B825E03822500002058BADAC6EA8DE6CBFE970997CD1C2A2B2A2BCC0D1B36B8721BECDEBDBB1524EB2B1D3A74300F1C386885BA6897A4EA607920C2CC67A4194B09AD258FBD66153D3B59A45EA3672D6569AE5E8E2B3F1797F9694808960000806089EAEA6AD3E7F3594B3129C92F3253E9D65029962D5BD660B09C3D7B7660E650CF34F69FE437EF7BEAF57A03E36CDFFAC0FDC1FF0C5ED63AEDC5B56183A55E822B817190FD9ED019CF221536CBFEFD268D07C1120000102C01A48AAE5DBB460C95050505E6538BDFB102608D3D6B39755EEDD254098EF2F3FB9BF634182CFFBDE483A0E7F4F197E18EB10C7D7FB8E7E4F84B102C010000C112401ACC5A8E7A648E15E4F67D511308753A580A39DE511E7BE05F6FC4142C9F2A5FD760B0945951E719689D339EF7CE5CC10747B0040000044B00A924DCB19685E3CBCD810F2FA913F89CC152CC78F9DD3A3397A1C1B2DFA42541C1504EEA43B004C11200008225800C9DB5340CAF15DE463D32376CE00B0D96424ED453DF8CE573CB36063DA7CFF41A2958CA1968F549822484164F3C1C70E5ECB09FECFA920F8D60090000089600524D8F1E3D42CE047B206CB0D4A1B03EF51D2319FABAD060F94CC5E140AA2F45A2AF63293EFFEA8039EFD50FADC70898044B000040B0049042E40CB93A583EF7DC731183E023CFBF1555600C37B3A983E1C047965A3391F2BA89CFAD093CB779E7FEC0B25AE7B198BB3FAF09BAB6A5044A799FDC07C1120000102C01A4107DAC65B8D9CA5867229FAE5C17F179E7753143DF27D7B014D317BC13788D94D133965BD7B194FB124EE577481005C1120000102C013413B986EAB871E3CC9E3D7B9A797979A661188119CBDCDC5C6B69EC983163ACD701044B000040B00410306BD62CB34B972E112F3112AE74EEDCD99C366D1A9507822500002058026EB67EFD7AB36BD7AE3105CAD0D2B1634773EDDAB5542608960000806009B8CDF4E9D38396BAEAE5AEF7DE7BAFE9F3F9CC2D5BB698FBF7D71EAFF8D5575F99DBB66D33ABAAAAACA5B2F9F9F941EF93DFC3EC2508960000806009B8C8ECD9B3EB04CA9933679ABB76ED8AEAFDFBF6EDB35E2FEF73FE9E871F7E98CA05C1120000102C0137CC543AC3607171B1353B190F79DF800103827E1F33972058020000822590C1E4984AE7F2D7E1C3870796BBC64B96C98E1A352A6859EC9A356BA86C102C010000C112C844CE33BFCA4C656343A5335C3A672EE5843E00C1120000102C810C239714711E5319EFF2D748E4F7398FB964492C0896000080600964F06CA59C7827D1E195594B102C010000C112C820D5D5D541B3957BF6EC49C8DF91B3C53A2F4522C77402044B000040B00432805C7B5287BD3163C664CCDF02C1120000102C012449CF9E3D03616FC9922509FD5B55555581BFD5BD7B772A1F044B000040B00432415E5E5E20EC35F5497B426DDBB62DF0B7BC5E2F950F8225000020580299C079EDCAA6BAC4482472E911FDB7A400044B000040B0043240B2831EC112044B000040B00498B164C612044B000040B0047018C75882600900000896001A85B3C282600900000896001A85EB5882600900000896001AA5BABA3A10F6727373CD3D7BF624E4EFECDBB7CFCCCFCF0FFCADF5EBD753F9205802000082259029BA74E912087C3367CE4CC8DF98356B56E06F74ECD8914A07C1120000102C814CE20C7D326BD9D427F191DF27BF57FF8D69D3A651E92058020000822590693A77EE1C087EC5C5C54D76E911B9C4C880010382662B0F1C3840858360090000089640A691631E9DD7B41C3E7C78A3C3A584CA51A346057EA7FCFE356BD650D92058020000822590A9A64F9F1E08817AE632DE65B1F23EE74C254B6041B0040000044BC025264F9E1C1406E5D84839A18F9CD5351AF23A3966D3794CA594D1A34753B920580200008225E0D6994B1D30E5DA934B962CB16623F5325959EEBA6DDB36B3AAAACA2C2D2D350B0A0A82DE27CB5F25AC02044B000040B0045C468EB9745E86249E2227EAE1984A102C010000C11270B9193366C41C302550CA2C25677F05C1120000102C01045457579B63C78E357BF6EC59E7F849AFD76B76EFDEDD5A2A2B339D00C1120000102C0100044B000040B00400102C010000C1120000822500006E0A963535358C7800000973F0E0418225000099EC88238E78F7F5D75FFF8A610F002051DE7FFFFDFF1E75D4511FD1EB020090B94A2EBCF0C2F719F6000012E5D24B2F7D57F537F7D2E5020090B98E5765E5CF7EF6B355555555DB65B91200008D25FDC9DAB56B3FF9F5AF7FBD46F533EBECFE0600006478B82CB13B7E9342A1345CE41A90D40385527F39E288233E54B70F102A01000050AFACACACE355C87A4095831E8FE72B757BBB1BFEBFED6009000000008857CB962D8F360CA3AF0A585B2564D9658F7AEA08822500000000A0A150D54E95771C815297675C5407044B0000000088555656D6B92A50CD0F132875E94FB00400000000846518469E1C47594FA8945240B00400000000D417A66409ECC79182A5C7E3B99A600900000000A8574141C1499196C3CA1962099600000000806883D50C550E3882658DCBFEFF099600000000102FFB243E9FCAD257C330CAED60B99260090000000068504949C9912A542D53E576FD980A98EAC79CE9044B00000000408354882C9460A9EE1EE17CBC65CB9647132C0100000000F5722C81FD85DBEB82600900000000310AB70496600900000000885AA425B0044B00000000408358024BB00400000080B8B104966009000000008DC21258822500000000C48D25B0044B00000000881B4B60099600000000D0282C8125580200000040DC58024BB00400000080B8B104966009000000008DC21258822500000000C48D25B0044B00000000881B4B60099600000000D0282C8125580200000040DC58024BB00400000080B8B104966009000000008DC21258822500000000C48D25B0044B000000348112B3E4E899EB673E3BEFB579DF2EAE586C969797539258A4CE172E59B87BB17F711E5B6392B77D96C0122C41BF40BF000040D390C1C382650BCCA99BA79AE3F78EA7344399BC75B2B968C9A2CF2B2A2ADAB145264FE812D8BEA53EB3B0D4B7BC7082EFA948A56F99BF8DF5BA09BE87EAFBDD85E37D57C9EBFA942EFB11C112F40B14FA050040C6933DD20C1E9ABF4CD932E5407979F93AB6C8E408B704D60E960DCE5ECAEB5479DEF99804C8BE65BEA5529C01B46FA97F817DFF4B553E2358827E8142BF0000C848B2E4860E3C358A1A401C648B4CBC484B60AD6039BEE2E2C289FED6A1B39445137CDDE4F9E28915E7C96DD184CA19E17EEFE180EABF43EE178DAB38A7F6F5FE56CED7102C41BF40A15F00006414399E83CE3B6506100CD49320D2596075B02C29997D6C7DEF0F9DB12C9E50715D51A97FB6147B76727F51A96F6F60D96C59E52CEB7E6016D3B7956009FA050AFD0200C095038829DBC79A152B869A2BCB075945EECB6374FC0C20D2497D6781B542DF84CA7C4778F4072F6BADEC1B2E58964CF71F673FBE4D05CAAA70C7651696FA76A8E0393293EA926049BF40BF40BF0000404C038829DB1F34572F1A68BEFDD280A0228FC97374FE0C20D241436781AD1B2C2B0DE773FAF8CB70C75886BE3FCC739FC9F197044BD02F50E8170000AE1D40CC7B6B449DC1832EF3DFBA9BCE9F01445A88B40436EA6059E6EFDC60B02CAD5C6BCD50863993AC0A96930996A05FA0D02F00005C3B80585E3938E200429EA3F3670091EAEA5B021B3958FAD6075D6264A2BF35C1926049BF40BF40BF0000409C0388958BEF88388090E7E8FC1940A4B28696C0460A9685657E8FF3397DA6D748C1B2A8D47FBDBE6EA584501524AB03CFC9D961C72DFB31C112F40B14FA050000030806100C20D250434B60C305CB065F17122C8B26F83BE8E7F4A548F4752CE57ECF49FEE3D5CF6DADC7322460122CE917E817E8170000886D00513E28F200423D47E7CF00225545B304362458F60FF79C04C3A252DF2A6B26D25AD6EA1FAE9F2B9EB4F44C79AC5F99FF7CE7B198B73DFCCAC9CE6B5B4AA094F7C9FD340C91F32548365056B2C5D12FD02FD02F00001840442CCB960D89388090E7E8FC1940A4A26897C03A8365515965C7C8BF6FF6B1F66CA559E77DA5FED972BFB0B4B2B77E8D7526D8D2CAA9D6752CD5CF124EE57748104DC36079B92A07EB0B962ABCB766ABA35FA05FA05F0000308088586654DF67AE7AB9EEB227794C9EA3F36700918AA25D028BA8C3E5C27A82E5F2962D5B1E4D2DD12FD02FD02F00001840D4DFB9AD18566700218FD1F133804845B12C8145D4C1F2F248C1D2308C36D410FD02FD02FD0200800144BD65C29EF1E69257EFAA338090C7E4393A7F0610A924D625B088295C863BD67225B395F40BF40BF40B00000610F5766A53B63FD8E0B134F21A06000C2052054B60131A2CEB1C6BC9B195F40BF40BF40B0000441C40C81EE739EFDD63AE593830E2E04117798DBC96BDD40C209A1B4B609312DCE7325B49BF40BF40BF00004083038886F646B3979A01442A62096CD282E5D58E632B5B5123F40BF40BF40B0000841D4044B337BABEBDD40C06184034C2498D083C2C814D92ECECEC45122C99ADA45FA05FA05F406AF585009052038878070FBA30186000112799FD32EDDB98B00436B99FD30F7FF8436BC692AAA05FA05FA05F40EAF48500907203080A03886670BD2AFB541967DF467D421896C036CFE764074B4EDC43BF40A15F400AF48500C00082C200E27047AA3B50D94BFB69B41D2A4B60D3E37302FD02857E01B4B100184050184024AB236DE8F1202C814D8FCF09F40B14FA05D0C60260004161009128AD1AE830F5F3618F3361096C7A7C4EA05FA0D02F803616480BB9B9B967783C9EDE1D3A7498979797B7C9EBF57E6D9F0AFFBFEAFE16FB9A6BFDE575D4160308061029D79136D45146DC5BCB12D8F4F89C40BF40A15F006D2C523743A9B1D4B3AA6C54E50B3B43D5A8F2B1AB329461186DBA75EBB6B27BF7EE9F959696EE5DB16285B96DDB36B3A6A6C61472BB6BD72E73F9F2E55BC78E1DFB8E0A9E9FA8CAF1ABF7E5B12931806000D1ACAE8F71EF6B9DD7B304363D3E27D02F50E817401B8BD4CB50AA94DB01D28CB264668652FF6367AB30F97A6161E197AB57AF360F1D3A64464B85CC759D3B77DEA07EC72B323065D36200C100A2D93AD2D671BCEF0BE95059029B1E9F135548BF40A15F006D2C522B43A9B230863019AE644E862A2828C8EFD4A9D3D7F3E6CDFB36964019EAA9A79E7A43A5EE9DCC5E3280600091161D69D0FBAFBDF6DA292C814DFDCFA9054BB6E81728F40BA08D454AF0783C39B2D2CB1912737373CD7BEFBDD7F4F97CE6962D5BCCFDFBF75B39E9ABAFBEB2568156555599E3C68D33F3F3F343C3E517699FA1EEBCF3CE82DB6EBBEDC0860D1BCCA6F0E1871F7E9C9797F789AA982E0C20E8BC1940245C43272788CAF7BFFFFDBFDF72CB2DDF9E75D6595DE92652F7736AC2DF03FA05FA05D0C6D2C6A271A1B2B50A83079D8172E6CC99D62183D1D8B76F9FF57A799F3360A66D86EAD7AF5F4FE59B682B205A3B77EEDC61874BD7CE5C3280600091C48EB44996EEA87079131D6AEA7F4E2DD8AB4EBF40A15F006D2C9A3B54E63843657171B1353B190F79DF80010342C3657A65A86EDDBAFDA26BD7AEDF34D54C65B8994B7B59ECF90C20280C209A5CE8C90664F96A8716B12F630D7D1F2731E07302FD02FD026863696311817D4C6560F9EBF0E1C303CB5DE325CB64478D1A15BA2C367D3254BF7EFD3E9A3F7FBE9948D3A74FAF908351194050184024A4236DEDE810A7A962DAB7D176A891DE4787CAE704FA05FA05D0C6D2C6220CFBCCAF8199CAC6864A67B80C99B94C8F0C3562C488DBFAF7EFFFDD37DF7C63265AFBF6EDD7B971492C0308061049EA485BD87B594D4789A6437576A4BAB4773CCF71267C4EA05FA05F006D2C6D2C8243651BE73195F12E7FAD6F59ACF398CBB4C85083060DDA2E97144986575F7D75A91B672D194030804880481D5CB88EB1BE0E35DCEB1F0DF37A8E33E17302FD02FD026863696371385806662BE5C43B89306BD6ACF499B57CFAE9A7AFE8DDBBF7778DB9AC48ACF2F2F236C97A6406101406108DEE485BC5D04186EB50A3ED48433B549602F139817E817E01B4B170ADDCDCDC33F4097B645671CF9E3D09C94D72B6D8904B91A46E862A2B2B7BFAD1471F3593E99E7BEE91632DFB67CA9E0A55FEC000820144A2B7A1383AB4863AD4583B52E7DFFFD46D7B6BF99C40BF40BF00DA58DA58B649CDE3F1F4D6616FCC983109CD4E729D4B47B04CDD0C3562C4882D2B56AC486AB0F4F97CAFAA4A999F091B9D63CD73B9DAC0AE6600C1002251DB5048471A6D4716A9433D32CE8E34742FB16B3A543E27D02FD02F80369636966DD2F1FCB3FA354B962C496876AAAAAA7206CBD4CD507DFAF439B063C78EA4064BF5F76429ECD64CDAE81C6561B8BD1B0C20184034761B6A11FF711DE13AD40F1AD19136F6DF93D1DF753E27D02FD02F80361699BF4DAA9F37EAE79AFAA43DA1B66DDBE6FC77A46E86EAD0A1C377353535490D965F7FFDF56E55293519BAD105F66E38373E06100C201AB90D3576AF68B80EB5311D696887DACA851D0C9F13E817E817401B4B1BEBD26D52AE2DA91F6BAA4B8CD477E911C7BFA126A52BAD39C8DFCDE48DCEB97743A6CF1940308088771B6AD3A64D85DDE98D6BE49F3A32CCDED90FECC71B639CFDBB4E726307A34B565656C529A79CC2E784B4E817645BB83CFBF2A85FDFED996EE6A9E79E1AD3EFBF75D4AD0DBEE6CF857FB6EE777AA293396EF7B8C0E31DA6752058F2BDA12F44AAB7E58192ACECA44BCA565A41418199EC194BF5F70EC6F261654249F600A2D70BBDACC6F2A15D0F993DE6F430AFF45E690D0C2E6A75917955EE554D3E4049B70144BA6D3FD75E7BAD79ECB1C79A8DD81B5ADF5EDA582E1C1D712FADDBBED3F5153E274AB4A53983E579D79E17F639699FCFBEFC6CABE8BEE3C4D34FB48ADC9792FB48AEF53BEED9708FF59EBE2FF7B51E77BEFE17D7FC22F0FA2E4F75314F39FB943AFF06EF246FE07EFBA9ED03F7A59FA05FA0D01752D2A5306369EBD3A7CF37C93EC672E7CE9D3B32F8184B5D567A3C9ED62D5BB63C5A5E97EC60298D64DB7BDB5AC1528738FDF80DFD6F08FC3CFAA3D1D6E0423A7E09783FBFF2E7E665ED2E0B1A2048677FCC71C704DE9309038874DC86EC8EEB8B168939AE249E0ED5EDC758F23921ADFA85D036F9F81F1D1FF179E93B86BD3DCCBCE0FA0BEA04CBCE333A9BA79D775A9DDFE76CCBE5E7D6435B077E3EEA98A3027DCF88F74658BF475E73EE1FCEB5FA03B93FF4CDA181F70E7E7DB075DBEE8176CC58F2BDA18D454A6E93EAF6438EB10C317AF4E83DC93E2B6C5555D5864C3B2B6C3D0D608B640F20BACEEA6AF69EDF3BD041FFA5F82F81FBBFB9F937610710F29CCC6CEAD7E9BDD1121E25709E7CC6C90C209A791B0ADD2BDA888EF4D116E1CF84174B879AB267C22B2AADBCA1B0AC72965526F89E92D2B7CCDF4697A0C74A7DA62AFF71BE5F1E2B2CF52DD7AFD3A5FBD029A62E1D7A0E92F799A5CFAD7DBEBECFE9AABFB62F94D7F5295DF6233EA7C488F479398BFEACD5FD87EAFB5D85E37D5745F979A55DBF103A2329DBD2D1DF3BBADED74980FCDEF1DFAB132C7F70CA0FEAF42563778E356F7FE9F6C00E46F9FD57E75F6DDD97D74A5F122EDC3A77389E70EA0981D536B273527662B214D6D58378FA42DAE5266B9713B14D7256D8301E7DF4D105C9BE8EE5030F3CB02253AE63E9F890971B86D126420398B401840E69326BD8C2313B29F77BCEED690542B95FB8B0B04E072F03007D7FC8CA21D66DC1F40273D487A3ACFB233F18C900A219B7A138F68E36746DAE682F1C1DEAF216297CEDAE92E9FEE3227574AABC1B6587787B439F93FDFB9E77BE463ABEBE65BEA5523A0EFF57E52F2FB9F6CBDAD7F917D89DA8FCFC199F53930F606E8FE675F57D5EC13B1BEAFDBCD2AE5F082DFD7CFDACEDE8FB277D3F68454B68911D8A524283E54F7FFDD3B03B29E5774A180DED53A4EF39EE84E3C2BE5E76380E7C65A0755FFE5DFAF1ACB1591C63E9DE60495F48BBDCE4ED7222B649AE6319C6EBAFBF9ED5A74F1FF3D0A143490B96050505DB54A59C9D210D617D7BD4923E8018B36D8C152EA5833EF39233AD80281DBAEEB0A5DCBDEE6EABE19499CD07763C10088712FCA433D783831611662C194034CF3614E35ED2682FF81C6B87AA9720B549A7EF6951A9FF7AE9988A27545C17558738BEE2E2C289FED6417B58873CB87196AF7AA2F57B26569C27B745132A67D409B6252547EADFD3EEF6095297FBCEBBA46597DAD7FB5B395FC3E7D4440398309F970C408A26F8BAC5F2791596FAEFB0B6977115E744F8BCD2B25F88747CA5EC6094FBF52D87D5F7254C4AD127F291F785865279EC9CABCFA9B3C35102E9C5AD2F0EDA012AC7DCCB6B8C32236C9FE2F643245C1A2CE90B699713D62E27629BCCCDCD3D43BDC63A6F8CBA6FEED9B32721B969DFBE7D667E7EBE3358A676861A3162C4D7AB57AF4E4AA85CB366CD1E5521AFBAED4B96CC01848449E9CC25344A902BAE2C0ECC2E4A91E54F7AF650CF404A232A3388BA53D7B394326329CFCBB1360C20524EA4BDB5D176A4B176A8FAEFA555475A5232FB587BAF68544B69748728EF8B654FAB84561560674BB1F7AAEE2F2AF5EDBD216FD070796DC1F0994B034B726BDFBB95CFA9E906304DF5790596679555CE0AF379A56DBF10BA0C560E77D06DF02D77DF12F41A3984E1C21B2EB44AB893F7B4BAA395795DAFEB02AB5B62ED17E4D8FE92774AEAAC9471F60B7AF58D3E3910FD02E80B699793D12EC74A2E3DA203DFCC993313929D66CD9AE50C95AFA4FC06307DFAF43103060C48CAAC65F7EEDD3F561F421EC132B17BA3A5149517598308BDD7B9BE10E7ECE02560EA8181CC56CAC91B4297B732804819B2E72E74294E8716B15F9B2B5C87DA3E86BDC2A9DDC195FAEF08EC212DAB7C5FDD7FB8DE8E6E4265BEA3D3F3072FC7A9EC1BAE43D44B70D563DB544758E5DC4BDB71D853BE5F5E7AEDE7BDC72EDAAB3ACC917C4E4DFBF936F5E7A5DF5F58EADBE1F8BCD2BA5F70B6DDCEF67CD0F241412754D3E1538AF38CE20D1D63A957AC84EB53E498FABB56DDD5E02112D217E8552D126EA59FA86FA92EFD02E80B6997532058B6D1A14F662D9BFA243EF2FBE4F73AAEA1991E196AC89021FBE7CF9F9FD050F9FCF3CF6F97D9CA189739102C1B71BCA5F374F2F5054B39D64696CECAB18E32D3A95F2F3396E15ECF0022E53A54E7490C9C1D632C177C8EF4BEB4BDF07351596547E9B8A4B3B23B3AEBB804E9F0E4E77E65FEF31BEE102B8DE0905A7BDC48B8634342DF1FFA39DD36E6C5EFBA8F7EEE1D3EA7440E609AECF392E73E93E37C32A55F6811E1046EB203519EFBE59F7E19B4FC55074C7D9928BD43506629C3B5F391765686165905A357CAE44FCE0FDA21AA67546F1C7C639DB398D32F80BE907639D1ED723C54B6F1EBE0575C5CDC64971E914B8CC8C49F73B6326D32D4DCB973FFDCBD7BF7EF366CD8909050B969D3A643797979BB55D23EDF8D5FB2640D20F4F193A79F7FBA15D89C7B9CE5F14BFE7E49E0BE84483D9B2817BE96E5AF1244F5E547F49E6D7D5F4E08C4002265852E053AC2DECB1AEB69D343DFD72A5D3B52E9C86A97BF2E38C1D151050E7897E334ECC7C6C7D42196F93B37D8219656AE759E81D6B9A7F62FDE0107F89C92388069E4E7A5063093D3BD5F9013AFC909D3E4B8FA48AF919D85D20EEB338AEB223B1AF5D9BCDBDCD326A6101BA95F90A24F30E73CDEDE792E80641782257D216D2CED722382E5D9AA7CAA03E0F0E1C31B1D2E25548E1A35CA192ABF48BB0CF5F8E38F3F2A27F2D9B56B5793864AF97D9D3A75DAE3C625B0CDB567DAB9C7B9A1D748F08BE5F50C20D2A6436D8ABDBF6979C63B396B5C51A96F55988E2EE84C6A4565953D42672EC32CE1591F746AF489FED68DE9103B0C7DF2453EA7440E609AF6F3CA8460492158BA3C5CD2C6D22E279CC7E3C9D127F2D13397F12E8B95F785CC549A699BA19E7CF2C939122E9B6AE672D3A64D66972E5D3E53153EC8CD5F3206100C20D2AC434DCB0B3EEB13F5C812D8081D5D9D5374CB0906EAEB100BCBFC9EA03DADF619EA22758872065A7D9220E93C5507581D784ECE6A376ED98FDDFE3925720093A0CF8B7E817E01F4857041BBDC182A001638C3A51C1B2927F491B3BA467BF65739518FF3984A29699FA1A64E9D3A5185C1EFE498CBC69CD067C18205FFEDD0A1C36752D16EFF923180600091448D5DB293914B7E9C9D59B41D6283AF0BE9108B26F83BE8E7F429D4F5F5B7E47ECF49FEE3D5CF6DE5B19F9D7FA597CFA969073089FCBC123190A15FA05F007D21ED726AB5CB8D253397AAEC730643098A729DCB254B9658B3917A99AC2C77DDB66D9B59555565969696CAE5188302A52C7FCD980C3565CA942B860C19B25BA662DF7AEBAD9802E5DAB56B650AF7B3F6EDDBAF74EB31950C201840A448871AEB5ED68C3D39416D47E71B1C658718F6E2C3D2A1C9125B6B0FAAB51CC73F5C3F573C69E9997A59ADF31892DB1E7EE564E735B9A42394F7C97D3EA7261BC024EBF3A25FA05F007D2132B85D6E0A72CCA5F332247196573232433DF4D04377297B6579ECA38F3E6AAE5CB9D2DCB16387595353638548B9956328257CCA746FAF5EBD6ABA76EDFAAE246C379EFD95010403881412EB129E8C5EF213CB1ED4704B6935E77531EBBCAFD43F5BEE179656F6D6AFB1CE60575A39D5BAFE96FA593A55F91DD281F23935CDE79AE4CF8B7E817E01F485C8D076B98903663B3B601E8C2550BA22433DF1C413973EF0C0034F0C1D3A7463B76EDDBEC8CBCBFBD69EDE3DD4B973E72F54F05CADCA2849E97CA51840308048BB0EF57255BE68C1059FF99C40BF40BF00DA58DA5834199595CE5001B3AFCA48CFAAF2B12A358E20B95595F9AAF42743810104038874D0CAEE285BD5F3FCA774A47C4EA05FA05F006D2C6D2C12CF0E9326AB3BC1008201443A8AB4B796253F7C4EA05FA05F2058D2C6D2C622493C1ECFD57A79AC61181CC70B06100C2032A243A523E57302FD028560491B4B1B8BE406CBB98EA5B02BA9113080600091EE1DEA383A523E27D02F50E81768636963913C2A485E1E7A321F1534D9FEC000820144DA926517FA5217E07302FD02FD02FD026D2C909C60393FCC99605772AC25184030804867275105E9F13949A74335D02F50E817401B8BB40F959747BAF48861189C340A0C2018400009EF88D85EE91728F40BA08D45FA6F6B0BEBB97EE5726A080C201840000C7A40BF40BF00DA58A0BEED2CE26C25C75A820104030880410FE817E817401B0B44B39DCDAF2F54728658308060000130E801FD02FD0268638198E4E7E7FF406D7B5F52136000C1000260D003FA05FA05D0C60271C9CACA3A5E6D7B5F50136000C1000260D003FA05FA05D0C60271B9E5965BFE9F6118FBA909308060000130E801FD02FD02686381B8E4E6E69EA0B6BDCFA909308060000130E801FD02FD02686381B86465659DA8B6BDCFA809308060000130E801FD02FD02686381B81414149CE4F178F651136000C1000260D003FA05FA05D0C60271F17ABD27AB6D6F2F350106100C2000063DA05FA05F006D2C1097ACACAC1FAA6D6F0F350106100C2000063DA05FA05F006D2C1097F6EDDB9FA2B6BDDDD404184030800018F4807E817E01B4B1405C0CC3F81FB5ED7D4A4D800104030880410FE817E817401B0BC4252B2BEB476ADBDB454D800104030880410F1A6D71C562DAE4D42835AA5F38C816491B0B248B6118A7A96D6F27350106100C2000063D68B4054B17EC98BA792AED723397C73E7CEC69D52FAC638BA48D0592252B2BEB74B5EDEDA026C000820104C0A0078D56EE2BFFFBCBFE973F537DC3D7B4CFCDB3A3D1EA132ACA37575454B4638BA48D0592252F2FEFC76ADBDB4E4D800104030880410F9A846A8F5A979797AF949514B24C9F92D42275BE8E3E8136965A40336C773F51651B350106100C2000063D00401B0BC4252B2BEBA76ADBFB849A806B6567675F4F030C30E80100DA58207EB9B9B967A86D6F2B35013737BEAFA8F21D350130E80100DA5820EEEDEE4C55B6501370EB17A0A534BE520CC3F803350230E80100DA58207659595967A96D6F333501B736BC7E47B02CA74600063D00401B0BC4CEEBF5FE4C6D7B9BA809B88E0A92AD74A864D61260D00300B4B140A3B6BBB355F9989A801B37FE574283A52AF3A91980410F00D0C602B1C9CACAFAB9DAF63EA226E0B606B75D98506915AFD77B09350430E80100DA58207A6A0C7D8EDAF6AAA909B8ADC17D2752B0340C6316350430E80100DA58207A595959E7AA6D6F233501D750C1B14DA450A98BC7E3F935350530E80100DA58203A5EAFF7976ADBDB404DC03554685CD350B054E5596A0A60D00300B4B140D463ECF3D4B6F7013501D7320CE37FD497E0536A0260D00300B4B1407CB2B2B27EA5C6D5EBA909B8567E7EFEA9AA01FE0F350130E80100DA58203E2A549EAFB6BD75D4045C2B2F2FEFC7EA4BB09D9A0018F400006D2C101F8FC77381DAF6DEA726E05A5959593F555F824FA80980410F00D0C602718FA92F340CE33D6A026E6E7CCF54650B350130E80100DA58203E2A545EA4B6BD77A909B896D7EBFD99FA126CA22600063D00401B0BC4472ED727D78AA726E05A5959593F575F828FA80980410F00D0C602F1C9CDCDFD5F152ED75213702DF505F8856A803FA42600063D00401B0BC4C7308C8BD5B6F7363501D7F27ABDBF545F820DD404C0A00700686381F8783C9EDFA86DEF2D6A02AEC5C55C01063D00401B0B347ABBBB549537A909B816D7DC0118F400006D2CD0E831F56FD5B6B79A9A806B716A6480410F00D0C6028DE3F57A2F53DBDE2A6A02AEC519AC00063D00401B0B347ABBBB5C9595D4045C8B038D01063D00401B0B347A4C7D85DAF6DEA026E0E6C697038D01063D00401B0B3482D7EBBD526D7BAF531370F39780F5E000831E00A08D051AB7DD5DA5CA0A6A02AEC5B43DC0A00700686381468FA9AF56DBDE726A026EFF12B0770560D00300B4B1409C0CC3F89DDAF65EA326E0E6C6F71A55AAA80980410F00D0C6028CA981B81886F107F52578859A0018F400006D2C109FECECECDFAB6DEF556A026EFE12FC4985CBA5D404C0A00700686381B8B7BB3FAAB28C9A809BBF042D55F1531300831E00A08D05E2C3640D5C4F7D01FE4F35C095D404C0A00700686381B8C7D4D7AA6D6F093501D7CACECEBE5E7D11CAA90980410F00D0C602716F77AC0284BB793C9E1BD497E0656A0248EEA0A7A8B4F286C2B2CA595699E07B4A4ADF327F1B5D821E2BF599AAFCC7F93BE4B1C252DF72FDBA7045BF57DD7FA8BE7F4FE178DF55F2BA3EA5CB7EC4A703806009C42E3B3BFB3AC3307CD4045C4B7D015AA906782135012477D05332DD7F5CB8E7EC10F96E43BFC30E96B747F33A559E773E2601B26F996FA994E0F0EA5F60DFFF5295CFF8A400102C81A8C7D41C5E0677F37ABD7FF3783C2F511340F30F7A8A4AFDD74BC02B9E50715D54C1727CC5C58513FDAD4367298B26F8BA59BF6762C579725B34A17246E8FB4B4A4A8E3C1C50FD77587F7F5CC539B5AFF7B772BE060008964083DBDD9F55A9A026E05A2A54B6565F82F9D404D0BC839E9292D9C7DAB38B512D49D5C152DED7D0EB9C3396125A55809D2DC59E9DDC5F54EADB1B58365B56392BB024B7F6BD5BF9C400102C81FA71DE12D0F8E6E4DCA2CA0BD404D0BC831E3D731898692CAB7C5FDD7FB8DEC038A132DF111EFDC1CB5A2BFB860B967A09AE7A6C9B0A9455E18ECB2C2CF5ED50C173249F14008225101D152AFFA2B6BDC5D404DCFC2568E3F178E6521340F30D7A8ACA2A3B4A0094D06707C6FE56F853C1517EEE57E63FBFE16059690487D4DAE32FC31D6319FAFE30CF7D26C75FF24901205802D1E18498E04BE0F1B4555F8239D404D03C831E0984B5CB5F179CE0087CFD03A17382BF95FDD8F898826599BF7383C1B2B472ADF30CB441339E65BEC97C520008964074BC5EEF5FD5B87A1135013737BEED5479969A00923FE891B3AF1695FA5685098CFD9D8F159555F6089DB90CB314767DD0254626FA5B132C01102C81E4E04A0BE04B6018D9EA4BF00C350124F37BE7B54ED2234B60C306BE906029E4443D615E17089685657E8FF3397DA6D748C152CE40AB4F1224215405C9EAC0737276D871CB7ECC270580600944872B2D8001AEA21AE07F5113406A0C7A9CA1B03EF51D2359E77521C1B26882BF837E4E5F8A445FC752EEF79CE43F5EFDDCD67A8C800980600944B3DDDDA4CA8BD4045CCBE3F1E4AA6C39939A00522758F69DE01B1C65B0EC1FEE390986B2C4D69A89B496B5FA87EBE78A272D3D532FAB751E8B79DBC3AF9CECBCB6A5044A799FDCE7130340B0041A1C5373093FB8BEF1CD57E5496A0248A56019DD4C64B8A5B49AF3BA9875DE57EA9F2DF70B4B2B7BEBD75867822DAD9C6A5DC752FD2CE1547E8704513E3100044BA07E8661DCACC2E53C6A026EFE1274500DF0E3D404C0A00700686381B8B73BAE0D0F77F3783C1D55B87C8C9A0018F400006D2C10F798FAEF6ADB7B9E9A809B1BDFCEAA3C4A4D000C7A00803616888F61186D54B89C4B4DC0CD8D6F5755A6501300831E00A08D05E2DEEE6E55E5396A02AE651846778FC7F34F6A0260D00300B4B1407CD478BAADDAF6E6501370F397E036F52578989A0018F400006D2C101FC330FEA1C6D5FFA626E0E6C6B7972A13A90980410F00D0C602716F77ED5479969A806B1986D1C7E3F194521300831E00A08D05E2A3C6D3596A5C3D9B9A809BBF0485EA4B309E9A0018F400006D2C10F776E751E5696A026EFE1214A9F210350130E80100DA58203E1E8F27C7308C59D4045C4B7D01FAA92FC283D404C0A00700686381B8C7D486DAF6FE454DC0B554A81CA0BE0763A80980410F00D0C602716F775E559EA226E0E66039487D09EEA32600063D00401B0BC43DA6CE350C632635013737BE77AA328A9A0018F400006D2C101F152AF3D4B637839A809B1BDFBB5419494D000C7A00803616887BBBCB57E5496A02AEE5F17886198631829A0018F400006D2C10F798BABD1A533F414DC0CD8D6F892AC3A90980410F00D0C602F151A1B283DAF61EA726E0E6C6F76E5586521300831E00A08D05E2DEEE0A54994E4DC0B50CC3B8C7E3F10CA12600063D00401B0BC4478DA73BAA71F563D404DCDCF88E565F82C1D404C0A00700686381B8B7BB4EAA4CA326E0E62FC17DAADC414D000C7A00803616888F61185D3C1ECF546A026EFE128C515F8201D404C0A00700686381B8B7BBAEAA4CA126E05A2A543EA8C2653F6A0260D00300B4B140DCDB5D375526531370F397E021558AA80980410F00D0C602F1310CA3BBC7E3F9273501377F09C6AB2F4121350130E80100DA5820EEEDAE872A8F5013702D152A4B55B8EC434D000C7A00803616887B4C7D9BDAF61EA626E0E6C677A22ABDA80980410F00D0C602F1310CA3A70A9793A809B8B9F17D58F6B0501300831E00A08D05E2DEEE7AC9840D3501377F0926CB59ACA80980410F00D0C602F1F1783CBDD5B657464DC0CD5F82A97241576A0248D80067BE0C721A282BA929002058227DC9394BE4DC25D404DCDCF84E53A513350124EC3B76B92A07EB0B96AA236A4D4D0100C11269BDDDDDAECA046A026EFE124C57A5809A0012FA3D5B584FB05CDEB265CBA3A925002058227DC9E5FBE4327ED4045C4B7D019E505F84F6D40490D041CEE59182A5FA0EB6A18600806089B4DFEE8A5479889A809BBF0433D4C0368F9A0012FE5D0B77ACE54A662B01806089F4E7F1788AD5987A2C35013737BE4FA9E2A52680847FD7EA1C6BC9B1950040B0446650A1B29FEAD71FA426E0E62FC12CF525C8A12680C453DFB5B9CC560200C11219B9DDF557E5016A026EFE123CA3C2653635012425585EED38B6B215350200044B644C1F3F40F5ED63A809B8B9F17D569576D40490B4EF9C75AC25B3950040B044E650A172A00A97F753137073E33B477D09DA521348752566C9D133D7CF7C76DE6BF3BE5D5CB1D82C2F2FA724B948BD2F5CB270F762FF624EF805806009046F7777A8721F3501D79263BEB8DC01D28184CA05CB169853374F35C7EF1D4F69A63279EB6473D192459F575454B0D20100C112383CA61EA4C6D4F752137073E3FB822AB750134875325349A84C8D3265CB9403E5E5E5EBD82A01102C815A2A540E56DBDE686A026E6E7CE773C903A403598649A84B9DA282E541B64A00044B20B0DDDDA9CA286A02AEA542E54B5EAFF76FD404529D1CE347A04BA960C9C00D00C112383CA61E6218C63DD404DCFC2558C4650F9049C172CAF6B166C58AA1E6CAF2415691FBF218619060098060092470BB1BAACADDD404DCFC2558AC82E55FA8096442B09CB2FD4173F5A281E6DB2F0D082AF2983C472024580220580289E0F17886A931F5086A026E6E7C2B54F93335814C0896F3DE1A512754EA32FFADBB0984044B00044B2051DBDD70554AA809B8966118BEECECECEBA8096442B05C5E393862B094E70884044B00044B2041DB5D89844B6A026EFE122C51E1F25A6A0299102C572EBE2362B094E70884044B00044B20116419AC2C87A526E0E6C677992A7FA42640B0A4102C01102C81B8B7BBBBE5043ED404DCFC2578353B3BFBF7D404322258960F8A1C2CD5730442822500822590A0ED6EA42A77511370F397E035C3307E474D201382E5B2654322064B798E4048B00440B0041241AE6129D7B2A426E0E6C677852A575113C8846039A3FA3E73D5CB7597C3CA63F21C819060098060092468BB1BA5CA9DD404DCFC2578C3E3F15C414D201382A51578560CAB132CE531C220C11200C11248E07637DA308CC1D404DCFC2558E5F57A2FA3269009C172C29EF1E69257EFAA132CE531798E4048B00440B004124185CA7B3D1ECF206A026E6E7CDF54E5526A02E91E2CA76C7FB0C1632CE535844282250082259080EDEE3E55EEA026E0E62FC15B1E8FE737D404D23558CA4CE49CF7EE31D72C1C183154EA22AF91D7327B49B00440B0049A92611863D4987A003501D7525F80B5B9B9B9FF4B4D201D836543B394CC5E122C01102C81246D770FA8D29F9A809BBF04EF1A8671113581740C96D1CC52D6377B49402458022058024DC1E3F13CA8C6D4FDA809B8B9F17D5F7D112EA026908EC132DE50A90B019160098060093405152AC7AA31753135013737BE1FA82FC179D404D231585208960040B0448A6C770FA952444DC0CD5F828D595959E752132058520896000896407C3C1ECF38C330FA52137073E35BEDF57ACFA12640B0A4102C01102C81F8A850395E85CB426A026E6E7C3F56E56C6A02044B0AC11200C112887BBB9BA0CAEDD404DCFC25D89C9595751635018225856009806009C4C7E3F1941A86D1879A809B1BDFADB9B9B9675013205852089600089640DCDB5D990A97BDA909B8F94BB04D959F5013205852089600089640DCDBDD44557A511370F39760475656D6E9D4040896148225008225101F8FC733C9308C9ED404DCDCF8FE273F3FFF546A02044B0AC11200C112887BBB7B44951ED404DCFC25F8D4308CFFA12640B0A4102C01102C81F8783C9E7FAA3175776A026E6E7CF7646565FD909A00C19242B00440B004E2DEEE26ABD28D9A809BF7AEEC2B282838899A00C19242B00440B004E2DEEEA6A8D2959A809BBF049FE7E6E69E404D806049215802205802F1F1783C530DC3E8424DC0CD8DEF17595959C7531348052D5BB63C9A6049B004008225D270BB7B5495CED404DCFC25F8EAE69B6FFE3E3581E66618469E0C06546947B024580200C11269B6DD4D53A5133501377F09FE5B5050701C3581E6929595756EFFFEFD5FFDF0C30F77EEDEBDBBA277EFDEABD4765916BA5D122CD32F58AACFF1728FC73397AD1C00C11299CE308CC7549FD7919A809B1BDF6FBA75EB760C3581649365AFF9F9F9C3E6CC99B3FBD0A14335E661FB5E7AE9A5C57979792B2474122CD32F584AA05465BE2A0719E0012058C225DBDD74550AA809B8F94B70480DDE8FA226904C8661FCE1FEFBEFFF68EFDEBDBBCD08F6EFDFBF7ED0A041DBF4D2588265EA07CBD040A90B5B3C0082255CB0DD3DAEC6371DA809B8F94BF09DBA39829A4032C8A56DFAF6ED3BF3CD37DF8C1828431C5CBC78F1B6AE5DBBFE73D1A24504BA140D961E8FE76A59F21A1A280996000896700B152A9F507D617B6A02AE6E7C255CAAF2AD3D28FC468EBB54A5464EECA3CA97EA8BB25F2E4B22D7BC54B77B55D9ADCAA7AAFC47959DAA6C57456696B6AAB24595CDAA7CACCA47AA7CA8CA46553E50BF67BDBA7D5FDDBEA76EDF51BF6FADBA7D4BDDAE51B7AB559163EBDE50E5755596ABF29A2AAFAAF28A7ACF5275BB44DDFAD46DA5BA2D57B78BD57B17A9DB85EAF62575FBA2BA9DA76E5FB007B9CFA9DB7FABDB6755794695A755F9972A4FA932439527A51190A50BB22E5ECEE625A78A960BDCAADB7FAADB87D5ED2439DE4FDD96AAD78C57B7E3D4ED5875FBA0BA1DA36EEF57B7F7AAD78C56B7F7A8DB91EA7684BA2D51CF0D53B743D5ED10757BA7BA1DA46EEF50B703D46D7F755BAC6E8BD46DA1BABD5DDDF656B7BDD4ED6DEAB6875C6457AE872467189383C165DDBEEC0993464B4E74A36E73D5ADA16E73D44DB6BACD52B7FF50B76DD56D1B75FB77757BB3BA6DEDF57AFFA66E6F54B77F55B7376467675FAF7EE79FD5ED75EAB6A5BAFD93BAFDA3BAFDBDBABD468282BABD4ADD5E611F27F75B757BA9BAFD8DFA9D17ABDB5FABDB8BD4ED05EAF67C757B9EFADDBF54B7BF50B7E7646565FD5CDDFE4CDD9E959B9B7B86BAFD695E5EDEAF264F9E6CD6D4D41C3263B47FFFFECF1F79E411F3BEF5F711EA522858469AA10C2D72BCACDA06FE3F3951587E7EFE0FE44CD4B7DC72CBFF934B1DA9FB274A919D0E6A9B3959DDFF61FBF6ED4F51DBD5FFA8FB3F92A2DE73AAFAF93475FF74B51DFD58FDCE9FC83625DB9614F5F399B2ADC936A7EE9F6D6F7FE748916D529654DBDBE779EAFEAFEC6DF60229EAE70BED6DF9D7EA77FDAFBD7DFF468A7ACF25F676FF5B75FF32FBBB7085BA7FA514FB3B72B57ACFEFE47B23DF1F998D97EF92FD7DFA93FAF95AFB3B769DBAFF7FF2BDB3BF7BD7AB9FFF22DF47F95EAAFBADECEFE8DFA4A8D7DC24DF5DF90EABFBB7D8DFE73652D4CFB7DADFF37FC88CBEFDDDCF56F73D52EC36C150F7BD763B2127C6CA9762B71F1D64B996B429D2B6481B23A7C89762B739DDD4FDEED20E497BA4EEF79462B74FBDD5FD3E769B55A8EEF79576CC6ECB8AD5CFFDECF66D80BA3FD06EF30649513F0FB6DB426913EFB2DBC761765B395CDA4DBBFDBCDB6E4BA54D1D6597D1765B7B9FDDEE8E51F71F9062B7C763D5FD87EC367ABCBA3F41DA6D29D286AB32D16ECF1F56E51169E3ED765E2E683EC56EFBE58C8ED3ECFE60BA5D1EB7FB8927A5DF50F767DA7D88F425FF523FCFB2FB9667D4FDD9D2DF48BF63F73D73EC7E48FAA3E7EDBE699EFD9D996FF759D2772DB0FB31E9CF5EB6CB62BB9FABB0FB3CE9FBFCD20FDA7DA1F489CBA47FB4FBC92ABBCF7CCDEE3F57D87DA9F4A92BEDFE75B55DDEB4FBDDB75479DBEE8BDFB1CBBB761FFDBE2AEBEC7EFB035536D865A3DDAF57DB7DBCF4F59BEC7E7FB33D0690B1C027F6B840C6073BECB2D31E37ECB2C7103296D8638F2BF6DA638CCF64BC618F3BBE9031885D643CF2B53D369131CA017BBC72D02E87EC71CC77ECD042338EA9A59DC8A726E076479494941C29C7BCC9F19637DE78E3F76420A807817A00A8077E7AD0A7077B7AA0A70778CEC19D1ED4E9019D1EC8E9419C1EBCE9819B1EB4E9C19A1EA8E9019A1E9CE941991E90E981981E84E9C1971E78E941971E6CE98156C800ABB33DB0B206557A40A507527A10A5074F7AE0A4074C7AB0A407497A80A407477A50A407447A20A407417AF0A3073E7AC0A3073B21831C3DC0D1031B6B50A307337A20A307317AF0A2072E7AC0A2072B8E418A1EA0E881891E945883113D10D103103DF8700C3CF480C339D8D0838CEDC3870FDFB775EBD6EF620D96FBF6ED334B4B4BADC142AA86CBFB36DF270319B3F38CCEE643BB1E327F78D60FCDF3AE3DCFBCD27BA555BA3DD3CD7A3EF47DF2D82D77DF12F1E7140F96D1961A7B50F8953D48FC42EFB0B207929F39765CED71ECBCDA6517BD136B876347D627F6B6E5DCA1B5C9B153ABDA2E7AE7D606C70EAE75F6B6AB7774BDEBD8D9F5B6BD9DEB9D5E6F3A767CAD74ECFC7ADDFE8EE89D60557A4798FD5D5AA67788D9DF316BA7981D142AF4CE31F93EEA1D64F677F425BDA3CCFEEE5A3BCBECEFF35CBDD3CCFE9E5B3BCEEC40A3779E3D6DB709D64E34BB9D98610F78F4CEB4C71D3BD4A6E99D6A76B89AE2D8B9F688DEC16687B2897A479BB4597A679BB463765B66ED74B3DB376BC79BDDE6DDAB77C0D96DA1B513CE6E1F47E89D71D26EEA1D72765B6AED949362B7B1D6CE39BBDDB576D049B1DB636B479DDD465B3BEBA4DDB6DB6E6BA79DDD9E5B3BEEA48DB7C3B3B503CF6EFB033BF1A45F90A277E6D9FD85B543CFEE430CBD63CFEE5BAC9D7B767FF30FBD93CFEE87AC1D7D76DF64EDEC93227D96DEE967F763D68E3F29D2BFE91D80769F67ED04947ED0EE0BAD9D8176FF68ED10943E538ADE3168F7A5D6CE41BB7FFDADDE4968F7BBD68E42BB2FFEB5DE6168F7D1D64E43BBDFB6761C4AB1FBF3C00E44E9EBF54E44293206D03B13655C20E303D9212445C60B326E909D45328690B184EC48927185141963C84E26196FC8B8437640C918448A8C4764E7948C4D648CA2EE1F2BE31519B74891437A641CD382155868DE19CB99D246501340924907D0AFCC7F7EDF327F1B5586F72DF599AABC1BE9F545E32ACE91D7C87B02BF63BA3F70D6D0BE65BEDFDBBF635A437F5B5E5738C1F75043AF2B9CE86F1DEEF19E93FCC75BBFA3AC328B4F32762A271E5D5555B5E8BFFFFDEFB7D184CAD75E7B6D5BE7CE9DBF1C366C9879EFBA7B533A6C0D583AC03CF1F413CD71BBC75901F1AE557759B75963B302A151BFF6ACDF9E15089BB98FE49A3F38E507E6C057065A3F5FD4EAA2C073F23B527D29AC3D005E1E2958B2D5038D57545A7983EA7766596582EF2929761F6A95A0C76AFBC3FFD4E9FB4A7DCBF5EBC215FDDE86FAC8C2F1BEABE4757D4A97FD884F06A865AF66F052134082158EAF38AD4F69C585B74FF05DA63AA3B685657E8F744A45A5BE31CE8068EF710CB05FFFBCEEEC8A26F8BAA9DBAF5579BDA8D47FBDDD013E553CC1F7B7A2872A7F5A52E23F3A9A60D97782AFB8E1D7F9736B3BCE0527149556FC51FDED7FD7FE3B2A0DBBD37EDED181BFCEA71C9B59B366B5ABAEAEFE3A52A0DCBE7DFB7F478E1CB94B6629644F76BA9DBC474261FBA9EDADDB5FFEE9976651795150B01CF6F630B3EBACAE8160F9F32B7F6E767FB6BBD9615A87C0FB3B3DD129AD4EDE23B32EF68C1DC1126862CEBEB24E9F56CF8ED99060797B547DA4EADF9C8F4980EC5BE65B2A2538BCFA17D8F7BF54E5333E25B83C58CA2A32839A0012A86892FF5CD5E12C9212668FEA8B819F2754E6EBB0793868FA8F2E9AE06F253396D6EF52F7E535DD26CFFFBE7ADDB5A1B39875FE76ED6B16E93DBC81805AEAAB72FCDDFEEAB16FEA74E2EA6F174FAC38AFF6FEEC6325BC3A83A50AC79DD5FDBED67D159CF9A463274B9DE6CE9DFB5A4D4DCD411D28BFF9E69BEF9E7FFEF9AD1D3B76EC204B9CF46B533958DEB3E11E6B86F198E38EB102A40E8639A53981E028B396CE6029AF6F7547AB40003DF2A823CDD6435B9BBDE7F7368B2B8BADC7257CA6E3E546EC19CC5708964082FB577B076BF1848AEBA20A96E32B2E96D538A1B394F64E5B53FABCDA9DB89533EAF689B53B7E6B03AAFF0EEBEFDBAB89A46F76BE067023390C4196C75313400249400B3793581B2C2B1BDCB32321D27AED38FF2556075656D9431EB796D2AA9F655633D27B0B4B7D3B0A4B2BDFACF3771D339676D8FCBAC1FF0F7B6F7160296C84A5B288DDDD77DF5D505555656EDCB871D7942953C21E9F90EA33967AF96B97A7BA0482A5CC4886CE62EAFB23DE1B61CD4ECA633FBEF0C756D094C7EFDF7ABFF5D86FDBFE366DAF63E9E864650673395B389088BE75F6B1F60EDAA896A4EA6029EF6BE875CE194B09AD2AC0CE9662F797FB8B4A7D7B03CB66CB2A670596E4D6BE772B9F0EDCC83ECEDD434D0049A03A9B4F55792574C6D2DA5B5A56D9517E76767812E46489A9F5BCA31393A5B4B5B38EB57B6AADD95039BEA4B4B2B73D1B796DE06FD6CE821E52B7E323CE585A4B78FCF3F47B6449ADFD6FEAA16723F512A0704B618BCA7C3DAD9F2756FC8E4F397ECED9C9740C96A16152EE174C2FB002A31C7739FAA3D141C1F2ECCBCF367BCCE9613D26339EA79E7BAAB514367F727EE0444052E47DE91A2C0124B44FB5660E03338D6595EFABFB0FD71B18559FE8088FFEE0FEB8B26FB860A977AAAAC7B6E9BE3374C65376E2AA3E79249F0A5C1E2CE5448AD9D40490A44E5085B3EA903D9B2F068263A97F41E87B824ED0E3E8148515F8A4439DB4F44CDD4986F99B9B5579AB6EE75A67C632E8D8106B4FB0FD6F94632C6B7F56FF76158C9D274B501DF15AD98BCBA79B78E9122C87AC1C623EB0E381C032583D03298FEB6039F28391D6996325745ED6EE32EBF694B34F31FFD4ED4FD67D99F594D7DEFED2ED693D63092031023B636B77C04ADFD8DFEACFEC434AC21D225237581E5E31E43CFE32DC3196E1FAE090E73E939DAF7C327033FBECFC9CD811485AB074063A47C7661DBF58EAFB32F43DB26C47661303338DD62C62ED718D72863CB9ED35B1E294A60E968EC74D99C13CFCEF0D0EBFF66BFEC3A74BB0741E5779DA79A7054ED62327E0915B59FADA22E47223B27CB69FAF9F75ABCF022BB772BCA53E890FC11240701F56BB6A46767A3A025FFF40E8B4CF45202B75620A9665FECE0D06CBD2CAB5CE33D006CD7896F926F3E9C0CDECEBA6B7A326806405CB883396FE91FAA43CCEF7C88900FA8E5BF6E3D08ECF19FCACD7440896F65EDD6FEA5B0A2BB3A5A1C761460E96F2FF50DBA9EA633399B124583A83A52C65955B999194DBBBD7DD6DF67AA1579D632C9DEF19B47C901528E5DA97E972D65B8225D02CFDE897AACF5A152630F60FE9FB7A84CE5C86590ABB3EE81223F679030896407CE4DAC2720D5B6A02485EB0FC7D482765ED319599C94827E1B1CF38D7A1760F6DC585FA843DCE33C8D63363B9BFCE2C63C88CA55C4A24DCC97B74672927EBD167A0959312102C099691CAD89D63CDA16F0EB596BD3A1FD7D7A7946B5786BB8EA584D11B07DF685DCBF2AF03FF6A3DAE03AA1C6F49B004DC4D9FA847769686ED5B4382A5EE57C3BC2E102CE5B25FCEE7F4995E23054B39AF813E49908450D9511C784ECE0E6BEF0406DC2A2727678E0A976DA90920D1A17262C5EF5427F69C55225D6EA4F6E769211DE315FAA43EB581D2FFEBDAE5B1F67258FB3224F67B2BA30EB8D15CC7F2F0BF69BF3E13AC5CCB32CC6BB6F109132CE3398B6C3AFFFB0996408AF4AF8E50D870DF17FE18C93AAF0B0996B273573FA72F45E23C3CC4EE23DBD69EC19D8009D706CBE754B9959A0012ACF69223C1D7B78A74B911BD1CF6B6875F39F9F05959F512D6CA1B0E77A4872FF41C69C6B231C152CF92AABF3D3CB413951306D9C7787EC98C25C1D28D856009A44EB0547DDAE0288365FF70CFD92B73565933918E7E4FF7777A59ADF39014E9A39DD7B6944029EF93FB7C2A70238FC733D7308C36D4049020766755157A8AF2C3B381FE79218F3DA167269D41547ED6CB52EDF7E5D60DA9BE89D176C27AEF6B7D64C94F6199EF96A0F7D94B6F45E178DF55CEEB6A826049B004D03CC132BA99C8704B6935E77531EBBCCFDE81AA2FEB6597CFFA96564EB5AE6369F7CFF23B2488F2A9C08D7272725E50E5166A0248A0862EC60C102C09960000A4338FC733CF308C9BA9090020585208960000C425272767BE0A97ADA9090020585208960000C41B2C5F54E5266A02000896148225000071F1783C2F79BDDEBF51130040B0A4102C0100884B4E4ECE02152E6FA4260080604921580200106FB05C6818462B6A02000896148225000071F1783C8BBC5EEF5FA9090020585208960000C4252727E765152E6FA0260080604921580200106FB05C6C18C65FA8090020585208960000C44585CAF2ECECECEBA9090020585208960000C4252727A75285CBFFA32600806049215802001017152A7DD9D9D9D751130040B0A4102C0100884B4E4E8E5F9596D40400102C29044B0000E20D964B0CC3B8969A0000822585600900405C54A85C9A9D9DFD276A02000896148225000071C9C9C959A6CA1FA9090020585208960000C41B2C5F310CE30FD40400102C29044B0000E20D96AF666767FF9E9A000082258560090040BCC1B24A956BA8090020585208960000C41B2C5F330CE377D40400102C29044B0000E20D96CB3D1ECFD5D40400102C29044B0000E20D962B54B98A9A000082258560090040BCC1F20D8FC77305350100296E71C562025DEA941A152C0FB25502001008962B55B99C9A008014B760E9821D53374F25D4A54079ECC3C79E56C1721D5B2500008160B9CAEBF55E464D00408A2BF795FFFD65FFCB9FA970F935E1AEF9662AFFFFF6EE36468ABB8E03782488A8B5A156A4B5A9ADB5D6A6565A35A6698CF1348D29A610129DECC371B889C9455B28B7D437C5946C62782349E9EE1E8D2410638C8AC4E4FA82B424ECED5A1A20C6A78AD807A56839D0A3553815E15A03EBCCEECEB2777060266CCD6D3E9FE49F9DDDDB79E037243FBEFC67E61AA1B2B2FBD54AA5F2157F2B01A01D2C7F954AA53EA91200B34018661ED8BD7BF72FA2CB30A37BFC66E3181919A9CFD6636FD5FD45A112002E0896BF0EC727540280AE3B7EFCF8974BA5523D6C3C37AB0600F48E542AF59B6C367BB74A00D055F57A7DFE8913274E86EA8383833B5504007A473A9D7E3E0C9777A904005D353636F6837ACBBE7DFB8E653299E5AA02003D132C7F1BF6F6C52A0140D79C3A75EAAEB367CF9EAB77D8B061C3582E975BA03A0030FBA552A903FDFDFD1F570900BA667C7CFC707D9A898989F1B0011555070066BF743AFDBB305CDEA9120074C59123471EABCF60646464DC2F5306809E0896073399CCC75402802B2ECC8ED74D4E4EBE3953B03C77EEDC1BF97CFE405F5FDF5CD50280D92B0C95BF0F82E00E9500E08A3B7AF4E8FEFA651C3E7C782C6C4643AA0500B3573A9D7E31ECE7B7AB040057DCDEBD7B2F972BEB67CE9CF959D88CEAB95C6EBE8A01C0EC1486CA978220F8A84A0070C5AD5FBFFEA14B5D0A1BE5CA75EBD6FDC48C2500CC6EE974FAE5542A759B4A00D015DBB76F7F79A65479E8D0A1EF868D68BF7B2C0160D607CB3F64B3D98FA804005D1104C1AD61803C739107F71CECEFEF3FE8A9B000D013C1F28F51CF570900BA66E3C68DE530489EED0C965BB76EDD964AA536A90E00F444B03C14F6F50FAB04005D135DEABA6BD7AED7E250393131F1A3E87F3673B9DC02D501809E0896AF64B3D95B540280AE5AB56AD5174E9E3C39198EFAE0E0602593C92C571500E89960793808820FA904005DB765CB96674AA5523D954A8DA80600F454B0FC53386E560900BA2EBAF435FA9D956EEE07809E0B967FCE66B337A904006F55E3A9AB0200F45C7F7F3508820FAA040082250090B4BF1F09C78D2A018060090024EDEF478320B8412500102C0180A4FDFD58383EA0120008960040D2FEFE97152B565CAF120008960040D2FEFED72008AE530900044B0020697F1FCF64328B540200C1120048DADF8F0F0C0CBC5F2500102C0180A4FDFDB5200816AA040082250090B4BFBF9EC964DEA7120008960040D2FEFEB7952B575EAB120008960040D2FEFEF72008DEAB120008960040D2FE7E229BCD5EA312000896004022A954EA642E975BA0120008960040D2FEFE8FFEFEFEAB550200C11200482493C9FC73D9B265EF510900044B0020697FFF57100457A9040082250090B4BF9F1A181878B74A002058020049FBFBBF972E5DFA2E950040B0040092F6F7D34110BC532500102C0180A4FDFD4C2E979BAF120008960040D2FE3EB964C99277A8040082250090B4BFBF1104C13C950040B0040092F6F737070707DFAE120008960040D2FEFE9FBEBEBEB92A018060090024EDEF670B85C21C950040B0040092F6F773E1CBDB540200C11200D0DF01981D8DC7300CC3308CDE1BFE95030000000000C07985426DEE50B9B63C1E6B8AD51F36964BD5C9A1F2E80BFFCB36D63C51591C6DA7B9BDC29CCE87B384DBA9E74BB56F47CB8F946BB75FB0EE70ED818B6DF3C1CDB5ABA275D79447834BED3BFE4EF8FA7A389E6C1D7BFDE162F553E1EBCED6FBB1700C3BDB0000005D0B9785399D21AE15C67647A12F0A9AF18843DBDA62E5F3D382E5A2E8F3706C8BC35E1C4A1BCBC3957BD76E7EF6C6E6E7D5C7A606C35A7FF4F9EAD2D357E74B95CFE68BD59F36F7339A696DF3A978BFE1F8F9C58265B8CDCF34026CB13AD80E9B4F54EF89C269FB3BA56ACD99060000E8A256F87ABE15E24EE74BB51D71E0CC6FAADCD20C90D57B9A3390D5CF4D5F3FFCFE7D0F0D57AE5D5DDAB3B050D831AF19EE2A8B5B3396F735835FEDFE0B436D6DEEDAE1CA6DCDE51DF3D616AB5FEA0C966BCAB5AF85CB43ADED2DEA5C7775A972473394EE59D8F879A9FA703B58B6963BFE6C3B9D650000802E07CB30C4A51ACBCD7079AC1DCA36D5EE6E04CBD2E8AAE812D9F3A1B03027BFB976EBD48039FAC530D4ED0FBFF7FD8E99C697E2E5301C7EFA52C751F85E6D7EF4DABE1476864B653B02E3A98EE5B1F63E872BF70E95ABCF761CC33667190000E0FF142CF3C5DA57DBDF29561F9FB25E7174209E358C66365BF7365E1008E359CC6826B211401F1FBD21DA4FBE3CFAF57836B21904E33038F552D87CB9FA601C18A3F5DB97D6761C673C4BB9A65C5D1607DFC6BE8AB5FBA7CF76020000D0856039FD52D8E8F36F3CF9DC35EDE0D7113EA7AF1B5F8E3AB469CFF59DB394F1BD99AD07ECB4673FDB61B335A318DD63D97C5F7D257CFF5CE70385C29079203E9EA9C73B9A892E956DBF2F561FED7870CF531DF7674EE44BD5EF38CB0000005D0E96179BB1EC089D13D1ECE44CEBC7C1320EA2D14C64E7CFDBF75D4E7BCA6B1C2CA319CCF3FBAA3D7D91EF1C8FDF3F323C7A53637FADD0D83EFE69F755C6F76E364367ED5BCE320000C05B1B2C1B612C7A204FF4B4D5F8E9AB975A3F0C9EDF6C2F97475FB8DC8CE5CCC1325A7FCAAF3E393D7DC6B263DD89F3FBAF3E9A2F557F19EEEBC7D1BD9CD1A5B951B86CCE62D6EE74967BDF7F01C2B8EC92D1A67BA30000000049454E44AE426082, + 1); +INSERT INTO `act_ge_bytearray` +VALUES ('302558', 1, 'var-baseTask', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000331313170707070707400352F6C656176652F726561644F6E6C794C656176652F343332303730666331663532633063633137376164393031613561616338643174002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E000C77080000017FE5DADC00787400203433323037306663316635326330636331373761643930316135616163386431737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302560', 1, 'hist.var-baseTask', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000331313170707070707400352F6C656176652F726561644F6E6C794C656176652F343332303730666331663532633063633137376164393031613561616338643174002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E000C77080000017FE5DADC00787400203433323037306663316635326330636331373761643930316135616163386431737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302561', 1, 'hist.detail.var-baseTask', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000331313170707070707400352F6C656176652F726561644F6E6C794C656176652F343332303730666331663532633063633137376164393031613561616338643174002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000037371007E000C77080000017FE5DADC00787400203433323037306663316635326330636331373761643930316135616163386431737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302573', 2, 'var-leaveOpinionList', NULL, + 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000027704000000027372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B787400203062373632356665646161303565383566323832343836653163396339316239707400033131317400063330323536367371007E0002017371007E000677080000017FDDEFA3BB7874002064383138616336613836636631613634643231383462663036393964363761387074000331313174000633303235383478, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302575', 2, 'hist.var-leaveOpinionList', NULL, + 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000027704000000027372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B787400203062373632356665646161303565383566323832343836653163396339316239707400033131317400063330323536367371007E0002017371007E000677080000017FDDEFA3BB7874002064383138616336613836636631613634643231383462663036393964363761387074000331313174000633303235383478, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302576', 1, 'hist.detail.var-leaveOpinionList', NULL, + 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B7874002030623736323566656461613035653835663238323438366531633963393162397074000331313174000633303235363678, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302588', 1, 'hist.detail.var-leaveOpinionList', NULL, + 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000027704000000027372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDEED97B787400203062373632356665646161303565383566323832343836653163396339316239707400033131317400063330323536367371007E0002017371007E000677080000017FDDEFA3BB7874002064383138616336613836636631613634643231383462663036393964363761387074000331313174000633303235383478, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302598', 2, 'source', NULL, + 0x7B227265736F757263654964223A22333032353937222C2270726F70657274696573223A7B2270726F636573735F6964223A2270726F63657373222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C2270726F636573735F617574686F72223A22222C2270726F636573735F76657273696F6E223A22222C2270726F636573735F6E616D657370616365223A22687474703A2F2F6C656E6F73702E636E222C22657865637574696F6E6C697374656E657273223A22222C226576656E746C697374656E657273223A22222C227369676E616C646566696E6974696F6E73223A22222C226D657373616765646566696E6974696F6E73223A22227D2C227374656E63696C223A7B226964223A2242504D4E4469616772616D227D2C226368696C64536861706573223A5B7B227265736F757263654964223A227369642D33304636324437352D353136352D344532322D383433412D394441393335424135303331222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22222C22696E69746961746F72223A22222C22666F726D6B6579646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22227D2C227374656E63696C223A7B226964223A2253746172744E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D32333931423338312D323736372D344134332D383237442D374333353037394145303745227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3137352E352C2279223A3134317D2C2275707065724C656674223A7B2278223A3134352E352C2279223A3131317D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D39363143373036422D413744312D343941312D394332382D414135433233433430364243222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C226173796E6368726F6E6F7573646566696E6974696F6E223A2266616C7365222C226578636C7573697665646566696E6974696F6E223A2266616C7365222C22657865637574696F6E6C697374656E657273223A22222C226D756C7469696E7374616E63655F74797065223A224E6F6E65222C226D756C7469696E7374616E63655F63617264696E616C697479223A22222C226D756C7469696E7374616E63655F636F6C6C656374696F6E223A22222C226D756C7469696E7374616E63655F7661726961626C65223A22222C226D756C7469696E7374616E63655F636F6E646974696F6E223A22222C226973666F72636F6D70656E736174696F6E223A2266616C7365222C22757365727461736B61737369676E6D656E74223A22222C22666F726D6B6579646566696E6974696F6E223A22222C2264756564617465646566696E6974696F6E223A22222C227072696F72697479646566696E6974696F6E223A22222C22666F726D70726F70657274696573223A22222C227461736B6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22557365725461736B227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D36463636323645392D383144342D343845392D394345332D433632464434433932454230227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3338352C2279223A3135357D2C2275707065724C656674223A7B2278223A3238352C2279223A37357D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D32333931423338312D323736372D344134332D383237442D374333353037394145303745222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D39363143373036422D413744312D343941312D394332382D414135433233433430364243227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3238342E393233383535393435353934382C2279223A3132352E303334373433383734303737367D2C2275707065724C656674223A7B2278223A3137352E38313234373231373934303531382C2279223A3131382E313536363632333735393232347D7D2C22646F636B657273223A5B7B2278223A31352C2279223A31357D2C7B2278223A35302C2279223A34307D5D2C22746172676574223A7B227265736F757263654964223A227369642D39363143373036422D413744312D343941312D394332382D414135433233433430364243227D7D2C7B227265736F757263654964223A227369642D35383442353134362D373630372D343239362D393143342D383746384646323636333436222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22657865637574696F6E6C697374656E657273223A22227D2C227374656E63696C223A7B226964223A22456E644E6F6E654576656E74227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3539382C2279223A3132397D2C2275707065724C656674223A7B2278223A3537302C2279223A3130317D7D2C22646F636B657273223A5B5D7D2C7B227265736F757263654964223A227369642D36463636323645392D383144342D343845392D394345332D433632464434433932454230222C2270726F70657274696573223A7B226F766572726964656964223A22222C226E616D65223A22222C22646F63756D656E746174696F6E223A22222C22636F6E646974696F6E73657175656E6365666C6F77223A22222C22657865637574696F6E6C697374656E657273223A22222C2264656661756C74666C6F77223A2266616C7365227D2C227374656E63696C223A7B226964223A2253657175656E6365466C6F77227D2C226368696C64536861706573223A5B5D2C226F7574676F696E67223A5B7B227265736F757263654964223A227369642D35383442353134362D373630372D343239362D393143342D383746384646323636333436227D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A3536392E333832383132352C2279223A3131357D2C2275707065724C656674223A7B2278223A3338352E36303534363837352C2279223A3131357D7D2C22646F636B657273223A5B7B2278223A35302C2279223A34307D2C7B2278223A31342C2279223A31347D5D2C22746172676574223A7B227265736F757263654964223A227369642D35383442353134362D373630372D343239362D393143342D383746384646323636333436227D7D5D2C22626F756E6473223A7B226C6F7765725269676874223A7B2278223A313230302C2279223A313035307D2C2275707065724C656674223A7B2278223A302C2279223A307D7D2C227374656E63696C736574223A7B2275726C223A227374656E63696C736574732F62706D6E322E302F62706D6E322E302E6A736F6E222C226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C227373657874656E73696F6E73223A5B5D7D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302601', 1, 'var-baseTask', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000332323270707070707400352F6C656176652F726561644F6E6C794C656176652F376538303465376562376162386633353461663133316362626336326336383374002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000057371007E000C77080000017FF0279400787400203765383034653765623761623866333534616631333163626263363263363833737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302603', 1, 'hist.var-baseTask', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000332323270707070707400352F6C656176652F726561644F6E6C794C656176652F376538303465376562376162386633353461663133316362626336326336383374002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000057371007E000C77080000017FF0279400787400203765383034653765623761623866333534616631333163626263363263363833737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302604', 1, 'hist.detail.var-baseTask', NULL, + 0xACED000573720018636F6D2E6C656E2E656E746974792E557365724C65617665B811E59153A6CD0702000C4C0009626567696E54696D657400104C6A6176612F7574696C2F446174653B4C000863726561746542797400124C6A6176612F6C616E672F537472696E673B4C000A6372656174654461746571007E00014C0004646179737400134C6A6176612F6C616E672F496E74656765723B4C0007656E6454696D6571007E00014C0002696471007E00024C000B6F70696E696F6E4C6973747400104C6A6176612F7574696C2F4C6973743B4C001170726F63657373496E7374616E6365496471007E00024C000673746174757371007E00024C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E000178720017636F6D2E6C656E2E656E746974792E426173655461736BA48CBC2F51BC802602000D4C0008637265617465427971007E00024C000A6372656174654461746571007E00014C0002696471007E00024C001170726F63657373496E7374616E6365496471007E00024C0006726561736F6E71007E00024C000673746174757371007E00024C000B7375626D697474696D657371007E00034C00087461736B4E616D6571007E00024C0008757064617465427971007E00024C000A7570646174654461746571007E00014C000775726C7061746871007E00024C000675736572496471007E00024C0008757365724E616D6571007E000278707070707400043230313874000332323270707070707400352F6C656176652F726561644F6E6C794C656176652F376538303465376562376162386633353461663133316362626336326336383374002035393436613938356637333363353766316162373136383966376236616565617400087A68616E6773616E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDB8E2400787070737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000057371007E000C77080000017FF0279400787400203765383034653765623761623866333534616631333163626263363263363833737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000000770400000000787070707070, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302616', 1, 'var-leaveOpinionList', NULL, + 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDFADF437874002030623736323566656461613035653835663238323438366531633963393162397074000333333374000633303236303978, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302618', 1, 'hist.var-leaveOpinionList', NULL, + 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDFADF437874002030623736323566656461613035653835663238323438366531633963393162397074000333333374000633303236303978, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302619', 1, 'hist.detail.var-leaveOpinionList', NULL, + 0xACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E6C656E2E656E746974792E4C656176654F70696E696F6E1956BF801DDE60870200065A0004666C61674C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C00046F7049647400124C6A6176612F6C616E672F537472696E673B4C00066F704E616D6571007E00044C00076F70696E696F6E71007E00044C00067461736B496471007E00047870017372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017FDDFADF437874002030623736323566656461613035653835663238323438366531633963393162397074000333333374000633303236303978, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302630', 1, 'source', NULL, + 0x7B227265736F757263654964223A2263616E766173222C227374656E63696C736574223A7B226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C226964223A2263616E766173227D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302632', 1, 'source', NULL, + 0x7B227265736F757263654964223A2263616E766173222C227374656E63696C736574223A7B226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C226964223A2263616E766173227D, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302633', 1, 'source-extra', NULL, + 0x89504E470D0A1A0A0000000D4948445200000288000000CD08060000003B43814C000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000000467414D410000B18E7CFB5193000000017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA793000000097048597300000EC400000EC401952B0E1B000011F04944415478DAEDDD0B7454F59D07F09BC924194208E115E3A22B56A4BADAB55A1F548F055F80407B5C2B25984A715DDB7A56DAD5FA586B7DD5F6D45D75ABDBDD565B151FA841E8FAA8D64715A85B05179422281110C16208C86308904C1E33D97B69E8491110C883103E9F73AE776632B933FE90BFDFFBFFFFEFFF060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D44961200FBC203CB1EF87A8F648F9F146C2EE81FAF8B6B8B3A486376637D2637F34AF6E6ECEF8C183162A98A000222D0293C52F1C87D7DAAFA5C92EC970C36166D0CEABAD5294A07C94DE50685C9C2A0EFAABED5F1A678D9D9679FFDACAA00DBCB5602A023453D87C51F15DFBAF2332B83649F6490CE492B4A074AC7D3414D414DB0B9E7E6BCA2B545C3CA2E2C7B72F2E4C9EB55066829A60440478A8695A39EC328A4B0EFA4F253C1BAE275D5B158EC56D500B6175702A02345730E971FB47CD70DD3E67850B8B430C85D9F1B64356505754575C1A6819B82869E0D0AD88636F4DDD0BFEFEABE435502D89E1E44A063CF4AEBE259BB9A731885C33E6FF609F23ECE0BB2D25941900982BCF5795B5FCBD998A3806DA83E519F17EE4A54021010814EAD60794110ABFF64D31485C5E867000888C0016657BD8451EF22000222708089E61CEECDCF001010010010100100101081034EBADBCE17CECEE46614084040040E345B0EDDB2C320988967822D03B628108080081C6852C5A920D537B5C3D76B8B6B15084040040EC886A9F1934D53769D5BC7030888C001275EF3E7BBA824D6243EF1B3BC7579419F397DB6BE070001113800E457E66F0D80D1FD97772637991BF49DDD37E8BEA2BB351101DAF3845D09807DDA08D5C483C28AC2AD3D84BB23BAE55EE1E2C220B13611540FAA0E1A7A342822401BD38308EC53518FE0EE86C396A29EC6BEFFD75701010444A0AB897A04F79A651101DA852166609F5A75CE2A4500E864F420020020200200202002002020020020200200D06AAE6206000E68AFBFFEFA3F2C5DBAF4E2952B579EB67AF5EA1E1B376ECC49A552415E5E5E537E7E7E436161E187E1FEC5850B17DE3575EAD4A50222004017D4D4D4149F356BD68DD3A74FBFE2BEFBEE2B38E18413822143860403060C088A8A8A823010066148CCDAB469536E6565E5C0F0BD030B0A0A2EBBE28A2B962493C96F4C9A34E90D011100A08BD8B061C37161287C69DEBC79C55FF9CA57826BAEB926C8C9C9F9C4FB1289C4D6AD5FBF7EC171C71D175C7AE9A5B11933667C76EAD4A97FB8FCF2CBA7AD5EBDFAD2F0F1E6AE58237310018003C61B6FBC31E68E3BEE989B9B9B5B7CFBEDB707C3870FDF6138DC91ECECECE0ECB3CF0EEEBEFBEEF8E0C183CFEBD1A3C7FCD2D2D201022200C07E1C0E1F79E491F230DCC5C78F1FBF7518796F44BD8A65656589281C868F5FEB8A2151400400BABC6858F999679E796CF8F0E1B1D1A347B7C931CF39E79CD8B871E37AE5E6E6BE3066CC9802011100603F115D90326DDAB497060D1A146FAB70B8CDB061C3BA9D79E6997DF3F2F2FE5D400400D84FCC9E3DFB96B7DF7EBBF8820B2E6897E38F1D3BB64F3C1EFFFA85175EF879011100A09D959696FE60DCB871E70D1D3A74AF575E79E59557BE336AD4A8BD9E73F869A239895FFBDAD7EAC3877708880000EDEFD6A6A6A6274B4A4A9263C78E9D1C86C5117B32DF2F5A047BD9B26505679E7966BB7EC961C386F5C9CACA3A31FC6E03BB42D1AD834887995CF5D2590B6A975D5E99FA78F087756BFAAC6FAC8ED766EAB2F2623941AF7861E380C4411B8A737ACF39A5E0EFFE73EC4167BEA86200B4D03D0C606561582CCBCECEAE2E2D2D7D3A7CFE585E5EDECC071F7C30B5B35F5ABC78F1A5D122D8BBBB94CDDE8A96C039EAA8A33E7CE79D77CE0BBA404FA28048BBFBD6E23BAF5ADB90BC7ED2EADF169D52787470E141E70483BA1D1A94E4F60EF26389A026930A36346C8A2FAEFD53BFD7AB178EFC65D53323CF7FE7FA4DBD730AEFBA6FD0B537AA2000DB290CB78BC2B078512A346EDCB827C2E74FAE5AB5EAD999336736B67C63F8DAE033CE38A343BED4B061C3BA870171888008BB7059C5ED7FBF2ABDFEF90FEB561D7CF521E3B2BED4F3B8203B2BFB13EF8B42627E5E22E89FD72F38A3E884E0FABF1D1FBCBA717E8FBB3E7AE286910BAEBA6C407EC9C89F1F71D51C15ED1CA2F940E1AE229D4EBFD055EF2000EC571261501C1FEEC7979494443D8B2F656565DDBFAD67B1B2B2B2E0B0C30EEB902F127E4E34C9F1D8AE5054019176F1CD25B7DFF4D6E6A537FE53C9E8D8C5079DBBC360B82B51988CB647D6BCD8F7BF2B9F9CFDED2577DC76CF91575DAFB29DC2AD5B1B8F783C3376ECD877C286F87FC2A7331389C4EC5D0DF3D0F9D4ADAB0BDE7AEBAD28F4DFAC1A741151CFE2056160BC20954A45FF6DBF5F5D5D9D535858D8211FDEB367CF9270D7254E9C0544DADC75CBEEF9C16B9B16DE74CFC0EF657DBEE0C8561DEBA2E2E1C1890547C5BEBDF48EEB2E5B7C678F5F0CFADE7754B873081BE058180E3F173E8CB69B9A8779DE085F7F36168BBD1C9EB52FDC7EA887CEE5E3D91F072BE7AD8C1EDEA41A745147D4D5D5B5DBD5CBDB8BAE660E758905B30544DAD49845375CF9874D0B6F79FCB337664543C66DE1E8FCC382C7C2E38D7BEF87FF3C76D1CD95538EBEF93695DE77CACBCBB3C2B3F2A61DB58D61388CE6DE0CC96432414949C986F07D33C2E7BFC9CECE7EF9D1471F5DA97A9D4BBFC1FD827E95FD8279F3E6DDA21A7462BB7302930EDB9FA6F0A4F5AF724DF87C593C1E1F50535313EB8890585B5BFB51B8EB2920420BA7CEFDE611CB6BAB6EFBE59157C7DA2A1C6E131DEFDE8157C5BEF1DE8F7F387CE195CFBF78EC7FCC57F14EAF57B89D1F6DE9743A1AEA49878F1755565606C11714A733C8EB93171C73C231C1B5D75E7BB36AD059856DC70E03629807A3118A4C180273C37D76B88F5E4B86FB97C3EDD1BCBCBC17A2692F975F7E79AABABA3AAF2302623299DC18EE1A044468A15B4EFEF317179F95D3DA61E59D897A1227F6FF6ACEA455CF3D1D3E1DA0E2ED63C2840989542A551236B42561239BD87E1FBEE5A0BD3C743411F5D879F3E60503BEEC8F0FD82BD162D4D1C966B716BD85D19CBF17C26D4AB76EDD5E0E4361B2E52F1416162E5BB162C5D1252525EDFEE5162C58B0283AF71210A1D997E64D2CCBC9CAFE4C3467B03D45C79FB2E6954386CC9F78D9EF8FFBD92F547EC7C68C1953929D9D9DD855C80BF745D1F3F071F4FC2FFB686277243A1BDFD17E0F4543D12D7FB1E2F8E38F3F6A43B0C11F12B037725B84C269E1F65C229178765717C885A1F1B773E7CE3DFA94534E69F72FF7FCF3CF47DD94D30544D8F637363BE7966B0EBD303B5AF4BABD7DFF6F2FCABE71F9FDD7850FBB7440DC55C88BC5623D5B3EDF3EE46D3BC6AE425EF87B3BFBE8A8A1AD6ADE52E1EF5485EFDDB6AF6B7EFDD36ADFD8DCBE441FB830FCBD7BC3467A7274667FC92597340988C01E9F6D3635453D8333C3F6EFA1E6256C92BBF37B15151577E5E4E4FC4B434343767B2E969D4EA7575455559D14EEBBC4C5940222AD367076D9213599DA43A365693AC2A9859F0B1A9B322547CD2A1D50F1C5F2E5FB63C06B3154BB7DB06BB9DF69C8DB16EE7611F2AA5A04BD1D86BCE6B93A7F793D6CD45253A74EADDA9D7FB7D2D2D21D05C4C6F038B1E8EAE6E6B6E5854C2673E79A356B66BA9A1968851BC2B66579229198B6374B694517C85D79E5958BA64F9F7EECF0E1ED37CA3569D2A437C3EF5918B6A34B0544081DDCAD68FC909E9F8FEFE95A87AD716EEF53729E5EFFDAC5413B2ECF3161C284A2542A55149EAD168541A7287CA96FB815B445C0DB4D3B0D79E1F7D9B85DE8DBE390D7866AC22D1A568987DF2B0A9DF785DFE3DEAED24802FB567979F98F5A7B8C6432F9F5279F7C72CEE9A79F9ED31E17ABD4D6D62E0E03E869615B3CBAABD45D40A4D57283F8974F2BFC5CAC233FF3E41E4707CF6F7863D4A705C49DF5E2853F3A24DCF29A876B0BB61BA68DD6B0EABB6D2E5EB4644B4B6D11F05A0CD56EFF7A2A3C4BAEDACF169C8E5ADBBF1A46F6B702E84C1E78E081F913274E7C74CA9429632FBEF8E26E6D7CF8E4F5D75FFF5AD8066E09C3EC5C01119AAD6FDCF499E80AE38E54940C63E9CCF5C7949696DE1E85B9F02F665174D145D0DCCBD762FF57A16EFB70D772B87607A249D06B9B8762A3D0B3367AAD0B06BCD6308C0CEC17162C5870694D4DCDC9C5C5C5478C1A35AAADAE346EBCF3CE3B1FAAACAC8CD67F3DBD2BD54B40A4D55299FAA27E39451DFA9915731606FD66A5A31EBFAB7614FC5A58BB2DE8B508777FE9C50BF7D1E2CDA9743A5D153EDEBC0F8769F7375787757ACA3032B0BF884E62FBF7EF3FFC89279E9813B6FF3D468F1EDDBD95874C46E170EEDCB96785FFEFF87257BB37BD8048AB353435E6E6C7121DFA99434EFB5270CFAAA783BF9915DC103E5DB92DF46D0B8389442269A8B3FD949797DFA10AC0FE26BA60A5ACACECA45FFFFAD7CF5556561E3C7EFCF87ECDB7C7DB23D19CC3685839EA398CC261D8262EEF6AB5121069FD7F4459F1BA9A4C2AAF2343625149EF60F5A9B18657BFFBD88FFC0900B0272171E8D0A15FA8AFAFFFB759B366FDE3F9E79FDF3072E4C87ED9D99F7EA165B494CDC30F3F3CE777BFFBDDE9D19CC36858B9ABF51C0A88B499BCAC9C0D1F37244B0ECB2BE9B0CFDCD0B029C8C98A57AB3E007BAA79CEF4F7C68E1D3BE9B1C71EBBBDBCBC7CC8A04183169F75D65985871F7E786EAF5EBD0ECACFCF8FD7D6D6AE4E2693EBDE7DF7DD779E7DF6D982AAAAAAE3A3F9EE61303C6FCA9429B3BB728D04445AAD29C8CC7DB766F9B96140ECB0756E16D7FE29FC67D65BAA0FC0DE0A43DEC270776E5959D921151515A3172D5A343C0C80C7067F5E8122BAD0319AA7581B6E3DC2ED956811EC0365EEB58048AB6D694ABDF84AF2CD53CFED35B877477DE6AB1BE7276B33752FA93E00AD150D3B87BB7B9A37423125A0B5B2D2F1A76624E7C5D24DE90EFBCCE7D6CFCAE4A4B7DE8713001010E96C960E7E74654DBAEE8FD3936F75C89CC0FFDD387FF39674ED92CE7C9B3D00101039E03564D277DFB0FCFE9A8EE845FCFEF25F6EAC6F4AFF97AA0380804827F6FE298F3FB5BEB1FABDBB2BA7AD68CFCFB967D5532B3FAEDFB0E2902DABCA551D0004443AB9EC74D3845FADFA4DF7B736BDD72E6B42BD53B3BCE6EE8FA6259A62C12533CF705B37001010E9F4A239810D41E3C46F2CFEC99695756BEADAF2D8D1F1C655DCBCB9B12973C5E2131FAF506D001010D94FBC7FD294F2BA4CDDBF8E5878F586B99B2AD6B5C531176EF9605D74BCDA74EAA74B4F7E7CB22A038080C87E66C9C9E50FA69AEAAEB8B0E287C18F3F7CF88FADB970E5A71F4D79FBABEFFE205D9FA9BF6EE9C9536E535D00687F16CAA65D443D8947CD2A9D3D69F50BBF9AF2F1F4F77F72F8B752A37A7FF198DDFDFD979373165FF3C1BD0D9B1BB6546765678D5D7262B96165001010D9DF35AF5378CEC039A5177CF7FD9F7DEBEA0F7EDEEBB8EE03579CDF6748E2841E47161F9CDBA7283F96E85E93496D595B9FDCF076CD07EB9F5AFB6AF5ECEA770FABCFD4AF09B282FBFBD7544D76410A00088874314B4F2A8FEE78326DE0ECB243E66E7EEF82B9D515A7356505BDB28260DBBD9BB7ED3F6C0A82DF47774859D2BC08F612E5030001912E1C14076FBDD7E55DCD1B00D049B94805000001110000011100000111000001110000011100000111000001118076905202404004F6B9744E3A95579BA7109D40A226313FDC55A904202002FB54434EC30B3D933D332AB1EF1DFCA7832B9A9A9A66AA04202002FB54417DC1C4DE55BD3775DBD24D31F6A1FCEAFC5F75DBD4EDAC4C2673836A00DBCB5602A0233DF4D043D513C64F985BB4AE6864BC31BEA63EB7BE5B3A27EDBEF01D2395A849BCD9FF83FE2F1557168F88C562970D1B366CB6B200DBCB5202605F983163C621E974FAD6F0E1D0A6A6A6012AD261AAA261E5A8E770C488114B9503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E854FE1F5EFD99B91416FC3A0000000049454E44AE426082, + NULL); +INSERT INTO `act_ge_bytearray` +VALUES ('302635', 1, 'source', NULL, + 0x7B227265736F757263654964223A2263616E766173222C227374656E63696C736574223A7B226E616D657370616365223A22687474703A2F2F6C656E6F73702E636E23227D2C226964223A2263616E766173227D, + NULL); -- ---------------------------- -- Table structure for act_ge_property -- ---------------------------- DROP TABLE IF EXISTS `act_ge_property`; -CREATE TABLE `act_ge_property` ( - `NAME_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `VALUE_` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `REV_` int(11) NULL DEFAULT NULL, - PRIMARY KEY (`NAME_`) USING BTREE +CREATE TABLE `act_ge_property` +( + `NAME_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `VALUE_` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `REV_` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`NAME_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_ge_property -- ---------------------------- -INSERT INTO `act_ge_property` VALUES ('next.dbid', '305001', 123); -INSERT INTO `act_ge_property` VALUES ('schema.history', 'create(5.22.0.0)', 1); -INSERT INTO `act_ge_property` VALUES ('schema.version', '5.22.0.0', 1); +INSERT INTO `act_ge_property` +VALUES ('next.dbid', '305001', 123); +INSERT INTO `act_ge_property` +VALUES ('schema.history', 'create(5.22.0.0)', 1); +INSERT INTO `act_ge_property` +VALUES ('schema.version', '5.22.0.0', 1); -- ---------------------------- -- Table structure for act_hi_actinst -- ---------------------------- DROP TABLE IF EXISTS `act_hi_actinst`; -CREATE TABLE `act_hi_actinst` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CALL_PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ACT_NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ACT_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ASSIGNEE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `START_TIME_` datetime(3) NOT NULL, - `END_TIME_` datetime(3) NULL DEFAULT NULL, - `DURATION_` bigint(20) NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_HI_ACT_INST_START`(`START_TIME_`) USING BTREE, - INDEX `ACT_IDX_HI_ACT_INST_END`(`END_TIME_`) USING BTREE, - INDEX `ACT_IDX_HI_ACT_INST_PROCINST`(`PROC_INST_ID_`, `ACT_ID_`) USING BTREE, - INDEX `ACT_IDX_HI_ACT_INST_EXEC`(`EXECUTION_ID_`, `ACT_ID_`) USING BTREE +CREATE TABLE `act_hi_actinst` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CALL_PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ACT_NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ACT_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ASSIGNEE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `DURATION_` bigint(20) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_START`(`START_TIME_`) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_END`(`END_TIME_`) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_PROCINST`(`PROC_INST_ID_`, `ACT_ID_`) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_EXEC`(`EXECUTION_ID_`, `ACT_ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_hi_actinst -- ---------------------------- -INSERT INTO `act_hi_actinst` VALUES ('247553', 'process_leave:1:247536', '247552', '247552', 'start', NULL, NULL, 'start', 'startEvent', NULL, '2018-06-14 23:44:03.000', '2018-06-14 23:44:03.000', 1, ''); -INSERT INTO `act_hi_actinst` VALUES ('247559', 'process_leave:1:247536', '247552', '247552', 'user1', '247560', NULL, '经理审批', 'userTask', NULL, '2018-06-14 23:44:03.000', NULL, NULL, ''); -INSERT INTO `act_hi_actinst` VALUES ('302557', 'process_leave:1:302555', '302556', '302556', 'start', NULL, NULL, 'start', 'startEvent', NULL, '2022-03-31 10:59:17.000', '2022-03-31 10:59:17.000', 10, ''); -INSERT INTO `act_hi_actinst` VALUES ('302565', 'process_leave:1:302555', '302556', '302556', 'user1', '302566', NULL, '经理审批', 'userTask', '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 10:59:17.000', '2022-03-31 11:04:52.000', 335536, ''); -INSERT INTO `act_hi_actinst` VALUES ('302579', 'process_leave:1:302555', '302556', '302556', 'sid-950749EA-4BB6-4276-B67A-DE03E34A0573', NULL, NULL, NULL, 'exclusiveGateway', NULL, '2022-03-31 11:04:52.000', '2022-03-31 11:04:52.000', 43, ''); -INSERT INTO `act_hi_actinst` VALUES ('302581', 'process_leave:1:302555', '302556', '302580', 'child', NULL, NULL, 'subProcess', 'subProcess', NULL, '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000', 52313, ''); -INSERT INTO `act_hi_actinst` VALUES ('302582', 'process_leave:1:302555', '302556', '302580', 'sstart', NULL, NULL, NULL, 'startEvent', NULL, '2022-03-31 11:04:52.000', '2022-03-31 11:04:52.000', 31, ''); -INSERT INTO `act_hi_actinst` VALUES ('302583', 'process_leave:1:302555', '302556', '302580', 'allmanager', '302584', NULL, '总经理审批', 'userTask', 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000', 52298, ''); -INSERT INTO `act_hi_actinst` VALUES ('302591', 'process_leave:1:302555', '302556', '302580', 'sid-1CC133B2-44B1-4830-9C59-7D3564C933FA', NULL, NULL, NULL, 'exclusiveGateway', NULL, '2022-03-31 11:05:44.000', '2022-03-31 11:05:44.000', 0, ''); -INSERT INTO `act_hi_actinst` VALUES ('302592', 'process_leave:1:302555', '302556', '302580', 'sid-F68DCCA0-F7A4-44D4-9E44-56A682D87ECA', NULL, NULL, NULL, 'endEvent', NULL, '2022-03-31 11:05:44.000', '2022-03-31 11:05:44.000', 0, ''); -INSERT INTO `act_hi_actinst` VALUES ('302593', 'process_leave:1:302555', '302556', '302556', 'sid-BE372D14-F509-4EDB-87E8-7B2107835AE5', NULL, NULL, NULL, 'exclusiveGateway', NULL, '2022-03-31 11:05:44.000', '2022-03-31 11:05:44.000', 0, ''); -INSERT INTO `act_hi_actinst` VALUES ('302594', 'process_leave:1:302555', '302556', '302556', 'user2', '302595', NULL, '人事审批', 'userTask', '98b051b03681de6028993a5d14ac93cb', '2022-03-31 11:05:44.000', NULL, NULL, ''); -INSERT INTO `act_hi_actinst` VALUES ('302600', 'process_leave:1:302555', '302599', '302599', 'start', NULL, NULL, 'start', 'startEvent', NULL, '2022-03-31 11:16:00.000', '2022-03-31 11:16:00.000', 8, ''); -INSERT INTO `act_hi_actinst` VALUES ('302608', 'process_leave:1:302555', '302599', '302599', 'user1', '302609', NULL, '经理审批', 'userTask', '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 11:16:00.000', '2022-03-31 11:18:00.000', 120357, ''); -INSERT INTO `act_hi_actinst` VALUES ('302622', 'process_leave:1:302555', '302599', '302599', 'sid-950749EA-4BB6-4276-B67A-DE03E34A0573', NULL, NULL, NULL, 'exclusiveGateway', NULL, '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000', 0, ''); -INSERT INTO `act_hi_actinst` VALUES ('302624', 'process_leave:1:302555', '302599', '302623', 'child', NULL, NULL, 'subProcess', 'subProcess', NULL, '2022-03-31 11:18:00.000', NULL, NULL, ''); -INSERT INTO `act_hi_actinst` VALUES ('302625', 'process_leave:1:302555', '302599', '302623', 'sstart', NULL, NULL, NULL, 'startEvent', NULL, '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000', 9, ''); -INSERT INTO `act_hi_actinst` VALUES ('302626', 'process_leave:1:302555', '302599', '302623', 'allmanager', '302627', NULL, '总经理审批', 'userTask', 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:18:00.000', NULL, NULL, ''); +INSERT INTO `act_hi_actinst` +VALUES ('247553', 'process_leave:1:247536', '247552', '247552', 'start', NULL, NULL, 'start', 'startEvent', NULL, + '2018-06-14 23:44:03.000', '2018-06-14 23:44:03.000', 1, ''); +INSERT INTO `act_hi_actinst` +VALUES ('247559', 'process_leave:1:247536', '247552', '247552', 'user1', '247560', NULL, '经理审批', 'userTask', NULL, + '2018-06-14 23:44:03.000', NULL, NULL, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302557', 'process_leave:1:302555', '302556', '302556', 'start', NULL, NULL, 'start', 'startEvent', NULL, + '2022-03-31 10:59:17.000', '2022-03-31 10:59:17.000', 10, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302565', 'process_leave:1:302555', '302556', '302556', 'user1', '302566', NULL, '经理审批', 'userTask', + '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 10:59:17.000', '2022-03-31 11:04:52.000', 335536, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302579', 'process_leave:1:302555', '302556', '302556', 'sid-950749EA-4BB6-4276-B67A-DE03E34A0573', NULL, NULL, + NULL, 'exclusiveGateway', NULL, '2022-03-31 11:04:52.000', '2022-03-31 11:04:52.000', 43, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302581', 'process_leave:1:302555', '302556', '302580', 'child', NULL, NULL, 'subProcess', 'subProcess', NULL, + '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000', 52313, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302582', 'process_leave:1:302555', '302556', '302580', 'sstart', NULL, NULL, NULL, 'startEvent', NULL, + '2022-03-31 11:04:52.000', '2022-03-31 11:04:52.000', 31, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302583', 'process_leave:1:302555', '302556', '302580', 'allmanager', '302584', NULL, '总经理审批', 'userTask', + 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000', 52298, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302591', 'process_leave:1:302555', '302556', '302580', 'sid-1CC133B2-44B1-4830-9C59-7D3564C933FA', NULL, NULL, + NULL, 'exclusiveGateway', NULL, '2022-03-31 11:05:44.000', '2022-03-31 11:05:44.000', 0, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302592', 'process_leave:1:302555', '302556', '302580', 'sid-F68DCCA0-F7A4-44D4-9E44-56A682D87ECA', NULL, NULL, + NULL, 'endEvent', NULL, '2022-03-31 11:05:44.000', '2022-03-31 11:05:44.000', 0, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302593', 'process_leave:1:302555', '302556', '302556', 'sid-BE372D14-F509-4EDB-87E8-7B2107835AE5', NULL, NULL, + NULL, 'exclusiveGateway', NULL, '2022-03-31 11:05:44.000', '2022-03-31 11:05:44.000', 0, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302594', 'process_leave:1:302555', '302556', '302556', 'user2', '302595', NULL, '人事审批', 'userTask', + '98b051b03681de6028993a5d14ac93cb', '2022-03-31 11:05:44.000', NULL, NULL, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302600', 'process_leave:1:302555', '302599', '302599', 'start', NULL, NULL, 'start', 'startEvent', NULL, + '2022-03-31 11:16:00.000', '2022-03-31 11:16:00.000', 8, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302608', 'process_leave:1:302555', '302599', '302599', 'user1', '302609', NULL, '经理审批', 'userTask', + '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 11:16:00.000', '2022-03-31 11:18:00.000', 120357, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302622', 'process_leave:1:302555', '302599', '302599', 'sid-950749EA-4BB6-4276-B67A-DE03E34A0573', NULL, NULL, + NULL, 'exclusiveGateway', NULL, '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000', 0, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302624', 'process_leave:1:302555', '302599', '302623', 'child', NULL, NULL, 'subProcess', 'subProcess', NULL, + '2022-03-31 11:18:00.000', NULL, NULL, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302625', 'process_leave:1:302555', '302599', '302623', 'sstart', NULL, NULL, NULL, 'startEvent', NULL, + '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000', 9, ''); +INSERT INTO `act_hi_actinst` +VALUES ('302626', 'process_leave:1:302555', '302599', '302623', 'allmanager', '302627', NULL, '总经理审批', 'userTask', + 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:18:00.000', NULL, NULL, ''); -- ---------------------------- -- Table structure for act_hi_attachment -- ---------------------------- DROP TABLE IF EXISTS `act_hi_attachment`; -CREATE TABLE `act_hi_attachment` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `URL_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CONTENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TIME_` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE +CREATE TABLE `act_hi_attachment` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `URL_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CONTENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TIME_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_hi_comment -- ---------------------------- DROP TABLE IF EXISTS `act_hi_comment`; -CREATE TABLE `act_hi_comment` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TIME_` datetime(3) NOT NULL, - `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ACTION_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `MESSAGE_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `FULL_MSG_` longblob NULL, - PRIMARY KEY (`ID_`) USING BTREE +CREATE TABLE `act_hi_comment` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TIME_` datetime(3) NOT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ACTION_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `MESSAGE_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `FULL_MSG_` longblob NULL, + PRIMARY KEY (`ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_hi_detail -- ---------------------------- DROP TABLE IF EXISTS `act_hi_detail`; -CREATE TABLE `act_hi_detail` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ACT_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `VAR_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `TIME_` datetime(3) NOT NULL, - `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DOUBLE_` double NULL DEFAULT NULL, - `LONG_` bigint(20) NULL DEFAULT NULL, - `TEXT_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TEXT2_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_HI_DETAIL_PROC_INST`(`PROC_INST_ID_`) USING BTREE, - INDEX `ACT_IDX_HI_DETAIL_ACT_INST`(`ACT_INST_ID_`) USING BTREE, - INDEX `ACT_IDX_HI_DETAIL_TIME`(`TIME_`) USING BTREE, - INDEX `ACT_IDX_HI_DETAIL_NAME`(`NAME_`) USING BTREE, - INDEX `ACT_IDX_HI_DETAIL_TASK_ID`(`TASK_ID_`) USING BTREE +CREATE TABLE `act_hi_detail` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ACT_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `VAR_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `TIME_` datetime(3) NOT NULL, + `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DOUBLE_` double NULL DEFAULT NULL, + `LONG_` bigint(20) NULL DEFAULT NULL, + `TEXT_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TEXT2_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_PROC_INST`(`PROC_INST_ID_`) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_ACT_INST`(`ACT_INST_ID_`) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_TIME`(`TIME_`) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_NAME`(`NAME_`) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_TASK_ID`(`TASK_ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_hi_detail -- ---------------------------- -INSERT INTO `act_hi_detail` VALUES ('247558', 'VariableUpdate', '247552', '247552', NULL, '247553', 'userLeave', 'serializable', 0, '2018-06-14 23:44:03.000', '247557', NULL, NULL, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302562', 'VariableUpdate', '302556', '302556', NULL, '302557', 'baseTask', 'serializable', 0, '2022-03-31 10:59:17.000', '302561', NULL, NULL, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302564', 'VariableUpdate', '302556', '302556', NULL, '302557', 'day', 'integer', 0, '2022-03-31 10:59:17.000', NULL, NULL, 3, '3', NULL); -INSERT INTO `act_hi_detail` VALUES ('302570', 'VariableUpdate', '302556', '302556', NULL, '302565', 'flag', 'boolean', 0, '2022-03-31 11:04:52.000', NULL, NULL, 1, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302572', 'VariableUpdate', '302556', '302556', NULL, '302565', 'needfinish', 'integer', 0, '2022-03-31 11:04:52.000', NULL, NULL, 1, '1', NULL); -INSERT INTO `act_hi_detail` VALUES ('302577', 'VariableUpdate', '302556', '302556', NULL, '302565', 'leaveOpinionList', 'serializable', 0, '2022-03-31 11:04:52.000', '302576', NULL, NULL, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302578', 'VariableUpdate', '302556', '302556', NULL, '302565', 'day', 'integer', 1, '2022-03-31 11:04:52.000', NULL, NULL, 3, '3', NULL); -INSERT INTO `act_hi_detail` VALUES ('302586', 'VariableUpdate', '302556', '302556', NULL, '302583', 'flag', 'boolean', 1, '2022-03-31 11:05:44.000', NULL, NULL, 1, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302587', 'VariableUpdate', '302556', '302556', NULL, '302583', 'needfinish', 'integer', 1, '2022-03-31 11:05:44.000', NULL, NULL, 1, '1', NULL); -INSERT INTO `act_hi_detail` VALUES ('302589', 'VariableUpdate', '302556', '302556', NULL, '302583', 'leaveOpinionList', 'serializable', 1, '2022-03-31 11:05:44.000', '302588', NULL, NULL, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302590', 'VariableUpdate', '302556', '302556', NULL, '302583', 'day', 'integer', 1, '2022-03-31 11:05:44.000', NULL, NULL, 3, '3', NULL); -INSERT INTO `act_hi_detail` VALUES ('302605', 'VariableUpdate', '302599', '302599', NULL, '302600', 'baseTask', 'serializable', 0, '2022-03-31 11:16:00.000', '302604', NULL, NULL, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302607', 'VariableUpdate', '302599', '302599', NULL, '302600', 'day', 'integer', 0, '2022-03-31 11:16:00.000', NULL, NULL, 5, '5', NULL); -INSERT INTO `act_hi_detail` VALUES ('302613', 'VariableUpdate', '302599', '302599', NULL, '302608', 'flag', 'boolean', 0, '2022-03-31 11:18:00.000', NULL, NULL, 1, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302615', 'VariableUpdate', '302599', '302599', NULL, '302608', 'needfinish', 'integer', 0, '2022-03-31 11:18:00.000', NULL, NULL, 1, '1', NULL); -INSERT INTO `act_hi_detail` VALUES ('302620', 'VariableUpdate', '302599', '302599', NULL, '302608', 'leaveOpinionList', 'serializable', 0, '2022-03-31 11:18:00.000', '302619', NULL, NULL, NULL, NULL); -INSERT INTO `act_hi_detail` VALUES ('302621', 'VariableUpdate', '302599', '302599', NULL, '302608', 'day', 'integer', 1, '2022-03-31 11:18:00.000', NULL, NULL, 5, '5', NULL); +INSERT INTO `act_hi_detail` +VALUES ('247558', 'VariableUpdate', '247552', '247552', NULL, '247553', 'userLeave', 'serializable', 0, + '2018-06-14 23:44:03.000', '247557', NULL, NULL, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302562', 'VariableUpdate', '302556', '302556', NULL, '302557', 'baseTask', 'serializable', 0, + '2022-03-31 10:59:17.000', '302561', NULL, NULL, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302564', 'VariableUpdate', '302556', '302556', NULL, '302557', 'day', 'integer', 0, '2022-03-31 10:59:17.000', + NULL, NULL, 3, '3', NULL); +INSERT INTO `act_hi_detail` +VALUES ('302570', 'VariableUpdate', '302556', '302556', NULL, '302565', 'flag', 'boolean', 0, '2022-03-31 11:04:52.000', + NULL, NULL, 1, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302572', 'VariableUpdate', '302556', '302556', NULL, '302565', 'needfinish', 'integer', 0, + '2022-03-31 11:04:52.000', NULL, NULL, 1, '1', NULL); +INSERT INTO `act_hi_detail` +VALUES ('302577', 'VariableUpdate', '302556', '302556', NULL, '302565', 'leaveOpinionList', 'serializable', 0, + '2022-03-31 11:04:52.000', '302576', NULL, NULL, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302578', 'VariableUpdate', '302556', '302556', NULL, '302565', 'day', 'integer', 1, '2022-03-31 11:04:52.000', + NULL, NULL, 3, '3', NULL); +INSERT INTO `act_hi_detail` +VALUES ('302586', 'VariableUpdate', '302556', '302556', NULL, '302583', 'flag', 'boolean', 1, '2022-03-31 11:05:44.000', + NULL, NULL, 1, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302587', 'VariableUpdate', '302556', '302556', NULL, '302583', 'needfinish', 'integer', 1, + '2022-03-31 11:05:44.000', NULL, NULL, 1, '1', NULL); +INSERT INTO `act_hi_detail` +VALUES ('302589', 'VariableUpdate', '302556', '302556', NULL, '302583', 'leaveOpinionList', 'serializable', 1, + '2022-03-31 11:05:44.000', '302588', NULL, NULL, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302590', 'VariableUpdate', '302556', '302556', NULL, '302583', 'day', 'integer', 1, '2022-03-31 11:05:44.000', + NULL, NULL, 3, '3', NULL); +INSERT INTO `act_hi_detail` +VALUES ('302605', 'VariableUpdate', '302599', '302599', NULL, '302600', 'baseTask', 'serializable', 0, + '2022-03-31 11:16:00.000', '302604', NULL, NULL, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302607', 'VariableUpdate', '302599', '302599', NULL, '302600', 'day', 'integer', 0, '2022-03-31 11:16:00.000', + NULL, NULL, 5, '5', NULL); +INSERT INTO `act_hi_detail` +VALUES ('302613', 'VariableUpdate', '302599', '302599', NULL, '302608', 'flag', 'boolean', 0, '2022-03-31 11:18:00.000', + NULL, NULL, 1, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302615', 'VariableUpdate', '302599', '302599', NULL, '302608', 'needfinish', 'integer', 0, + '2022-03-31 11:18:00.000', NULL, NULL, 1, '1', NULL); +INSERT INTO `act_hi_detail` +VALUES ('302620', 'VariableUpdate', '302599', '302599', NULL, '302608', 'leaveOpinionList', 'serializable', 0, + '2022-03-31 11:18:00.000', '302619', NULL, NULL, NULL, NULL); +INSERT INTO `act_hi_detail` +VALUES ('302621', 'VariableUpdate', '302599', '302599', NULL, '302608', 'day', 'integer', 1, '2022-03-31 11:18:00.000', + NULL, NULL, 5, '5', NULL); -- ---------------------------- -- Table structure for act_hi_identitylink -- ---------------------------- DROP TABLE IF EXISTS `act_hi_identitylink`; -CREATE TABLE `act_hi_identitylink` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `GROUP_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_HI_IDENT_LNK_USER`(`USER_ID_`) USING BTREE, - INDEX `ACT_IDX_HI_IDENT_LNK_TASK`(`TASK_ID_`) USING BTREE, - INDEX `ACT_IDX_HI_IDENT_LNK_PROCINST`(`PROC_INST_ID_`) USING BTREE +CREATE TABLE `act_hi_identitylink` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `GROUP_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_USER`(`USER_ID_`) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_TASK`(`TASK_ID_`) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_PROCINST`(`PROC_INST_ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_hi_identitylink -- ---------------------------- -INSERT INTO `act_hi_identitylink` VALUES ('302567', NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302556'); -INSERT INTO `act_hi_identitylink` VALUES ('302568', 'e346e96368484c8fa7f217ce550a0186', 'candidate', NULL, '302566', NULL); -INSERT INTO `act_hi_identitylink` VALUES ('302585', NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302556'); -INSERT INTO `act_hi_identitylink` VALUES ('302596', NULL, 'participant', '98b051b03681de6028993a5d14ac93cb', NULL, '302556'); -INSERT INTO `act_hi_identitylink` VALUES ('302610', NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302599'); -INSERT INTO `act_hi_identitylink` VALUES ('302611', 'e346e96368484c8fa7f217ce550a0186', 'candidate', NULL, '302609', NULL); -INSERT INTO `act_hi_identitylink` VALUES ('302628', NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302599'); +INSERT INTO `act_hi_identitylink` +VALUES ('302567', NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302556'); +INSERT INTO `act_hi_identitylink` +VALUES ('302568', 'e346e96368484c8fa7f217ce550a0186', 'candidate', NULL, '302566', NULL); +INSERT INTO `act_hi_identitylink` +VALUES ('302585', NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302556'); +INSERT INTO `act_hi_identitylink` +VALUES ('302596', NULL, 'participant', '98b051b03681de6028993a5d14ac93cb', NULL, '302556'); +INSERT INTO `act_hi_identitylink` +VALUES ('302610', NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302599'); +INSERT INTO `act_hi_identitylink` +VALUES ('302611', 'e346e96368484c8fa7f217ce550a0186', 'candidate', NULL, '302609', NULL); +INSERT INTO `act_hi_identitylink` +VALUES ('302628', NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302599'); -- ---------------------------- -- Table structure for act_hi_procinst -- ---------------------------- DROP TABLE IF EXISTS `act_hi_procinst`; -CREATE TABLE `act_hi_procinst` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `START_TIME_` datetime(3) NOT NULL, - `END_TIME_` datetime(3) NULL DEFAULT NULL, - `DURATION_` bigint(20) NULL DEFAULT NULL, - `START_USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `START_ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `END_ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `SUPER_PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DELETE_REASON_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - UNIQUE INDEX `PROC_INST_ID_`(`PROC_INST_ID_`) USING BTREE, - INDEX `ACT_IDX_HI_PRO_INST_END`(`END_TIME_`) USING BTREE, - INDEX `ACT_IDX_HI_PRO_I_BUSKEY`(`BUSINESS_KEY_`) USING BTREE +CREATE TABLE `act_hi_procinst` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `DURATION_` bigint(20) NULL DEFAULT NULL, + `START_USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `START_ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `END_ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `SUPER_PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DELETE_REASON_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `PROC_INST_ID_`(`PROC_INST_ID_`) USING BTREE, + INDEX `ACT_IDX_HI_PRO_INST_END`(`END_TIME_`) USING BTREE, + INDEX `ACT_IDX_HI_PRO_I_BUSKEY`(`BUSINESS_KEY_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_hi_procinst -- ---------------------------- -INSERT INTO `act_hi_procinst` VALUES ('247552', '247552', NULL, 'process_leave:1:247536', '2018-06-14 23:44:03.000', NULL, NULL, NULL, 'start', NULL, NULL, NULL, '', NULL); -INSERT INTO `act_hi_procinst` VALUES ('302556', '302556', NULL, 'process_leave:1:302555', '2022-03-31 10:59:17.000', NULL, NULL, NULL, 'start', NULL, NULL, NULL, '', NULL); -INSERT INTO `act_hi_procinst` VALUES ('302599', '302599', NULL, 'process_leave:1:302555', '2022-03-31 11:16:00.000', NULL, NULL, NULL, 'start', NULL, NULL, NULL, '', NULL); +INSERT INTO `act_hi_procinst` +VALUES ('247552', '247552', NULL, 'process_leave:1:247536', '2018-06-14 23:44:03.000', NULL, NULL, NULL, 'start', NULL, + NULL, NULL, '', NULL); +INSERT INTO `act_hi_procinst` +VALUES ('302556', '302556', NULL, 'process_leave:1:302555', '2022-03-31 10:59:17.000', NULL, NULL, NULL, 'start', NULL, + NULL, NULL, '', NULL); +INSERT INTO `act_hi_procinst` +VALUES ('302599', '302599', NULL, 'process_leave:1:302555', '2022-03-31 11:16:00.000', NULL, NULL, NULL, 'start', NULL, + NULL, NULL, '', NULL); -- ---------------------------- -- Table structure for act_hi_taskinst -- ---------------------------- DROP TABLE IF EXISTS `act_hi_taskinst`; -CREATE TABLE `act_hi_taskinst` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_DEF_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PARENT_TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ASSIGNEE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `START_TIME_` datetime(3) NOT NULL, - `CLAIM_TIME_` datetime(3) NULL DEFAULT NULL, - `END_TIME_` datetime(3) NULL DEFAULT NULL, - `DURATION_` bigint(20) NULL DEFAULT NULL, - `DELETE_REASON_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PRIORITY_` int(11) NULL DEFAULT NULL, - `DUE_DATE_` datetime(3) NULL DEFAULT NULL, - `FORM_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_HI_TASK_INST_PROCINST`(`PROC_INST_ID_`) USING BTREE +CREATE TABLE `act_hi_taskinst` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_DEF_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PARENT_TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ASSIGNEE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `CLAIM_TIME_` datetime(3) NULL DEFAULT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `DURATION_` bigint(20) NULL DEFAULT NULL, + `DELETE_REASON_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PRIORITY_` int(11) NULL DEFAULT NULL, + `DUE_DATE_` datetime(3) NULL DEFAULT NULL, + `FORM_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_TASK_INST_PROCINST`(`PROC_INST_ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_hi_taskinst -- ---------------------------- -INSERT INTO `act_hi_taskinst` VALUES ('247560', 'process_leave:1:247536', 'user1', '247552', '247552', '经理审批', NULL, NULL, NULL, NULL, '2018-06-14 23:44:03.000', NULL, NULL, NULL, NULL, 50, NULL, NULL, NULL, ''); -INSERT INTO `act_hi_taskinst` VALUES ('302566', 'process_leave:1:302555', 'user1', '302556', '302556', '经理审批', NULL, NULL, NULL, '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 10:59:17.000', NULL, '2022-03-31 11:04:52.000', 335519, 'completed', 50, NULL, NULL, NULL, ''); -INSERT INTO `act_hi_taskinst` VALUES ('302584', 'process_leave:1:302555', 'allmanager', '302556', '302580', '总经理审批', NULL, NULL, NULL, 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:04:52.000', NULL, '2022-03-31 11:05:44.000', 52287, 'completed', 50, NULL, NULL, NULL, ''); -INSERT INTO `act_hi_taskinst` VALUES ('302595', 'process_leave:1:302555', 'user2', '302556', '302556', '人事审批', NULL, NULL, NULL, '98b051b03681de6028993a5d14ac93cb', '2022-03-31 11:05:44.000', NULL, NULL, NULL, NULL, 50, NULL, NULL, NULL, ''); -INSERT INTO `act_hi_taskinst` VALUES ('302609', 'process_leave:1:302555', 'user1', '302599', '302599', '经理审批', NULL, NULL, NULL, '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 11:16:00.000', NULL, '2022-03-31 11:18:00.000', 120347, 'completed', 50, NULL, NULL, NULL, ''); -INSERT INTO `act_hi_taskinst` VALUES ('302627', 'process_leave:1:302555', 'allmanager', '302599', '302623', '总经理审批', NULL, NULL, NULL, 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:18:00.000', NULL, NULL, NULL, NULL, 50, NULL, NULL, NULL, ''); +INSERT INTO `act_hi_taskinst` +VALUES ('247560', 'process_leave:1:247536', 'user1', '247552', '247552', '经理审批', NULL, NULL, NULL, NULL, + '2018-06-14 23:44:03.000', NULL, NULL, NULL, NULL, 50, NULL, NULL, NULL, ''); +INSERT INTO `act_hi_taskinst` +VALUES ('302566', 'process_leave:1:302555', 'user1', '302556', '302556', '经理审批', NULL, NULL, NULL, + '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 10:59:17.000', NULL, '2022-03-31 11:04:52.000', 335519, + 'completed', 50, NULL, NULL, NULL, ''); +INSERT INTO `act_hi_taskinst` +VALUES ('302584', 'process_leave:1:302555', 'allmanager', '302556', '302580', '总经理审批', NULL, NULL, NULL, + 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:04:52.000', NULL, '2022-03-31 11:05:44.000', 52287, + 'completed', 50, NULL, NULL, NULL, ''); +INSERT INTO `act_hi_taskinst` +VALUES ('302595', 'process_leave:1:302555', 'user2', '302556', '302556', '人事审批', NULL, NULL, NULL, + '98b051b03681de6028993a5d14ac93cb', '2022-03-31 11:05:44.000', NULL, NULL, NULL, NULL, 50, NULL, NULL, NULL, + ''); +INSERT INTO `act_hi_taskinst` +VALUES ('302609', 'process_leave:1:302555', 'user1', '302599', '302599', '经理审批', NULL, NULL, NULL, + '0b7625fedaa05e85f282486e1c9c91b9', '2022-03-31 11:16:00.000', NULL, '2022-03-31 11:18:00.000', 120347, + 'completed', 50, NULL, NULL, NULL, ''); +INSERT INTO `act_hi_taskinst` +VALUES ('302627', 'process_leave:1:302555', 'allmanager', '302599', '302623', '总经理审批', NULL, NULL, NULL, + 'd818ac6a86cf1a64d2184bf0699d67a8', '2022-03-31 11:18:00.000', NULL, NULL, NULL, NULL, 50, NULL, NULL, NULL, + ''); -- ---------------------------- -- Table structure for act_hi_varinst -- ---------------------------- DROP TABLE IF EXISTS `act_hi_varinst`; -CREATE TABLE `act_hi_varinst` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `VAR_TYPE_` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DOUBLE_` double NULL DEFAULT NULL, - `LONG_` bigint(20) NULL DEFAULT NULL, - `TEXT_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TEXT2_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, - `LAST_UPDATED_TIME_` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_HI_PROCVAR_PROC_INST`(`PROC_INST_ID_`) USING BTREE, - INDEX `ACT_IDX_HI_PROCVAR_NAME_TYPE`(`NAME_`, `VAR_TYPE_`) USING BTREE, - INDEX `ACT_IDX_HI_PROCVAR_TASK_ID`(`TASK_ID_`) USING BTREE +CREATE TABLE `act_hi_varinst` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `VAR_TYPE_` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DOUBLE_` double NULL DEFAULT NULL, + `LONG_` bigint(20) NULL DEFAULT NULL, + `TEXT_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TEXT2_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_UPDATED_TIME_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_PROCVAR_PROC_INST`(`PROC_INST_ID_`) USING BTREE, + INDEX `ACT_IDX_HI_PROCVAR_NAME_TYPE`(`NAME_`, `VAR_TYPE_`) USING BTREE, + INDEX `ACT_IDX_HI_PROCVAR_TASK_ID`(`TASK_ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_hi_varinst -- ---------------------------- -INSERT INTO `act_hi_varinst` VALUES ('247555', '247552', '247552', NULL, 'userLeave', 'serializable', 0, '247556', NULL, NULL, NULL, NULL, '2018-06-14 23:44:03.000', '2018-06-14 23:44:03.000'); -INSERT INTO `act_hi_varinst` VALUES ('302559', '302556', '302556', NULL, 'baseTask', 'serializable', 0, '302560', NULL, NULL, NULL, NULL, '2022-03-31 10:59:17.000', '2022-03-31 10:59:17.000'); -INSERT INTO `act_hi_varinst` VALUES ('302563', '302556', '302556', NULL, 'day', 'integer', 2, NULL, NULL, 3, '3', NULL, '2022-03-31 10:59:17.000', '2022-03-31 11:05:44.000'); -INSERT INTO `act_hi_varinst` VALUES ('302569', '302556', '302556', NULL, 'flag', 'boolean', 1, NULL, NULL, 1, NULL, NULL, '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000'); -INSERT INTO `act_hi_varinst` VALUES ('302571', '302556', '302556', NULL, 'needfinish', 'integer', 1, NULL, NULL, 1, '1', NULL, '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000'); -INSERT INTO `act_hi_varinst` VALUES ('302574', '302556', '302556', NULL, 'leaveOpinionList', 'serializable', 1, '302575', NULL, NULL, NULL, NULL, '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000'); -INSERT INTO `act_hi_varinst` VALUES ('302602', '302599', '302599', NULL, 'baseTask', 'serializable', 0, '302603', NULL, NULL, NULL, NULL, '2022-03-31 11:16:00.000', '2022-03-31 11:16:00.000'); -INSERT INTO `act_hi_varinst` VALUES ('302606', '302599', '302599', NULL, 'day', 'integer', 1, NULL, NULL, 5, '5', NULL, '2022-03-31 11:16:00.000', '2022-03-31 11:18:00.000'); -INSERT INTO `act_hi_varinst` VALUES ('302612', '302599', '302599', NULL, 'flag', 'boolean', 0, NULL, NULL, 1, NULL, NULL, '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000'); -INSERT INTO `act_hi_varinst` VALUES ('302614', '302599', '302599', NULL, 'needfinish', 'integer', 0, NULL, NULL, 1, '1', NULL, '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000'); -INSERT INTO `act_hi_varinst` VALUES ('302617', '302599', '302599', NULL, 'leaveOpinionList', 'serializable', 0, '302618', NULL, NULL, NULL, NULL, '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000'); +INSERT INTO `act_hi_varinst` +VALUES ('247555', '247552', '247552', NULL, 'userLeave', 'serializable', 0, '247556', NULL, NULL, NULL, NULL, + '2018-06-14 23:44:03.000', '2018-06-14 23:44:03.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302559', '302556', '302556', NULL, 'baseTask', 'serializable', 0, '302560', NULL, NULL, NULL, NULL, + '2022-03-31 10:59:17.000', '2022-03-31 10:59:17.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302563', '302556', '302556', NULL, 'day', 'integer', 2, NULL, NULL, 3, '3', NULL, '2022-03-31 10:59:17.000', + '2022-03-31 11:05:44.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302569', '302556', '302556', NULL, 'flag', 'boolean', 1, NULL, NULL, 1, NULL, NULL, '2022-03-31 11:04:52.000', + '2022-03-31 11:05:44.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302571', '302556', '302556', NULL, 'needfinish', 'integer', 1, NULL, NULL, 1, '1', NULL, + '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302574', '302556', '302556', NULL, 'leaveOpinionList', 'serializable', 1, '302575', NULL, NULL, NULL, NULL, + '2022-03-31 11:04:52.000', '2022-03-31 11:05:44.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302602', '302599', '302599', NULL, 'baseTask', 'serializable', 0, '302603', NULL, NULL, NULL, NULL, + '2022-03-31 11:16:00.000', '2022-03-31 11:16:00.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302606', '302599', '302599', NULL, 'day', 'integer', 1, NULL, NULL, 5, '5', NULL, '2022-03-31 11:16:00.000', + '2022-03-31 11:18:00.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302612', '302599', '302599', NULL, 'flag', 'boolean', 0, NULL, NULL, 1, NULL, NULL, '2022-03-31 11:18:00.000', + '2022-03-31 11:18:00.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302614', '302599', '302599', NULL, 'needfinish', 'integer', 0, NULL, NULL, 1, '1', NULL, + '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000'); +INSERT INTO `act_hi_varinst` +VALUES ('302617', '302599', '302599', NULL, 'leaveOpinionList', 'serializable', 0, '302618', NULL, NULL, NULL, NULL, + '2022-03-31 11:18:00.000', '2022-03-31 11:18:00.000'); -- ---------------------------- -- Table structure for act_id_group -- ---------------------------- DROP TABLE IF EXISTS `act_id_group`; -CREATE TABLE `act_id_group` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE +CREATE TABLE `act_id_group` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_id_group -- ---------------------------- -INSERT INTO `act_id_group` VALUES ('023366f3457511e8bcf1309c2315f9aa', 1, 'hr', NULL); -INSERT INTO `act_id_group` VALUES ('0ea934e5e55411e7b983201a068c6482', 1, 'manage', NULL); -INSERT INTO `act_id_group` VALUES ('2619a672e53811e7b983201a068c6482', 1, 'admin', NULL); -INSERT INTO `act_id_group` VALUES ('4bb891d8caf84cc6ba27e515e80ac40d', 1, 'blogAdmin', NULL); -INSERT INTO `act_id_group` VALUES ('dcb0f642fe9611e7b472201a068c6482', 1, 'dev', NULL); -INSERT INTO `act_id_group` VALUES ('e346e96368484c8fa7f217ce550a0186', 1, 'DeputyManager', NULL); +INSERT INTO `act_id_group` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 1, 'hr', NULL); +INSERT INTO `act_id_group` +VALUES ('0ea934e5e55411e7b983201a068c6482', 1, 'manage', NULL); +INSERT INTO `act_id_group` +VALUES ('2619a672e53811e7b983201a068c6482', 1, 'admin', NULL); +INSERT INTO `act_id_group` +VALUES ('4bb891d8caf84cc6ba27e515e80ac40d', 1, 'blogAdmin', NULL); +INSERT INTO `act_id_group` +VALUES ('dcb0f642fe9611e7b472201a068c6482', 1, 'dev', NULL); +INSERT INTO `act_id_group` +VALUES ('e346e96368484c8fa7f217ce550a0186', 1, 'DeputyManager', NULL); -- ---------------------------- -- Table structure for act_id_info -- ---------------------------- DROP TABLE IF EXISTS `act_id_info`; -CREATE TABLE `act_id_info` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `USER_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TYPE_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `VALUE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PASSWORD_` longblob NULL, - `PARENT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE +CREATE TABLE `act_id_info` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `USER_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TYPE_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `VALUE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PASSWORD_` longblob NULL, + `PARENT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_id_membership -- ---------------------------- DROP TABLE IF EXISTS `act_id_membership`; -CREATE TABLE `act_id_membership` ( - `USER_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `GROUP_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`USER_ID_`, `GROUP_ID_`) USING BTREE, - INDEX `ACT_FK_MEMB_GROUP`(`GROUP_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_MEMB_GROUP` FOREIGN KEY (`GROUP_ID_`) REFERENCES `act_id_group` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_MEMB_USER` FOREIGN KEY (`USER_ID_`) REFERENCES `act_id_user` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_id_membership` +( + `USER_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `GROUP_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`USER_ID_`, `GROUP_ID_`) USING BTREE, + INDEX `ACT_FK_MEMB_GROUP`(`GROUP_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_MEMB_GROUP` FOREIGN KEY (`GROUP_ID_`) REFERENCES `act_id_group` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_MEMB_USER` FOREIGN KEY (`USER_ID_`) REFERENCES `act_id_user` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_id_membership -- ---------------------------- -INSERT INTO `act_id_membership` VALUES ('98b051b03681de6028993a5d14ac93cb', '023366f3457511e8bcf1309c2315f9aa'); -INSERT INTO `act_id_membership` VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', '0ea934e5e55411e7b983201a068c6482'); -INSERT INTO `act_id_membership` VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '2619a672e53811e7b983201a068c6482'); -INSERT INTO `act_id_membership` VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '4bb891d8caf84cc6ba27e515e80ac40d'); -INSERT INTO `act_id_membership` VALUES ('5946a985f733c57f1ab71689f7b6aeea', 'dcb0f642fe9611e7b472201a068c6482'); -INSERT INTO `act_id_membership` VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 'e346e96368484c8fa7f217ce550a0186'); +INSERT INTO `act_id_membership` +VALUES ('98b051b03681de6028993a5d14ac93cb', '023366f3457511e8bcf1309c2315f9aa'); +INSERT INTO `act_id_membership` +VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', '0ea934e5e55411e7b983201a068c6482'); +INSERT INTO `act_id_membership` +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '2619a672e53811e7b983201a068c6482'); +INSERT INTO `act_id_membership` +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '4bb891d8caf84cc6ba27e515e80ac40d'); +INSERT INTO `act_id_membership` +VALUES ('5946a985f733c57f1ab71689f7b6aeea', 'dcb0f642fe9611e7b472201a068c6482'); +INSERT INTO `act_id_membership` +VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 'e346e96368484c8fa7f217ce550a0186'); -- ---------------------------- -- Table structure for act_id_user -- ---------------------------- DROP TABLE IF EXISTS `act_id_user`; -CREATE TABLE `act_id_user` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `FIRST_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `LAST_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EMAIL_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PWD_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PICTURE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE +CREATE TABLE `act_id_user` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `FIRST_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `LAST_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EMAIL_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PWD_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PICTURE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_id_user -- ---------------------------- -INSERT INTO `act_id_user` VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 1, NULL, NULL, '11@qq.com', NULL, NULL); -INSERT INTO `act_id_user` VALUES ('5946a985f733c57f1ab71689f7b6aeea', 1, NULL, NULL, '11@qq.com', NULL, NULL); -INSERT INTO `act_id_user` VALUES ('98b051b03681de6028993a5d14ac93cb', 1, NULL, NULL, '11@qq.com', NULL, NULL); -INSERT INTO `act_id_user` VALUES ('acfc0e9232f54732a5d9ffe9071bf572', 1, NULL, NULL, '', NULL, NULL); -INSERT INTO `act_id_user` VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', 1, NULL, NULL, '11@qq.com', NULL, NULL); +INSERT INTO `act_id_user` +VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 1, NULL, NULL, '11@qq.com', NULL, NULL); +INSERT INTO `act_id_user` +VALUES ('5946a985f733c57f1ab71689f7b6aeea', 1, NULL, NULL, '11@qq.com', NULL, NULL); +INSERT INTO `act_id_user` +VALUES ('98b051b03681de6028993a5d14ac93cb', 1, NULL, NULL, '11@qq.com', NULL, NULL); +INSERT INTO `act_id_user` +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', 1, NULL, NULL, '', NULL, NULL); +INSERT INTO `act_id_user` +VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', 1, NULL, NULL, '11@qq.com', NULL, NULL); -- ---------------------------- -- Table structure for act_procdef_info -- ---------------------------- DROP TABLE IF EXISTS `act_procdef_info`; -CREATE TABLE `act_procdef_info` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `INFO_JSON_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - UNIQUE INDEX `ACT_UNIQ_INFO_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, - INDEX `ACT_IDX_INFO_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, - INDEX `ACT_FK_INFO_JSON_BA`(`INFO_JSON_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_INFO_JSON_BA` FOREIGN KEY (`INFO_JSON_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_procdef_info` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `INFO_JSON_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_UNIQ_INFO_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, + INDEX `ACT_IDX_INFO_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, + INDEX `ACT_FK_INFO_JSON_BA`(`INFO_JSON_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_INFO_JSON_BA` FOREIGN KEY (`INFO_JSON_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_re_deployment -- ---------------------------- DROP TABLE IF EXISTS `act_re_deployment`; -CREATE TABLE `act_re_deployment` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - `DEPLOY_TIME_` timestamp(3) NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE +CREATE TABLE `act_re_deployment` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + `DEPLOY_TIME_` timestamp(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_re_deployment -- ---------------------------- -INSERT INTO `act_re_deployment` VALUES ('247533', '请假流程', NULL, '', '2018-06-14 23:37:51.000'); -INSERT INTO `act_re_deployment` VALUES ('302552', '请假流程', NULL, '', '2022-03-31 10:58:53.000'); +INSERT INTO `act_re_deployment` +VALUES ('247533', '请假流程', NULL, '', '2018-06-14 23:37:51.000'); +INSERT INTO `act_re_deployment` +VALUES ('302552', '请假流程', NULL, '', '2022-03-31 10:58:53.000'); -- ---------------------------- -- Table structure for act_re_model -- ---------------------------- DROP TABLE IF EXISTS `act_re_model`; -CREATE TABLE `act_re_model` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, - `LAST_UPDATE_TIME_` timestamp(3) NULL DEFAULT NULL, - `VERSION_` int(11) NULL DEFAULT NULL, - `META_INFO_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EDITOR_SOURCE_VALUE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EDITOR_SOURCE_EXTRA_VALUE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_FK_MODEL_SOURCE`(`EDITOR_SOURCE_VALUE_ID_`) USING BTREE, - INDEX `ACT_FK_MODEL_SOURCE_EXTRA`(`EDITOR_SOURCE_EXTRA_VALUE_ID_`) USING BTREE, - INDEX `ACT_FK_MODEL_DEPLOYMENT`(`DEPLOYMENT_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_MODEL_DEPLOYMENT` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_MODEL_SOURCE` FOREIGN KEY (`EDITOR_SOURCE_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_MODEL_SOURCE_EXTRA` FOREIGN KEY (`EDITOR_SOURCE_EXTRA_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_re_model` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `LAST_UPDATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `VERSION_` int(11) NULL DEFAULT NULL, + `META_INFO_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EDITOR_SOURCE_VALUE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EDITOR_SOURCE_EXTRA_VALUE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_FK_MODEL_SOURCE`(`EDITOR_SOURCE_VALUE_ID_`) USING BTREE, + INDEX `ACT_FK_MODEL_SOURCE_EXTRA`(`EDITOR_SOURCE_EXTRA_VALUE_ID_`) USING BTREE, + INDEX `ACT_FK_MODEL_DEPLOYMENT`(`DEPLOYMENT_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_MODEL_DEPLOYMENT` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_MODEL_SOURCE` FOREIGN KEY (`EDITOR_SOURCE_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_MODEL_SOURCE_EXTRA` FOREIGN KEY (`EDITOR_SOURCE_EXTRA_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_re_model -- ---------------------------- -INSERT INTO `act_re_model` VALUES ('142517', 75, '请假流程', 'processKey', NULL, '2018-01-25 17:21:39.000', '2022-03-31 10:58:54.000', 1, '{\"name\":\"请假流程\",\"description\":\"\"}', '302552', '142518', '142519', ''); -INSERT INTO `act_re_model` VALUES ('212510', 11, '测试流程', 'processKey', NULL, '2018-04-27 19:57:22.000', '2018-12-11 23:10:00.000', 1, '{\"name\":\"测试流程\",\"description\":\"\"}', NULL, '212511', '212512', ''); -INSERT INTO `act_re_model` VALUES ('302597', 4, '新建流程', 'processKey', NULL, '2022-03-31 11:08:57.000', '2022-03-31 11:32:34.000', 1, '{\"name\":\"新建流程\",\"description\":\"\"}', NULL, '302598', '302633', ''); -INSERT INTO `act_re_model` VALUES ('302629', 2, '新建流程', 'processKey', NULL, '2022-03-31 11:25:58.000', '2022-03-31 11:25:58.000', 1, '{\"name\":\"新建流程\",\"description\":\"\",\"revision\":1}', NULL, '302630', NULL, ''); -INSERT INTO `act_re_model` VALUES ('302631', 2, '新建流程', 'processKey', NULL, '2022-03-31 11:31:43.000', '2022-03-31 11:31:43.000', 1, '{\"name\":\"新建流程\",\"description\":\"\",\"revision\":1}', NULL, '302632', NULL, ''); -INSERT INTO `act_re_model` VALUES ('302634', 2, '新建流程', 'processKey', NULL, '2022-03-31 11:39:26.000', '2022-03-31 11:39:26.000', 1, '{\"name\":\"新建流程\",\"description\":\"\",\"revision\":1}', NULL, '302635', NULL, ''); +INSERT INTO `act_re_model` +VALUES ('142517', 75, '请假流程', 'processKey', NULL, '2018-01-25 17:21:39.000', '2022-03-31 10:58:54.000', 1, + '{\"name\":\"请假流程\",\"description\":\"\"}', '302552', '142518', '142519', ''); +INSERT INTO `act_re_model` +VALUES ('212510', 11, '测试流程', 'processKey', NULL, '2018-04-27 19:57:22.000', '2018-12-11 23:10:00.000', 1, + '{\"name\":\"测试流程\",\"description\":\"\"}', NULL, '212511', '212512', ''); +INSERT INTO `act_re_model` +VALUES ('302597', 4, '新建流程', 'processKey', NULL, '2022-03-31 11:08:57.000', '2022-03-31 11:32:34.000', 1, + '{\"name\":\"新建流程\",\"description\":\"\"}', NULL, '302598', '302633', ''); +INSERT INTO `act_re_model` +VALUES ('302629', 2, '新建流程', 'processKey', NULL, '2022-03-31 11:25:58.000', '2022-03-31 11:25:58.000', 1, + '{\"name\":\"新建流程\",\"description\":\"\",\"revision\":1}', NULL, '302630', NULL, ''); +INSERT INTO `act_re_model` +VALUES ('302631', 2, '新建流程', 'processKey', NULL, '2022-03-31 11:31:43.000', '2022-03-31 11:31:43.000', 1, + '{\"name\":\"新建流程\",\"description\":\"\",\"revision\":1}', NULL, '302632', NULL, ''); +INSERT INTO `act_re_model` +VALUES ('302634', 2, '新建流程', 'processKey', NULL, '2022-03-31 11:39:26.000', '2022-03-31 11:39:26.000', 1, + '{\"name\":\"新建流程\",\"description\":\"\",\"revision\":1}', NULL, '302635', NULL, ''); -- ---------------------------- -- Table structure for act_re_procdef -- ---------------------------- DROP TABLE IF EXISTS `act_re_procdef`; -CREATE TABLE `act_re_procdef` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `VERSION_` int(11) NOT NULL, - `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DGRM_RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `HAS_START_FORM_KEY_` tinyint(4) NULL DEFAULT NULL, - `HAS_GRAPHICAL_NOTATION_` tinyint(4) NULL DEFAULT NULL, - `SUSPENSION_STATE_` int(11) NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - PRIMARY KEY (`ID_`) USING BTREE, - UNIQUE INDEX `ACT_UNIQ_PROCDEF`(`KEY_`, `VERSION_`, `TENANT_ID_`) USING BTREE +CREATE TABLE `act_re_procdef` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `VERSION_` int(11) NOT NULL, + `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DGRM_RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `HAS_START_FORM_KEY_` tinyint(4) NULL DEFAULT NULL, + `HAS_GRAPHICAL_NOTATION_` tinyint(4) NULL DEFAULT NULL, + `SUSPENSION_STATE_` int(11) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_UNIQ_PROCDEF`(`KEY_`, `VERSION_`, `TENANT_ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_re_procdef -- ---------------------------- -INSERT INTO `act_re_procdef` VALUES ('process_leave:1:302555', 1, 'http://www.activiti.org/processdef', '请假流程', 'process_leave', 1, '302552', '请假流程.bpmn20.xml', '请假流程.process_leave.png', NULL, 0, 1, 1, ''); +INSERT INTO `act_re_procdef` +VALUES ('process_leave:1:302555', 1, 'http://www.activiti.org/processdef', '请假流程', 'process_leave', 1, '302552', + '请假流程.bpmn20.xml', '请假流程.process_leave.png', NULL, 0, 1, 1, ''); -- ---------------------------- -- Table structure for act_ru_event_subscr -- ---------------------------- DROP TABLE IF EXISTS `act_ru_event_subscr`; -CREATE TABLE `act_ru_event_subscr` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `EVENT_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `EVENT_NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ACTIVITY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CONFIGURATION_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `CREATED_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_EVENT_SUBSCR_CONFIG_`(`CONFIGURATION_`) USING BTREE, - INDEX `ACT_FK_EVENT_EXEC`(`EXECUTION_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_EVENT_EXEC` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_ru_event_subscr` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `EVENT_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `EVENT_NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ACTIVITY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CONFIGURATION_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `CREATED_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_EVENT_SUBSCR_CONFIG_`(`CONFIGURATION_`) USING BTREE, + INDEX `ACT_FK_EVENT_EXEC`(`EXECUTION_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_EVENT_EXEC` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_ru_execution -- ---------------------------- DROP TABLE IF EXISTS `act_ru_execution`; -CREATE TABLE `act_ru_execution` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PARENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `SUPER_EXEC_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `IS_ACTIVE_` tinyint(4) NULL DEFAULT NULL, - `IS_CONCURRENT_` tinyint(4) NULL DEFAULT NULL, - `IS_SCOPE_` tinyint(4) NULL DEFAULT NULL, - `IS_EVENT_SCOPE_` tinyint(4) NULL DEFAULT NULL, - `SUSPENSION_STATE_` int(11) NULL DEFAULT NULL, - `CACHED_ENT_STATE_` int(11) NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_EXEC_BUSKEY`(`BUSINESS_KEY_`) USING BTREE, - INDEX `ACT_FK_EXE_PROCINST`(`PROC_INST_ID_`) USING BTREE, - INDEX `ACT_FK_EXE_PARENT`(`PARENT_ID_`) USING BTREE, - INDEX `ACT_FK_EXE_SUPER`(`SUPER_EXEC_`) USING BTREE, - INDEX `ACT_FK_EXE_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_EXE_PARENT` FOREIGN KEY (`PARENT_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_EXE_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_EXE_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE CASCADE, - CONSTRAINT `ACT_FK_EXE_SUPER` FOREIGN KEY (`SUPER_EXEC_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_ru_execution` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PARENT_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `SUPER_EXEC_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ACT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `IS_ACTIVE_` tinyint(4) NULL DEFAULT NULL, + `IS_CONCURRENT_` tinyint(4) NULL DEFAULT NULL, + `IS_SCOPE_` tinyint(4) NULL DEFAULT NULL, + `IS_EVENT_SCOPE_` tinyint(4) NULL DEFAULT NULL, + `SUSPENSION_STATE_` int(11) NULL DEFAULT NULL, + `CACHED_ENT_STATE_` int(11) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_EXEC_BUSKEY`(`BUSINESS_KEY_`) USING BTREE, + INDEX `ACT_FK_EXE_PROCINST`(`PROC_INST_ID_`) USING BTREE, + INDEX `ACT_FK_EXE_PARENT`(`PARENT_ID_`) USING BTREE, + INDEX `ACT_FK_EXE_SUPER`(`SUPER_EXEC_`) USING BTREE, + INDEX `ACT_FK_EXE_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_EXE_PARENT` FOREIGN KEY (`PARENT_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_EXE_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_EXE_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `ACT_FK_EXE_SUPER` FOREIGN KEY (`SUPER_EXEC_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_ru_execution -- ---------------------------- -INSERT INTO `act_ru_execution` VALUES ('302556', 3, '302556', NULL, NULL, 'process_leave:1:302555', NULL, 'user2', 1, 0, 1, 0, 1, 2, '', NULL, NULL); -INSERT INTO `act_ru_execution` VALUES ('302599', 2, '302599', NULL, NULL, 'process_leave:1:302555', NULL, NULL, 0, 0, 1, 0, 1, 0, '', NULL, NULL); -INSERT INTO `act_ru_execution` VALUES ('302623', 1, '302599', NULL, '302599', 'process_leave:1:302555', NULL, 'allmanager', 1, 0, 1, 0, 1, 2, '', NULL, NULL); +INSERT INTO `act_ru_execution` +VALUES ('302556', 3, '302556', NULL, NULL, 'process_leave:1:302555', NULL, 'user2', 1, 0, 1, 0, 1, 2, '', NULL, NULL); +INSERT INTO `act_ru_execution` +VALUES ('302599', 2, '302599', NULL, NULL, 'process_leave:1:302555', NULL, NULL, 0, 0, 1, 0, 1, 0, '', NULL, NULL); +INSERT INTO `act_ru_execution` +VALUES ('302623', 1, '302599', NULL, '302599', 'process_leave:1:302555', NULL, 'allmanager', 1, 0, 1, 0, 1, 2, '', NULL, + NULL); -- ---------------------------- -- Table structure for act_ru_identitylink -- ---------------------------- DROP TABLE IF EXISTS `act_ru_identitylink`; -CREATE TABLE `act_ru_identitylink` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `GROUP_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_IDENT_LNK_USER`(`USER_ID_`) USING BTREE, - INDEX `ACT_IDX_IDENT_LNK_GROUP`(`GROUP_ID_`) USING BTREE, - INDEX `ACT_IDX_ATHRZ_PROCEDEF`(`PROC_DEF_ID_`) USING BTREE, - INDEX `ACT_FK_TSKASS_TASK`(`TASK_ID_`) USING BTREE, - INDEX `ACT_FK_IDL_PROCINST`(`PROC_INST_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_ATHRZ_PROCEDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_IDL_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `act_ru_task` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_ru_identitylink` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `GROUP_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_IDENT_LNK_USER`(`USER_ID_`) USING BTREE, + INDEX `ACT_IDX_IDENT_LNK_GROUP`(`GROUP_ID_`) USING BTREE, + INDEX `ACT_IDX_ATHRZ_PROCEDEF`(`PROC_DEF_ID_`) USING BTREE, + INDEX `ACT_FK_TSKASS_TASK`(`TASK_ID_`) USING BTREE, + INDEX `ACT_FK_IDL_PROCINST`(`PROC_INST_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_ATHRZ_PROCEDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_IDL_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `act_ru_task` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_ru_identitylink -- ---------------------------- -INSERT INTO `act_ru_identitylink` VALUES ('302567', 1, NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302556', NULL); -INSERT INTO `act_ru_identitylink` VALUES ('302585', 1, NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302556', NULL); -INSERT INTO `act_ru_identitylink` VALUES ('302596', 1, NULL, 'participant', '98b051b03681de6028993a5d14ac93cb', NULL, '302556', NULL); -INSERT INTO `act_ru_identitylink` VALUES ('302610', 1, NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302599', NULL); -INSERT INTO `act_ru_identitylink` VALUES ('302628', 1, NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302599', NULL); +INSERT INTO `act_ru_identitylink` +VALUES ('302567', 1, NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302556', NULL); +INSERT INTO `act_ru_identitylink` +VALUES ('302585', 1, NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302556', NULL); +INSERT INTO `act_ru_identitylink` +VALUES ('302596', 1, NULL, 'participant', '98b051b03681de6028993a5d14ac93cb', NULL, '302556', NULL); +INSERT INTO `act_ru_identitylink` +VALUES ('302610', 1, NULL, 'participant', '0b7625fedaa05e85f282486e1c9c91b9', NULL, '302599', NULL); +INSERT INTO `act_ru_identitylink` +VALUES ('302628', 1, NULL, 'participant', 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, '302599', NULL); -- ---------------------------- -- Table structure for act_ru_job -- ---------------------------- DROP TABLE IF EXISTS `act_ru_job`; -CREATE TABLE `act_ru_job` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, - `LOCK_OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EXCLUSIVE_` tinyint(1) NULL DEFAULT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `RETRIES_` int(11) NULL DEFAULT NULL, - `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DUEDATE_` timestamp(3) NULL DEFAULT NULL, - `REPEAT_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_FK_JOB_EXCEPTION`(`EXCEPTION_STACK_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_ru_job` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EXCLUSIVE_` tinyint(1) NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `RETRIES_` int(11) NULL DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_FK_JOB_EXCEPTION`(`EXCEPTION_STACK_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for act_ru_task -- ---------------------------- DROP TABLE IF EXISTS `act_ru_task`; -CREATE TABLE `act_ru_task` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PARENT_TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_DEF_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `ASSIGNEE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DELEGATION_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PRIORITY_` int(11) NULL DEFAULT NULL, - `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, - `DUE_DATE_` datetime(3) NULL DEFAULT NULL, - `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `SUSPENSION_STATE_` int(11) NULL DEFAULT NULL, - `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', - `FORM_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_TASK_CREATE`(`CREATE_TIME_`) USING BTREE, - INDEX `ACT_FK_TASK_EXE`(`EXECUTION_ID_`) USING BTREE, - INDEX `ACT_FK_TASK_PROCINST`(`PROC_INST_ID_`) USING BTREE, - INDEX `ACT_FK_TASK_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_TASK_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_TASK_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_ru_task` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PARENT_TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_DEF_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `OWNER_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `ASSIGNEE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DELEGATION_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PRIORITY_` int(11) NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `DUE_DATE_` datetime(3) NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `SUSPENSION_STATE_` int(11) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '', + `FORM_KEY_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_TASK_CREATE`(`CREATE_TIME_`) USING BTREE, + INDEX `ACT_FK_TASK_EXE`(`EXECUTION_ID_`) USING BTREE, + INDEX `ACT_FK_TASK_PROCINST`(`PROC_INST_ID_`) USING BTREE, + INDEX `ACT_FK_TASK_PROCDEF`(`PROC_DEF_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_TASK_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TASK_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_ru_task -- ---------------------------- -INSERT INTO `act_ru_task` VALUES ('302595', 1, '302556', '302556', 'process_leave:1:302555', '人事审批', NULL, NULL, 'user2', NULL, '98b051b03681de6028993a5d14ac93cb', NULL, 50, '2022-03-31 11:05:44.000', NULL, NULL, 1, '', NULL); -INSERT INTO `act_ru_task` VALUES ('302627', 1, '302623', '302599', 'process_leave:1:302555', '总经理审批', NULL, NULL, 'allmanager', NULL, 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, 50, '2022-03-31 11:18:00.000', NULL, NULL, 1, '', NULL); +INSERT INTO `act_ru_task` +VALUES ('302595', 1, '302556', '302556', 'process_leave:1:302555', '人事审批', NULL, NULL, 'user2', NULL, + '98b051b03681de6028993a5d14ac93cb', NULL, 50, '2022-03-31 11:05:44.000', NULL, NULL, 1, '', NULL); +INSERT INTO `act_ru_task` +VALUES ('302627', 1, '302623', '302599', 'process_leave:1:302555', '总经理审批', NULL, NULL, 'allmanager', NULL, + 'd818ac6a86cf1a64d2184bf0699d67a8', NULL, 50, '2022-03-31 11:18:00.000', NULL, NULL, 1, '', NULL); -- ---------------------------- -- Table structure for act_ru_variable -- ---------------------------- DROP TABLE IF EXISTS `act_ru_variable`; -CREATE TABLE `act_ru_variable` ( - `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `REV_` int(11) NULL DEFAULT NULL, - `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `DOUBLE_` double NULL DEFAULT NULL, - `LONG_` bigint(20) NULL DEFAULT NULL, - `TEXT_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - `TEXT2_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, - PRIMARY KEY (`ID_`) USING BTREE, - INDEX `ACT_IDX_VARIABLE_TASK_ID`(`TASK_ID_`) USING BTREE, - INDEX `ACT_FK_VAR_EXE`(`EXECUTION_ID_`) USING BTREE, - INDEX `ACT_FK_VAR_PROCINST`(`PROC_INST_ID_`) USING BTREE, - INDEX `ACT_FK_VAR_BYTEARRAY`(`BYTEARRAY_ID_`) USING BTREE, - CONSTRAINT `ACT_FK_VAR_BYTEARRAY` FOREIGN KEY (`BYTEARRAY_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `ACT_FK_VAR_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +CREATE TABLE `act_ru_variable` +( + `ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `REV_` int(11) NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `DOUBLE_` double NULL DEFAULT NULL, + `LONG_` bigint(20) NULL DEFAULT NULL, + `TEXT_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `TEXT2_` varchar(4000) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_VARIABLE_TASK_ID`(`TASK_ID_`) USING BTREE, + INDEX `ACT_FK_VAR_EXE`(`EXECUTION_ID_`) USING BTREE, + INDEX `ACT_FK_VAR_PROCINST`(`PROC_INST_ID_`) USING BTREE, + INDEX `ACT_FK_VAR_BYTEARRAY`(`BYTEARRAY_ID_`) USING BTREE, + CONSTRAINT `ACT_FK_VAR_BYTEARRAY` FOREIGN KEY (`BYTEARRAY_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_VAR_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of act_ru_variable -- ---------------------------- -INSERT INTO `act_ru_variable` VALUES ('302559', 1, 'serializable', 'baseTask', '302556', '302556', NULL, '302558', NULL, NULL, NULL, NULL); -INSERT INTO `act_ru_variable` VALUES ('302563', 1, 'integer', 'day', '302556', '302556', NULL, NULL, NULL, 3, '3', NULL); -INSERT INTO `act_ru_variable` VALUES ('302569', 1, 'boolean', 'flag', '302556', '302556', NULL, NULL, NULL, 1, NULL, NULL); -INSERT INTO `act_ru_variable` VALUES ('302571', 1, 'integer', 'needfinish', '302556', '302556', NULL, NULL, NULL, 1, '1', NULL); -INSERT INTO `act_ru_variable` VALUES ('302574', 1, 'serializable', 'leaveOpinionList', '302556', '302556', NULL, '302573', NULL, NULL, NULL, NULL); -INSERT INTO `act_ru_variable` VALUES ('302602', 1, 'serializable', 'baseTask', '302599', '302599', NULL, '302601', NULL, NULL, NULL, NULL); -INSERT INTO `act_ru_variable` VALUES ('302606', 1, 'integer', 'day', '302599', '302599', NULL, NULL, NULL, 5, '5', NULL); -INSERT INTO `act_ru_variable` VALUES ('302612', 1, 'boolean', 'flag', '302599', '302599', NULL, NULL, NULL, 1, NULL, NULL); -INSERT INTO `act_ru_variable` VALUES ('302614', 1, 'integer', 'needfinish', '302599', '302599', NULL, NULL, NULL, 1, '1', NULL); -INSERT INTO `act_ru_variable` VALUES ('302617', 1, 'serializable', 'leaveOpinionList', '302599', '302599', NULL, '302616', NULL, NULL, NULL, NULL); +INSERT INTO `act_ru_variable` +VALUES ('302559', 1, 'serializable', 'baseTask', '302556', '302556', NULL, '302558', NULL, NULL, NULL, NULL); +INSERT INTO `act_ru_variable` +VALUES ('302563', 1, 'integer', 'day', '302556', '302556', NULL, NULL, NULL, 3, '3', NULL); +INSERT INTO `act_ru_variable` +VALUES ('302569', 1, 'boolean', 'flag', '302556', '302556', NULL, NULL, NULL, 1, NULL, NULL); +INSERT INTO `act_ru_variable` +VALUES ('302571', 1, 'integer', 'needfinish', '302556', '302556', NULL, NULL, NULL, 1, '1', NULL); +INSERT INTO `act_ru_variable` +VALUES ('302574', 1, 'serializable', 'leaveOpinionList', '302556', '302556', NULL, '302573', NULL, NULL, NULL, NULL); +INSERT INTO `act_ru_variable` +VALUES ('302602', 1, 'serializable', 'baseTask', '302599', '302599', NULL, '302601', NULL, NULL, NULL, NULL); +INSERT INTO `act_ru_variable` +VALUES ('302606', 1, 'integer', 'day', '302599', '302599', NULL, NULL, NULL, 5, '5', NULL); +INSERT INTO `act_ru_variable` +VALUES ('302612', 1, 'boolean', 'flag', '302599', '302599', NULL, NULL, NULL, 1, NULL, NULL); +INSERT INTO `act_ru_variable` +VALUES ('302614', 1, 'integer', 'needfinish', '302599', '302599', NULL, NULL, NULL, 1, '1', NULL); +INSERT INTO `act_ru_variable` +VALUES ('302617', 1, 'serializable', 'leaveOpinionList', '302599', '302599', NULL, '302616', NULL, NULL, NULL, NULL); -- ---------------------------- -- Table structure for base -- ---------------------------- DROP TABLE IF EXISTS `base`; -CREATE TABLE `base` ( - `id` int(11) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `base` +( + `id` int(11) NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of base -- ---------------------------- -INSERT INTO `base` VALUES (1, '22'); +INSERT INTO `base` +VALUES (1, '22'); -- ---------------------------- -- Table structure for blog_article -- ---------------------------- DROP TABLE IF EXISTS `blog_article`; -CREATE TABLE `blog_article` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'code', - `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题', - `first_img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列表缩略图', - `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章内容', - `read_number` int(11) NOT NULL DEFAULT 0 COMMENT '阅读次数', - `top_num` int(11) NULL DEFAULT 0 COMMENT '次序(置顶功能)', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0正常1删除', - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `blog_article` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'code', + `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题', + `first_img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列表缩略图', + `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章内容', + `read_number` int(11) NOT NULL DEFAULT 0 COMMENT '阅读次数', + `top_num` int(11) NULL DEFAULT 0 COMMENT '次序(置顶功能)', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0正常1删除', + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of blog_article -- ---------------------------- -INSERT INTO `blog_article` VALUES ('3887934708c54f49bc5a566f77e2a759', '76249265', 'hello,world', 'http://localhost:8081/img/77e5338a-217c-4b07-a3fd-63f20411dfcb.png', '

你好,世界

<img src=\"http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg\">

\n


<img src=\"http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg\">

\n

JsonUtil json = new JsonUtil();\nList<BlogCategory> categories = categoryService.selectAll();\ncategories.sort(Comparator.comparing(BlogCategory::getSequence));\njson.setData(categories);\nreturn json;\n
', 16, 0, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-10-14 17:47:41', '2018-11-25 17:35:00', 0); -INSERT INTO `blog_article` VALUES ('6e3fbd29b226452984428883d6e7a8a2', '53165934', '测试添加', 'http://localhost:8081/img/536ac5c8-ee9a-4826-9977-be8983622e00.png', '

内容啦啦啦啦啦


', 15, 0, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-11-19 22:57:25', '2018-11-25 18:55:34', 0); -INSERT INTO `blog_article` VALUES ('89f445cbe3334a458a4126741170d1e1', 'ASDFG2', 'java基础1', NULL, 'Java基础知识', 130, 1, 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2018-10-01 11:24:59', NULL, 0); -INSERT INTO `blog_article` VALUES ('89f445cbe3334a458a4126751170d1e1', 'ASDFG1', 'java基础2', NULL, 'Java基础知识', 127, 1, 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2018-10-01 11:23:59', NULL, 0); -INSERT INTO `blog_article` VALUES ('89f445cbe3334a458a412691170d1e12', 'xcbbg', 'java基础3', NULL, '

Java基础知识

', 124, 0, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-10-01 11:22:59', '2018-11-25 22:16:19', 0); -INSERT INTO `blog_article` VALUES ('89f445cbe3334a458a4126951170d1e1', 'ASDFGC', 'java基础4', NULL, 'Java基础知识', 124, 1, 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2018-10-01 11:21:59', NULL, 0); -INSERT INTO `blog_article` VALUES ('a9455e9f36bc4f33ba01412a64d87d6a', '26873592', '记一次spring boot 功能模块化 freemarker只能识别一个resources目录下前端展示模板问题', 'https://static.oschina.net/uploads/space/2018/0116/183901_IMPm_3312115.png', '

今天开发个人开源框架,完善了系统模块后,集成工作流功能模块,在新的resources下面新建freemarker前端页面(ftl页面),然后正常开发到展示流程表的时候,后台报错情景重新:Could not resolve view with name \'/actList\' in servlet with name \'dispatcherServlet\' 

当时我就想是不是映射地址出错了,检查多次后发现也没错,怎么spring mvc就映射不到呢,而且是相同的的地址路径(模块不一样),和其他模块resources一致的路径,然后我系统模块是完全没问题的,我感觉应该是freemarker配置的问题,然后各种尝试,各种检查,各种查阅资料,发现,的确是freemarker的问题,我少配置了一项freemarker配置:FreeMarkerConfigurationFactory类下的属性:preferFileSystemAccess,<---对就是它,我们来看源码发现默认是true

public class FreeMarkerConfigurationFactory {\n\n	protected final Log logger = LogFactory.getLog(getClass());\n\n	private Resource configLocation;\n\n	private Properties freemarkerSettings;\n\n	private Map<String, Object> freemarkerVariables;\n\n	private String defaultEncoding;\n\n	private final List<TemplateLoader> templateLoaders = new ArrayList<TemplateLoader>();\n\n	private List<TemplateLoader> preTemplateLoaders;\n\n	private List<TemplateLoader> postTemplateLoaders;\n\n	private String[] templateLoaderPaths;\n\n	private ResourceLoader resourceLoader = new DefaultResourceLoader();\n\n	private boolean preferFileSystemAccess = true;\n

那么他是干嘛用的呢,我们看官方介绍是介绍:

Set whether to prefer file system access for template loading. File system access enables hot detection of template changes.

If this is enabled, FreeMarkerConfigurationFactory will try to resolve the specified \"templateLoaderPath\" as file system resource (which will work for expanded class path resources and ServletContext resources too).

Default is \"true\". Turn this off to always load via SpringTemplateLoader (i.e. as stream, without hot detection of template changes), which might be necessary if some of your templates reside in an expanded classes directory while others reside in jar files.

我们随便翻一下:第一句的意思是是否以更喜欢方式来访问模板

如果启用就以templateLoaderPath设置的路径来加载,默认为true,设置为false的话就以SpringTemplateLoader方式访问,那么就是流的方式访问,这可能是必要的,如果你的一些模板驻留在一个扩展的类而其他人驻留在jar文件的目录。

意思就是 如果你的文件在jar包文件目录下,就有必要设置为false,我们是多模块的,最终只运行一个模块,其他模块都是以jar包来加载的,我们要加载jar包里面的文件目录,必须要把这个属性设置为false才行,debug源码看看,先上配置文件:

@Bean\n  public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {\n    FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();\n    factory.setTemplateLoaderPath(\"classpath:/ftl/\");\n    factory.setDefaultEncoding(\"UTF-8\");\n    factory.setPreferFileSystemAccess(true);\n    FreeMarkerConfigurer result = new FreeMarkerConfigurer();\n    freemarker.template.Configuration configuration = factory.createConfiguration();\n    configuration.setClassicCompatible(true);\n    result.setConfiguration(configuration);\n    Properties settings = new Properties();\n    settings.put(\"template_update_delay\", \"0\");\n    settings.put(\"default_encoding\", \"UTF-8\");\n    settings.put(\"number_format\", \"0.######\");\n    settings.put(\"classic_compatible\", true);\n    settings.put(\"template_exception_handler\", \"ignore\");\n    result.setFreemarkerSettings(settings);\n    return result;\n  }\n

FreeMarkerConfigurationFactory

返回

最终返回:

看到没,是单个模块的绝对路径ftl文件夹。

看图我们可以明确知道为true的话,加载的是设置的setTemplateLoaderPath的路径 也就是我其中一个模块下的ftl路径,所以其他模块下ftl路径是加载不出来的,也就是spring mvc 映射不到的原因。

我们试试 将isPreferFileSystemAccess设置为false:

最终我们跟到这里:

发现路径是/ftl/而不是之前的绝对路径,然后set进spring对freemarker的配置对象中。

好的,我们通过分析源码我们可以知道,多模块下,我们设置为false,spring才能以相对路径来访问我们的模板文件夹,问题解决。

', 17, 1, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-11-25 13:48:54', '2018-11-25 22:12:53', 0); -INSERT INTO `blog_article` VALUES ('fd27b3ed7d344395b7766f596bf6fd06', '36152428', 'spring boot 2.0 集成shiro注意事项', NULL, '

spring boot 2.0 全面拥抱java8,在安全验证上面 很大程度的简化了配置项,用shiro就要把security关闭, security 默认是开启的,在boot1.x版本可以通过配置项

security:\n  basic:\n    enabled: false\nmanagement:\n  security:\n    enabled: false\n

来禁用的,但是2.0由于安全和歧义,security相关配置项去除了,那么集成shiro就没效果。

通过在启动主方法添加注解:

@EnableAutoConfiguration(exclude = {\n        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class\n})\n

来禁止security自动启动配置,达到shiro集成效果,具体shiro集成和boot 1.x相同,具体可参考我之前集成shiro的博文:https://my.oschina.net/u/3312115/blog/1600830


当spring boot为2.0 后 spring 默认升级到5.0以上,spring mvc对静态资源拦截的自定义方案:继承


WebMvcConfigurerAdapter 实现 addResourceHandlers 已经过时

,用继承:WebMvcConfigurationSupport 来替代即可,这里有一点要特别注意的,就是 有且只能继承一次WebMvcConfigurationSupport 多次会出现部分失效问题。


', 21, 1, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-11-19 21:39:09', '2018-11-25 19:45:42', 0); +INSERT INTO `blog_article` +VALUES ('3887934708c54f49bc5a566f77e2a759', '76249265', 'hello,world', + 'http://localhost:8081/img/77e5338a-217c-4b07-a3fd-63f20411dfcb.png', + '

你好,世界

<img src=\"http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg\">

\n


<img src=\"http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg\">

\n

JsonUtil json = new JsonUtil();\nList<BlogCategory> categories = categoryService.selectAll();\ncategories.sort(Comparator.comparing(BlogCategory::getSequence));\njson.setData(categories);\nreturn json;\n
', + 16, 0, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-10-14 17:47:41', + '2018-11-25 17:35:00', 0); +INSERT INTO `blog_article` +VALUES ('6e3fbd29b226452984428883d6e7a8a2', '53165934', '测试添加', + 'http://localhost:8081/img/536ac5c8-ee9a-4826-9977-be8983622e00.png', + '

内容啦啦啦啦啦


', + 15, 0, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-11-19 22:57:25', + '2018-11-25 18:55:34', 0); +INSERT INTO `blog_article` +VALUES ('89f445cbe3334a458a4126741170d1e1', 'ASDFG2', 'java基础1', NULL, 'Java基础知识', 130, 1, + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2018-10-01 11:24:59', NULL, 0); +INSERT INTO `blog_article` +VALUES ('89f445cbe3334a458a4126751170d1e1', 'ASDFG1', 'java基础2', NULL, 'Java基础知识', 127, 1, + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2018-10-01 11:23:59', NULL, 0); +INSERT INTO `blog_article` +VALUES ('89f445cbe3334a458a412691170d1e12', 'xcbbg', 'java基础3', NULL, '

Java基础知识

', 124, 0, + 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-10-01 11:22:59', + '2018-11-25 22:16:19', 0); +INSERT INTO `blog_article` +VALUES ('89f445cbe3334a458a4126951170d1e1', 'ASDFGC', 'java基础4', NULL, 'Java基础知识', 124, 1, + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2018-10-01 11:21:59', NULL, 0); +INSERT INTO `blog_article` +VALUES ('a9455e9f36bc4f33ba01412a64d87d6a', '26873592', + '记一次spring boot 功能模块化 freemarker只能识别一个resources目录下前端展示模板问题', + 'https://static.oschina.net/uploads/space/2018/0116/183901_IMPm_3312115.png', + '

今天开发个人开源框架,完善了系统模块后,集成工作流功能模块,在新的resources下面新建freemarker前端页面(ftl页面),然后正常开发到展示流程表的时候,后台报错情景重新:Could not resolve view with name \' / + actList\' in servlet with name \'dispatcherServlet\' 

当时我就想是不是映射地址出错了,检查多次后发现也没错,怎么spring mvc就映射不到呢,而且是相同的的地址路径(模块不一样),和其他模块resources一致的路径,然后我系统模块是完全没问题的,我感觉应该是freemarker配置的问题,然后各种尝试,各种检查,各种查阅资料,发现,的确是freemarker的问题,我少配置了一项freemarker配置:FreeMarkerConfigurationFactory类下的属性:preferFileSystemAccess,<---对就是它,我们来看源码发现默认是true

public class FreeMarkerConfigurationFactory {\n\n	protected final Log logger = LogFactory.getLog(getClass());\n\n	private Resource configLocation;\n\n	private Properties freemarkerSettings;\n\n	private Map<String, Object> freemarkerVariables;\n\n	private String defaultEncoding;\n\n	private final List<TemplateLoader> templateLoaders = new ArrayList<TemplateLoader>();\n\n	private List<TemplateLoader> preTemplateLoaders;\n\n	private List<TemplateLoader> postTemplateLoaders;\n\n	private String[] templateLoaderPaths;\n\n	private ResourceLoader resourceLoader = new DefaultResourceLoader();\n\n	private boolean preferFileSystemAccess = true;\n

那么他是干嘛用的呢,我们看官方介绍是介绍:

Set whether to prefer file system access for template loading. File system access enables hot detection of template changes.

If this is enabled, FreeMarkerConfigurationFactory will try to resolve the specified \"templateLoaderPath\" as file system resource (which will work for expanded class path resources and ServletContext resources too).

Default is \"true\". Turn this off to always load via SpringTemplateLoader (i.e. as stream, without hot detection of template changes), which might be necessary if some of your templates reside in an expanded classes directory while others reside in jar files.

我们随便翻一下:第一句的意思是是否以更喜欢方式来访问模板

如果启用就以templateLoaderPath设置的路径来加载,默认为true,设置为false的话就以SpringTemplateLoader方式访问,那么就是流的方式访问,这可能是必要的,如果你的一些模板驻留在一个扩展的类而其他人驻留在jar文件的目录。

意思就是 如果你的文件在jar包文件目录下,就有必要设置为false,我们是多模块的,最终只运行一个模块,其他模块都是以jar包来加载的,我们要加载jar包里面的文件目录,必须要把这个属性设置为false才行,debug源码看看,先上配置文件:

@Bean\n  public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {\n    FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();\n    factory.setTemplateLoaderPath(\"classpath:/ftl/\");\n    factory.setDefaultEncoding(\"UTF-8\");\n    factory.setPreferFileSystemAccess(true);\n    FreeMarkerConfigurer result = new FreeMarkerConfigurer();\n    freemarker.template.Configuration configuration = factory.createConfiguration();\n    configuration.setClassicCompatible(true);\n    result.setConfiguration(configuration);\n    Properties settings = new Properties();\n    settings.put(\"template_update_delay\", \"0\");\n    settings.put(\"default_encoding\", \"UTF-8\");\n    settings.put(\"number_format\", \"0.######\");\n    settings.put(\"classic_compatible\", true);\n    settings.put(\"template_exception_handler\", \"ignore\");\n    result.setFreemarkerSettings(settings);\n    return result;\n  }\n

FreeMarkerConfigurationFactory

返回

最终返回:

看到没,是单个模块的绝对路径ftl文件夹。

看图我们可以明确知道为true的话,加载的是设置的setTemplateLoaderPath的路径 也就是我其中一个模块下的ftl路径,所以其他模块下ftl路径是加载不出来的,也就是spring mvc 映射不到的原因。

我们试试 将isPreferFileSystemAccess设置为false:

最终我们跟到这里:

发现路径是/ftl/而不是之前的绝对路径,然后set进spring对freemarker的配置对象中。

好的,我们通过分析源码我们可以知道,多模块下,我们设置为false,spring才能以相对路径来访问我们的模板文件夹,问题解决。

', + 17, 1, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-11-25 13:48:54', + '2018-11-25 22:12:53', 0); +INSERT INTO `blog_article` +VALUES ('fd27b3ed7d344395b7766f596bf6fd06', '36152428', 'spring boot 2.0 集成shiro注意事项', NULL, + '

spring boot 2.0 全面拥抱java8,在安全验证上面 很大程度的简化了配置项,用shiro就要把security关闭, security 默认是开启的,在boot1.x版本可以通过配置项

security:\n  basic:\n    enabled: false\nmanagement:\n  security:\n    enabled: false\n

来禁用的,但是2.0由于安全和歧义,security相关配置项去除了,那么集成shiro就没效果。

通过在启动主方法添加注解:

@EnableAutoConfiguration(exclude = {\n        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class\n})\n

来禁止security自动启动配置,达到shiro集成效果,具体shiro集成和boot 1.x相同,具体可参考我之前集成shiro的博文:https://my.oschina.net/u/3312115/blog/1600830


当spring boot为2.0 后 spring 默认升级到5.0以上,spring mvc对静态资源拦截的自定义方案:继承


WebMvcConfigurerAdapter 实现 addResourceHandlers 已经过时

,用继承:WebMvcConfigurationSupport 来替代即可,这里有一点要特别注意的,就是 有且只能继承一次WebMvcConfigurationSupport 多次会出现部分失效问题。


', + 21, 1, 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', '2018-11-19 21:39:09', + '2018-11-25 19:45:42', 0); -- ---------------------------- -- Table structure for blog_article_category -- ---------------------------- DROP TABLE IF EXISTS `blog_article_category`; -CREATE TABLE `blog_article_category` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `article_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章id', - `category_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签id', - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `blog_article_category` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `article_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文章id', + `category_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签id', + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '文章标签表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of blog_article_category -- ---------------------------- -INSERT INTO `blog_article_category` VALUES ('0037884871fa483db71e4158a18b0af9', '3887934708c54f49bc5a566f77e2a759', '3d4da698fc914ed0b956e86b58f93166'); -INSERT INTO `blog_article_category` VALUES ('2e2c8578a05b4048a9365e9a1b5ff726', '89f445cbe3334a458a412691170d1e12', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO `blog_article_category` VALUES ('68eeaf5f10a24ed195c042dbc6e25df7', 'a9455e9f36bc4f33ba01412a64d87d6a', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO `blog_article_category` VALUES ('7659e8a4b97144269775983f886ce25e', '3887934708c54f49bc5a566f77e2a759', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO `blog_article_category` VALUES ('db7a1ca9b5d04a618f98e65c6c5555db', '6e3fbd29b226452984428883d6e7a8a2', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO `blog_article_category` VALUES ('e6c27fd837244cefb43b2b2aca276f1f', '3887934708c54f49bc5a566f77e2a759', '2b7c729789de4c03a23fff8311b9eaf4'); -INSERT INTO `blog_article_category` VALUES ('fe7c34ffcf8c4af9922b4438e695c742', 'fd27b3ed7d344395b7766f596bf6fd06', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO `blog_article_category` +VALUES ('0037884871fa483db71e4158a18b0af9', '3887934708c54f49bc5a566f77e2a759', '3d4da698fc914ed0b956e86b58f93166'); +INSERT INTO `blog_article_category` +VALUES ('2e2c8578a05b4048a9365e9a1b5ff726', '89f445cbe3334a458a412691170d1e12', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO `blog_article_category` +VALUES ('68eeaf5f10a24ed195c042dbc6e25df7', 'a9455e9f36bc4f33ba01412a64d87d6a', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO `blog_article_category` +VALUES ('7659e8a4b97144269775983f886ce25e', '3887934708c54f49bc5a566f77e2a759', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO `blog_article_category` +VALUES ('db7a1ca9b5d04a618f98e65c6c5555db', '6e3fbd29b226452984428883d6e7a8a2', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO `blog_article_category` +VALUES ('e6c27fd837244cefb43b2b2aca276f1f', '3887934708c54f49bc5a566f77e2a759', '2b7c729789de4c03a23fff8311b9eaf4'); +INSERT INTO `blog_article_category` +VALUES ('fe7c34ffcf8c4af9922b4438e695c742', 'fd27b3ed7d344395b7766f596bf6fd06', '3956852574b6490ba6198f35b1c00aee'); -- ---------------------------- -- Table structure for blog_article_tag -- ---------------------------- DROP TABLE IF EXISTS `blog_article_tag`; -CREATE TABLE `blog_article_tag` ( - `article_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `tag_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - PRIMARY KEY (`article_id`, `tag_id`) USING BTREE +CREATE TABLE `blog_article_tag` +( + `article_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `tag_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`article_id`, `tag_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of blog_article_tag -- ---------------------------- -INSERT INTO `blog_article_tag` VALUES ('3887934708c54f49bc5a566f77e2a759', 'eeba8137d0cc42249a8c1db9b2830e8a'); -INSERT INTO `blog_article_tag` VALUES ('6e3fbd29b226452984428883d6e7a8a2', '0596836fc90540d1a497cd7bfae306e4'); -INSERT INTO `blog_article_tag` VALUES ('6e3fbd29b226452984428883d6e7a8a2', '1f44f472a64f4ebe9782b2b868e2caf2'); -INSERT INTO `blog_article_tag` VALUES ('89f445cbe3334a458a412691170d1e12', 'eeba8137d0cc42249a8c1db9b2830e8a'); -INSERT INTO `blog_article_tag` VALUES ('a9455e9f36bc4f33ba01412a64d87d6a', 'eba6d766a88b4a108d4189c08f86e7a6'); -INSERT INTO `blog_article_tag` VALUES ('fd27b3ed7d344395b7766f596bf6fd06', '0596836fc90540d1a497cd7bfae306e4'); -INSERT INTO `blog_article_tag` VALUES ('fd27b3ed7d344395b7766f596bf6fd06', 'eba6d766a88b4a108d4189c08f86e7a6'); +INSERT INTO `blog_article_tag` +VALUES ('3887934708c54f49bc5a566f77e2a759', 'eeba8137d0cc42249a8c1db9b2830e8a'); +INSERT INTO `blog_article_tag` +VALUES ('6e3fbd29b226452984428883d6e7a8a2', '0596836fc90540d1a497cd7bfae306e4'); +INSERT INTO `blog_article_tag` +VALUES ('6e3fbd29b226452984428883d6e7a8a2', '1f44f472a64f4ebe9782b2b868e2caf2'); +INSERT INTO `blog_article_tag` +VALUES ('89f445cbe3334a458a412691170d1e12', 'eeba8137d0cc42249a8c1db9b2830e8a'); +INSERT INTO `blog_article_tag` +VALUES ('a9455e9f36bc4f33ba01412a64d87d6a', 'eba6d766a88b4a108d4189c08f86e7a6'); +INSERT INTO `blog_article_tag` +VALUES ('fd27b3ed7d344395b7766f596bf6fd06', '0596836fc90540d1a497cd7bfae306e4'); +INSERT INTO `blog_article_tag` +VALUES ('fd27b3ed7d344395b7766f596bf6fd06', 'eba6d766a88b4a108d4189c08f86e7a6'); -- ---------------------------- -- Table structure for blog_category -- ---------------------------- DROP TABLE IF EXISTS `blog_category`; -CREATE TABLE `blog_category` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `sequence` tinyint(2) NOT NULL DEFAULT 0, - `code` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '搜索code', - `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类别名称', - `parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '上层id(目前最多两次层)', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `blog_category` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `sequence` tinyint(2) NOT NULL DEFAULT 0, + `code` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '搜索code', + `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类别名称', + `parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '上层id(目前最多两次层)', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '类别表(顶部展示)' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of blog_category -- ---------------------------- -INSERT INTO `blog_category` VALUES ('2b7c729789de4c03a23fff8311b9eaf4', 3, '架构', '架构', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); -INSERT INTO `blog_category` VALUES ('3956852574b6490ba6198f35b1c00aee', 1, 'Java', 'Java', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); -INSERT INTO `blog_category` VALUES ('3d4da698fc914ed0b956e86b58f93166', 2, 'Linux', 'Linux', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); -INSERT INTO `blog_category` VALUES ('7de23cc796ac4e6887ef1de6ca331bd8', 4, '其他', '其他', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); +INSERT INTO `blog_category` +VALUES ('2b7c729789de4c03a23fff8311b9eaf4', 3, '架构', '架构', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); +INSERT INTO `blog_category` +VALUES ('3956852574b6490ba6198f35b1c00aee', 1, 'Java', 'Java', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); +INSERT INTO `blog_category` +VALUES ('3d4da698fc914ed0b956e86b58f93166', 2, 'Linux', 'Linux', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); +INSERT INTO `blog_category` +VALUES ('7de23cc796ac4e6887ef1de6ca331bd8', 4, '其他', '其他', '0', 'zxm', NULL, '2018-10-12 22:30:18', NULL); -- ---------------------------- -- Table structure for blog_tag -- ---------------------------- DROP TABLE IF EXISTS `blog_tag`; -CREATE TABLE `blog_tag` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `tag_code` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签code', - `tag_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签name', - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `blog_tag` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `tag_code` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签code', + `tag_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标签name', + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of blog_tag -- ---------------------------- -INSERT INTO `blog_tag` VALUES ('0596836fc90540d1a497cd7bfae306e4', 'shiro', 'shiro'); -INSERT INTO `blog_tag` VALUES ('1f44f472a64f4ebe9782b2b868e2caf2', 'spring', 'spring'); -INSERT INTO `blog_tag` VALUES ('32297dbf97d44462bfa8b2f868704660', 'mybatis', 'mybatis'); -INSERT INTO `blog_tag` VALUES ('483af3b2db5743e99a9cde0f81559b43', 'spring cloud', 'spring cloud'); -INSERT INTO `blog_tag` VALUES ('4e4aa6cd7fea4a70a9e31083c1109090', 'sql', 'sql'); -INSERT INTO `blog_tag` VALUES ('56a9dc14db164453a0baa30d3193367c', '22', '22'); -INSERT INTO `blog_tag` VALUES ('75cae88b2f9f451392bfc06928a7c58d', 'centos7', 'centos7'); -INSERT INTO `blog_tag` VALUES ('7b470a9a121b42dc995e876fb532660e', 'linux', 'linux'); -INSERT INTO `blog_tag` VALUES ('7e467f2922a34a0b91afd908676f0ef5', 'spring security', 'spring security'); -INSERT INTO `blog_tag` VALUES ('8f41425ce8794fa8a0affa17beb13f11', 'redis', 'redis'); -INSERT INTO `blog_tag` VALUES ('d4e6b7774db343ff8575b1790a615aa2', 'git', 'git'); -INSERT INTO `blog_tag` VALUES ('da34c84e702341d68e6ea6d004508e67', 'vue', 'vue'); -INSERT INTO `blog_tag` VALUES ('e4ca0a14f2724de8bf71ad0ac8988c57', 'quartz', 'quartz'); -INSERT INTO `blog_tag` VALUES ('eba6d766a88b4a108d4189c08f86e7a6', 'spring boot', 'spring boot'); -INSERT INTO `blog_tag` VALUES ('eeba8137d0cc42249a8c1db9b2830e8a', 'java', 'java'); -INSERT INTO `blog_tag` VALUES ('f4ebc211eb3242739d6007e030c54ae5', 'oauth2.0', 'oauth2.0'); +INSERT INTO `blog_tag` +VALUES ('0596836fc90540d1a497cd7bfae306e4', 'shiro', 'shiro'); +INSERT INTO `blog_tag` +VALUES ('1f44f472a64f4ebe9782b2b868e2caf2', 'spring', 'spring'); +INSERT INTO `blog_tag` +VALUES ('32297dbf97d44462bfa8b2f868704660', 'mybatis', 'mybatis'); +INSERT INTO `blog_tag` +VALUES ('483af3b2db5743e99a9cde0f81559b43', 'spring cloud', 'spring cloud'); +INSERT INTO `blog_tag` +VALUES ('4e4aa6cd7fea4a70a9e31083c1109090', 'sql', 'sql'); +INSERT INTO `blog_tag` +VALUES ('56a9dc14db164453a0baa30d3193367c', '22', '22'); +INSERT INTO `blog_tag` +VALUES ('75cae88b2f9f451392bfc06928a7c58d', 'centos7', 'centos7'); +INSERT INTO `blog_tag` +VALUES ('7b470a9a121b42dc995e876fb532660e', 'linux', 'linux'); +INSERT INTO `blog_tag` +VALUES ('7e467f2922a34a0b91afd908676f0ef5', 'spring security', 'spring security'); +INSERT INTO `blog_tag` +VALUES ('8f41425ce8794fa8a0affa17beb13f11', 'redis', 'redis'); +INSERT INTO `blog_tag` +VALUES ('d4e6b7774db343ff8575b1790a615aa2', 'git', 'git'); +INSERT INTO `blog_tag` +VALUES ('da34c84e702341d68e6ea6d004508e67', 'vue', 'vue'); +INSERT INTO `blog_tag` +VALUES ('e4ca0a14f2724de8bf71ad0ac8988c57', 'quartz', 'quartz'); +INSERT INTO `blog_tag` +VALUES ('eba6d766a88b4a108d4189c08f86e7a6', 'spring boot', 'spring boot'); +INSERT INTO `blog_tag` +VALUES ('eeba8137d0cc42249a8c1db9b2830e8a', 'java', 'java'); +INSERT INTO `blog_tag` +VALUES ('f4ebc211eb3242739d6007e030c54ae5', 'oauth2.0', 'oauth2.0'); -- ---------------------------- -- Table structure for sys_dept -- ---------------------------- DROP TABLE IF EXISTS `sys_dept`; -CREATE TABLE `sys_dept` ( - `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `dept_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编码', - `dept_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `dept_pid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', - `dept_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_dept` +( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `dept_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编码', + `dept_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `dept_pid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', + `dept_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for sys_dict_item -- ---------------------------- DROP TABLE IF EXISTS `sys_dict_item`; -CREATE TABLE `sys_dict_item` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `sequence` int(11) NOT NULL COMMENT '序号', - `value` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '值', - `description` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '描述', - `type_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典id外检', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '删除标识', - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_dict_item` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `sequence` int(11) NOT NULL COMMENT '序号', + `value` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '值', + `description` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '描述', + `type_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典id外检', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '删除标识', + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典子表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for sys_dict_type -- ---------------------------- DROP TABLE IF EXISTS `sys_dict_type`; -CREATE TABLE `sys_dict_type` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码', - `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '删除标识', - `text` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典名称', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0), - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_dict_type` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码', + `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '删除标识', + `text` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典名称', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP (0), + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典主表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for sys_employee -- ---------------------------- DROP TABLE IF EXISTS `sys_employee`; -CREATE TABLE `sys_employee` ( - `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', - `employee_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工编号', - `employee_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工姓名', - `employee_gender` int(1) NULL DEFAULT NULL COMMENT '性别 0无 1 男 2 女', - `employee_birthday` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '生日', - `employee_deptcodes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '部门', - `employee_mobile1` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '公司工作电话', - `employee_mobile2` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '私人电话', - `employee_mail1` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '公司邮箱', - `employee_mail2` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '个人邮箱', - `employee_wechat` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '个人微信', - `employee_qq` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '个人QQ', - `employee_photo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', - `employee_ssn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '社保号', - `employee_min` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '医保号', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_employee` +( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键', + `employee_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工编号', + `employee_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工姓名', + `employee_gender` int(1) NULL DEFAULT NULL COMMENT '性别 0无 1 男 2 女', + `employee_birthday` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '生日', + `employee_deptcodes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '部门', + `employee_mobile1` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '公司工作电话', + `employee_mobile2` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '私人电话', + `employee_mail1` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '公司邮箱', + `employee_mail2` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '个人邮箱', + `employee_wechat` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '个人微信', + `employee_qq` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '个人QQ', + `employee_photo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', + `employee_ssn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '社保号', + `employee_min` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '医保号', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for sys_job -- ---------------------------- DROP TABLE IF EXISTS `sys_job`; -CREATE TABLE `sys_job` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `job_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '描述任务', - `cron` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务表达式', - `status` tinyint(1) NOT NULL COMMENT '状态:0未启动false/1启动true', - `clazz_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务执行方法', - `job_desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其他描述', - `create_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_job` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `job_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '描述任务', + `cron` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务表达式', + `status` tinyint(1) NOT NULL COMMENT '状态:0未启动false/1启动true', + `clazz_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务执行方法', + `job_desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其他描述', + `create_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_job -- ---------------------------- -INSERT INTO `sys_job` VALUES ('55147ebdf2f611e7a4fe201a068c6482', '测试定时demo1', '0/5 * * * * ?', 0, 'com.len.core.quartz.CustomQuartz.JobDemo1', '测试定时demo1', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 12:30:00', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-07-14 13:29:55'); -INSERT INTO `sys_job` VALUES ('ab648a22f38d11e7aca0201a068c6482', '任务demo2', '0 0/1 * * * ?', 0, 'com.len.core.quartz.CustomQuartz.JobDemo2', '任务demo2', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:32:36', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-07-07 17:07:45'); +INSERT INTO `sys_job` +VALUES ('55147ebdf2f611e7a4fe201a068c6482', '测试定时demo1', '0/5 * * * * ?', 0, + 'com.len.core.quartz.CustomQuartz.JobDemo1', '测试定时demo1', 'acfc0e9232f54732a5d9ffe9071bf572', + '2018-01-07 12:30:00', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-07-14 13:29:55'); +INSERT INTO `sys_job` +VALUES ('ab648a22f38d11e7aca0201a068c6482', '任务demo2', '0 0/1 * * * ?', 0, + 'com.len.core.quartz.CustomQuartz.JobDemo2', '任务demo2', 'acfc0e9232f54732a5d9ffe9071bf572', + '2018-01-07 17:32:36', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-07-07 17:07:45'); -- ---------------------------- -- Table structure for sys_log -- ---------------------------- DROP TABLE IF EXISTS `sys_log`; -CREATE TABLE `sys_log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `text` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `param` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL, - `create_time` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_log` +( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `text` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `param` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL, + `create_time` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 109 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_log -- ---------------------------- -INSERT INTO `sys_log` VALUES (65, 'admin', '0:0:0:0:0:0:0:1', 'UPDATE', '更新用户', '[参数1:{\"age\":24,\"email\":\"\",\"id\":\"acfc0e9232f54732a5d9ffe9071bf572\",\"photo\":\"ca842e83-6331-4516-b769-8888f297b657.jpeg\",\"realName\":\"管理员\"}]', '2022-03-06 22:12:40'); -INSERT INTO `sys_log` VALUES (66, 'admin', '0:0:0:0:0:0:0:1', 'UPDATE', '更新用户', '[参数1:{\"age\":24,\"email\":\"\",\"id\":\"acfc0e9232f54732a5d9ffe9071bf572\",\"photo\":\"a88e6ae3-af87-490e-8f3e-6a92156dc95f.jpeg\",\"realName\":\"管理员\"}]', '2022-03-06 22:13:34'); -INSERT INTO `sys_log` VALUES (67, 'admin', '0:0:0:0:0:0:0:1', 'UPDATE', '更新用户', '[参数1:{\"age\":24,\"email\":\"\",\"id\":\"acfc0e9232f54732a5d9ffe9071bf572\",\"photo\":\"a88e6ae3-af87-490e-8f3e-6a92156dc95f.jpeg\"}][参数2:[\"2619a672e53811e7b983201a068c6482\",\"4bb891d8caf84cc6ba27e515e80ac40d\"]]', '2022-03-26 21:30:47'); -INSERT INTO `sys_log` VALUES (104, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"d818ac6a86cf1a64d2184bf0699d67a8\",\"password\":\"6a333668613ef7946f4462866f537fb5\",\"photo\":\"\",\"username\":\"jingli\"}][参数2:[\"0ea934e5e55411e7b983201a068c6482\"]]', '2022-03-31 10:54:36'); -INSERT INTO `sys_log` VALUES (105, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"98b051b03681de6028993a5d14ac93cb\",\"password\":\"bce07289deffa09011e644813e6d86a4\",\"photo\":\"\",\"username\":\"hr\"}][参数2:[\"023366f3457511e8bcf1309c2315f9aa\"]]', '2022-03-31 10:55:54'); -INSERT INTO `sys_log` VALUES (106, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"5946a985f733c57f1ab71689f7b6aeea\",\"password\":\"a07e4c18324811b0d0ec17a89e0f855b\",\"photo\":\"\",\"username\":\"zhangsan\"}][参数2:[\"dcb0f642fe9611e7b472201a068c6482\"]]', '2022-03-31 10:56:46'); -INSERT INTO `sys_log` VALUES (107, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"0b7625fedaa05e85f282486e1c9c91b9\",\"password\":\"40d400f384b4996fd6ab30dab720ef1e\",\"photo\":\"\",\"username\":\"jingli1\"}][参数2:[\"e346e96368484c8fa7f217ce550a0186\"]]', '2022-03-31 10:57:48'); -INSERT INTO `sys_log` VALUES (108, 'admin', '0:0:0:0:0:0:0:1', 'SELECT', '展示菜单', NULL, '2022-06-23 18:03:21'); +INSERT INTO `sys_log` +VALUES (65, 'admin', '0:0:0:0:0:0:0:1', 'UPDATE', '更新用户', + '[参数1:{\"age\":24,\"email\":\"\",\"id\":\"acfc0e9232f54732a5d9ffe9071bf572\",\"photo\":\"ca842e83-6331-4516-b769-8888f297b657.jpeg\",\"realName\":\"管理员\"}]', + '2022-03-06 22:12:40'); +INSERT INTO `sys_log` +VALUES (66, 'admin', '0:0:0:0:0:0:0:1', 'UPDATE', '更新用户', + '[参数1:{\"age\":24,\"email\":\"\",\"id\":\"acfc0e9232f54732a5d9ffe9071bf572\",\"photo\":\"a88e6ae3-af87-490e-8f3e-6a92156dc95f.jpeg\",\"realName\":\"管理员\"}]', + '2022-03-06 22:13:34'); +INSERT INTO `sys_log` +VALUES (67, 'admin', '0:0:0:0:0:0:0:1', 'UPDATE', '更新用户', + '[参数1:{\"age\":24,\"email\":\"\",\"id\":\"acfc0e9232f54732a5d9ffe9071bf572\",\"photo\":\"a88e6ae3-af87-490e-8f3e-6a92156dc95f.jpeg\"}][参数2:[\"2619a672e53811e7b983201a068c6482\",\"4bb891d8caf84cc6ba27e515e80ac40d\"]]', + '2022-03-26 21:30:47'); +INSERT INTO `sys_log` +VALUES (104, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', + '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"d818ac6a86cf1a64d2184bf0699d67a8\",\"password\":\"6a333668613ef7946f4462866f537fb5\",\"photo\":\"\",\"username\":\"jingli\"}][参数2:[\"0ea934e5e55411e7b983201a068c6482\"]]', + '2022-03-31 10:54:36'); +INSERT INTO `sys_log` +VALUES (105, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', + '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"98b051b03681de6028993a5d14ac93cb\",\"password\":\"bce07289deffa09011e644813e6d86a4\",\"photo\":\"\",\"username\":\"hr\"}][参数2:[\"023366f3457511e8bcf1309c2315f9aa\"]]', + '2022-03-31 10:55:54'); +INSERT INTO `sys_log` +VALUES (106, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', + '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"5946a985f733c57f1ab71689f7b6aeea\",\"password\":\"a07e4c18324811b0d0ec17a89e0f855b\",\"photo\":\"\",\"username\":\"zhangsan\"}][参数2:[\"dcb0f642fe9611e7b472201a068c6482\"]]', + '2022-03-31 10:56:46'); +INSERT INTO `sys_log` +VALUES (107, 'admin', '0:0:0:0:0:0:0:1', 'ATHOR', '添加用户', + '[参数1:{\"age\":20,\"email\":\"11@qq.com\",\"id\":\"0b7625fedaa05e85f282486e1c9c91b9\",\"password\":\"40d400f384b4996fd6ab30dab720ef1e\",\"photo\":\"\",\"username\":\"jingli1\"}][参数2:[\"e346e96368484c8fa7f217ce550a0186\"]]', + '2022-03-31 10:57:48'); +INSERT INTO `sys_log` +VALUES (108, 'admin', '0:0:0:0:0:0:0:1', 'SELECT', '展示菜单', NULL, '2022-06-23 18:03:21'); -- ---------------------------- -- Table structure for sys_menu -- ---------------------------- DROP TABLE IF EXISTS `sys_menu`; -CREATE TABLE `sys_menu` ( - `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `code` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `p_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `router` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `order_num` int(4) NULL DEFAULT NULL COMMENT '排序字段', - `icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - `permission` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限', - `menu_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '1栏目2菜单', - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_menu` +( + `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `code` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `p_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `router` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `order_num` int(4) NULL DEFAULT NULL COMMENT '排序字段', + `icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + `permission` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限', + `menu_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '1栏目2菜单', + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_menu -- ---------------------------- -INSERT INTO `sys_menu` VALUES ('0e6c8d4cf09511e78a57201a068c6482', '1010', '删除', 'cff61424dfb311e7b555201a068c6482', '', NULL, 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:47:44', NULL, NULL, 'role:del', 1); -INSERT INTO `sys_menu` VALUES ('18bf8d5df09511e78a57201a068c6482', '1777', '新增', '3873ccc2dfda11e7b555201a068c6482', '', NULL, 1, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:48:01', NULL, NULL, 'nemu:add', 1); -INSERT INTO `sys_menu` VALUES ('28661300f9d411e7a009201a068c6482', '9610', '流程管理', 'e06da471f90311e780aa201a068c6482', 'bpmn', '/act/goAct', 2, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-15 17:12:06', NULL, NULL, 'act:deployment', 0); -INSERT INTO `sys_menu` VALUES ('2b56410cf09411e78a57201a068c6482', '4736', '新增', 'cff61424dfb311e7b555201a068c6482', '', NULL, 1, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:41:23', NULL, NULL, 'role:add', 1); -INSERT INTO `sys_menu` VALUES ('3873ccc2dfda11e7b555201a068c6482', '8484', '菜单管理', 'cfda8029dfb311e7b555201a068c6482', 'menu', 'menu/showMenu', 1, '', NULL, '2017-12-14 14:02:50', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-04-23 19:43:54', 'menu:show', 0); -INSERT INTO `sys_menu` VALUES ('433089a6eb0111e782d5201a068c6482', '3804', '编辑', 'cfe54921dfb311e7b555201a068c6482', '', '', NULL, '1', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-27 20:27:11', NULL, NULL, 'user:update', 1); -INSERT INTO `sys_menu` VALUES ('4d603831fe9b11e7b472201a068c6482', '2286', '待办任务', 'e06da471f90311e780aa201a068c6482', '', '/leave/showTask', 5, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-21 19:07:43', NULL, NULL, 'task:show', 0); -INSERT INTO `sys_menu` VALUES ('5ae3d4e9f38e11e7aca0201a068c6482', '2030', '新增', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 1, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:37:30', NULL, NULL, 'job:add', 1); -INSERT INTO `sys_menu` VALUES ('6315968bf37111e7aca0201a068c6482', '4120', '停止', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 4, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 14:10:09', NULL, NULL, 'job:end', 1); -INSERT INTO `sys_menu` VALUES ('63da4415fc6211e7a781201a068c6482', '3793', '模型列表', 'e06da471f90311e780aa201a068c6482', 'temp', '/act/goActModel', 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-18 23:15:17', NULL, NULL, 'act', 0); -INSERT INTO `sys_menu` VALUES ('6931fd22f09611e78a57201a068c6482', '8953', '删除', 'b441914cee0811e7a60d201a068c6482', '', NULL, 1, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:57:26', NULL, NULL, 'control:del', 1); -INSERT INTO `sys_menu` VALUES ('69f3f59cf38e11e7aca0201a068c6482', '6022', '编辑', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 2, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:37:56', NULL, NULL, 'job:update', 1); -INSERT INTO `sys_menu` VALUES ('6dc13c6eec5f11e7a472201a068c6482', '3060', '系统日志', 'a1ca6642ec5e11e7a472201a068c6482', 'log', 'log/showLog', 1, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-29 14:43:46', NULL, '2017-12-29 14:43:46', 'log:show', 0); -INSERT INTO `sys_menu` VALUES ('788d8e34f38e11e7aca0201a068c6482', '7543', '删除', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 5, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:38:20', NULL, NULL, 'job:del', 1); -INSERT INTO `sys_menu` VALUES ('7967e098ee0611e7a60d201a068c6482', '6033', '接口api', 'a1ca6642ec5e11e7a472201a068c6482', 'api', 'swagger-ui.html', 2, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-31 16:42:04', NULL, NULL, NULL, 0); -INSERT INTO `sys_menu` VALUES ('873f30b0f38e11e7aca0201a068c6482', '5879', '查看', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 6, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:38:45', NULL, NULL, 'job:select', 1); -INSERT INTO `sys_menu` VALUES ('88b8e5d1f38911e7aca0201a068c6482', '9952', '查看', 'cff61424dfb311e7b555201a068c6482', '', NULL, 4, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:03:00', NULL, NULL, 'role:select', 1); -INSERT INTO `sys_menu` VALUES ('8a6c8bfa7f804eac810c5790cad9a62a', '0141', '删除', '3873ccc2dfda11e7b555201a068c6482', '', NULL, 2, NULL, 'acfc0e9232f54732a5d9ffe9071bf572', '2018-06-20 21:55:55', NULL, NULL, 'menu:del', 1); -INSERT INTO `sys_menu` VALUES ('a1ca6642ec5e11e7a472201a068c6482', '8970', '系统监控', NULL, '', NULL, 2, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 10:56:14', NULL, '2018-01-03 10:56:14', NULL, 0); -INSERT INTO `sys_menu` VALUES ('b441914cee0811e7a60d201a068c6482', '4299', '系统监控', 'a1ca6642ec5e11e7a472201a068c6482', 'control', 'druid/index.html', 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-31 16:58:01', NULL, NULL, NULL, 0); -INSERT INTO `sys_menu` VALUES ('b7839f59fe8811e7b472201a068c6482', '9021', '请假流程', 'e06da471f90311e780aa201a068c6482', 'leave', '/leave/showLeave', 4, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-21 16:54:40', NULL, NULL, 'leave:show', 0); -INSERT INTO `sys_menu` VALUES ('cfda8029dfb311e7b555201a068c6482', '1862', '系统管理', NULL, '', NULL, 1, '', NULL, '2018-01-03 10:56:13', NULL, '2018-01-03 10:56:13', NULL, 0); -INSERT INTO `sys_menu` VALUES ('cfe54921dfb311e7b555201a068c6482', '2643', '用户管理', 'cfda8029dfb311e7b555201a068c6482', 'user', '/user/showUser', 2, '', NULL, '2017-12-29 14:40:34', NULL, '2017-12-29 14:40:34', 'user:show', 0); -INSERT INTO `sys_menu` VALUES ('cfe54921dfb311e7b555201a068c6483', '0337', '增加', 'cfe54921dfb311e7b555201a068c6482', '', NULL, 1, NULL, NULL, NULL, NULL, NULL, 'user:select', 1); -INSERT INTO `sys_menu` VALUES ('cff61424dfb311e7b555201a068c6482', '5303', '角色管理', 'cfda8029dfb311e7b555201a068c6482', 'role', '/role/showRole', 3, '', NULL, '2017-12-29 14:40:36', NULL, '2017-12-29 14:40:36', 'role:show', 0); -INSERT INTO `sys_menu` VALUES ('e06da471f90311e780aa201a068c6482', '3371', '工作流程管理', NULL, '', NULL, 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-14 16:21:10', NULL, NULL, NULL, 0); -INSERT INTO `sys_menu` VALUES ('e3b11497eb9e11e7928d201a068c6482', '8792', '删除', 'cfe54921dfb311e7b555201a068c6482', '', '', NULL, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-28 15:17:07', NULL, '2017-12-28 15:17:07', 'user:del', 1); -INSERT INTO `sys_menu` VALUES ('e9a13e55f35911e7aca0201a068c6482', '9437', '定时任务', 'a1ca6642ec5e11e7a472201a068c6482', 'job', '/job/showJob', 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 11:22:06', NULL, NULL, 'job:show', 0); -INSERT INTO `sys_menu` VALUES ('ecda560cf36f11e7aca0201a068c6482', '4908', '启动', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 13:59:41', NULL, NULL, 'job:start', 1); -INSERT INTO `sys_menu` VALUES ('f23f6a6bf09511e78a57201a068c6482', '2812', '修改密码', 'cfe54921dfb311e7b555201a068c6482', '', NULL, 4, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:54:06', NULL, NULL, 'user:repass', 1); -INSERT INTO `sys_menu` VALUES ('ff015ea5f09411e78a57201a068c6482', '3643', '编辑', 'cff61424dfb311e7b555201a068c6482', '', NULL, 2, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:47:18', NULL, NULL, 'role:update', 1); +INSERT INTO `sys_menu` +VALUES ('0e6c8d4cf09511e78a57201a068c6482', '1010', '删除', 'cff61424dfb311e7b555201a068c6482', '', NULL, 3, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:47:44', NULL, NULL, 'role:del', 1); +INSERT INTO `sys_menu` +VALUES ('18bf8d5df09511e78a57201a068c6482', '1777', '新增', '3873ccc2dfda11e7b555201a068c6482', '', NULL, 1, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:48:01', NULL, NULL, 'nemu:add', 1); +INSERT INTO `sys_menu` +VALUES ('28661300f9d411e7a009201a068c6482', '9610', '流程管理', 'e06da471f90311e780aa201a068c6482', 'bpmn', + '/act/goAct', 2, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-15 17:12:06', NULL, NULL, + 'act:deployment', 0); +INSERT INTO `sys_menu` +VALUES ('2b56410cf09411e78a57201a068c6482', '4736', '新增', 'cff61424dfb311e7b555201a068c6482', '', NULL, 1, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:41:23', NULL, NULL, 'role:add', 1); +INSERT INTO `sys_menu` +VALUES ('3873ccc2dfda11e7b555201a068c6482', '8484', '菜单管理', 'cfda8029dfb311e7b555201a068c6482', 'menu', + 'menu/showMenu', 1, '', NULL, '2017-12-14 14:02:50', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-04-23 19:43:54', + 'menu:show', 0); +INSERT INTO `sys_menu` +VALUES ('433089a6eb0111e782d5201a068c6482', '3804', '编辑', 'cfe54921dfb311e7b555201a068c6482', '', '', NULL, '1', + 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-27 20:27:11', NULL, NULL, 'user:update', 1); +INSERT INTO `sys_menu` +VALUES ('4d603831fe9b11e7b472201a068c6482', '2286', '待办任务', 'e06da471f90311e780aa201a068c6482', '', + '/leave/showTask', 5, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-21 19:07:43', NULL, NULL, + 'task:show', 0); +INSERT INTO `sys_menu` +VALUES ('5ae3d4e9f38e11e7aca0201a068c6482', '2030', '新增', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 1, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:37:30', NULL, NULL, 'job:add', 1); +INSERT INTO `sys_menu` +VALUES ('6315968bf37111e7aca0201a068c6482', '4120', '停止', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 4, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 14:10:09', NULL, NULL, 'job:end', 1); +INSERT INTO `sys_menu` +VALUES ('63da4415fc6211e7a781201a068c6482', '3793', '模型列表', 'e06da471f90311e780aa201a068c6482', 'temp', + '/act/goActModel', 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-18 23:15:17', NULL, NULL, 'act', + 0); +INSERT INTO `sys_menu` +VALUES ('6931fd22f09611e78a57201a068c6482', '8953', '删除', 'b441914cee0811e7a60d201a068c6482', '', NULL, 1, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:57:26', NULL, NULL, 'control:del', 1); +INSERT INTO `sys_menu` +VALUES ('69f3f59cf38e11e7aca0201a068c6482', '6022', '编辑', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 2, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:37:56', NULL, NULL, 'job:update', 1); +INSERT INTO `sys_menu` +VALUES ('6dc13c6eec5f11e7a472201a068c6482', '3060', '系统日志', 'a1ca6642ec5e11e7a472201a068c6482', 'log', + 'log/showLog', 1, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-29 14:43:46', NULL, + '2017-12-29 14:43:46', 'log:show', 0); +INSERT INTO `sys_menu` +VALUES ('788d8e34f38e11e7aca0201a068c6482', '7543', '删除', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 5, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:38:20', NULL, NULL, 'job:del', 1); +INSERT INTO `sys_menu` +VALUES ('7967e098ee0611e7a60d201a068c6482', '6033', '接口api', 'a1ca6642ec5e11e7a472201a068c6482', 'api', + 'swagger-ui.html', 2, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-31 16:42:04', NULL, NULL, NULL, + 0); +INSERT INTO `sys_menu` +VALUES ('873f30b0f38e11e7aca0201a068c6482', '5879', '查看', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 6, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:38:45', NULL, NULL, 'job:select', 1); +INSERT INTO `sys_menu` +VALUES ('88b8e5d1f38911e7aca0201a068c6482', '9952', '查看', 'cff61424dfb311e7b555201a068c6482', '', NULL, 4, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 17:03:00', NULL, NULL, 'role:select', 1); +INSERT INTO `sys_menu` +VALUES ('8a6c8bfa7f804eac810c5790cad9a62a', '0141', '删除', '3873ccc2dfda11e7b555201a068c6482', '', NULL, 2, NULL, + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-06-20 21:55:55', NULL, NULL, 'menu:del', 1); +INSERT INTO `sys_menu` +VALUES ('a1ca6642ec5e11e7a472201a068c6482', '8970', '系统监控', NULL, '', NULL, 2, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 10:56:14', NULL, '2018-01-03 10:56:14', NULL, 0); +INSERT INTO `sys_menu` +VALUES ('b441914cee0811e7a60d201a068c6482', '4299', '系统监控', 'a1ca6642ec5e11e7a472201a068c6482', 'control', + 'druid/index.html', 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-31 16:58:01', NULL, NULL, NULL, + 0); +INSERT INTO `sys_menu` +VALUES ('b7839f59fe8811e7b472201a068c6482', '9021', '请假流程', 'e06da471f90311e780aa201a068c6482', 'leave', + '/leave/showLeave', 4, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-21 16:54:40', NULL, NULL, + 'leave:show', 0); +INSERT INTO `sys_menu` +VALUES ('cfda8029dfb311e7b555201a068c6482', '1862', '系统管理', NULL, '', NULL, 1, '', NULL, + '2018-01-03 10:56:13', NULL, '2018-01-03 10:56:13', NULL, 0); +INSERT INTO `sys_menu` +VALUES ('cfe54921dfb311e7b555201a068c6482', '2643', '用户管理', 'cfda8029dfb311e7b555201a068c6482', 'user', + '/user/showUser', 2, '', NULL, '2017-12-29 14:40:34', NULL, '2017-12-29 14:40:34', 'user:show', 0); +INSERT INTO `sys_menu` +VALUES ('cfe54921dfb311e7b555201a068c6483', '0337', '增加', 'cfe54921dfb311e7b555201a068c6482', '', NULL, 1, NULL, NULL, + NULL, NULL, NULL, 'user:select', 1); +INSERT INTO `sys_menu` +VALUES ('cff61424dfb311e7b555201a068c6482', '5303', '角色管理', 'cfda8029dfb311e7b555201a068c6482', 'role', + '/role/showRole', 3, '', NULL, '2017-12-29 14:40:36', NULL, '2017-12-29 14:40:36', 'role:show', 0); +INSERT INTO `sys_menu` +VALUES ('e06da471f90311e780aa201a068c6482', '3371', '工作流程管理', NULL, '', NULL, 3, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-14 16:21:10', NULL, NULL, NULL, 0); +INSERT INTO `sys_menu` +VALUES ('e3b11497eb9e11e7928d201a068c6482', '8792', '删除', 'cfe54921dfb311e7b555201a068c6482', '', '', NULL, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-28 15:17:07', NULL, '2017-12-28 15:17:07', 'user:del', 1); +INSERT INTO `sys_menu` +VALUES ('e9a13e55f35911e7aca0201a068c6482', '9437', '定时任务', 'a1ca6642ec5e11e7a472201a068c6482', 'job', + '/job/showJob', 3, '', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 11:22:06', NULL, NULL, + 'job:show', 0); +INSERT INTO `sys_menu` +VALUES ('ecda560cf36f11e7aca0201a068c6482', '4908', '启动', 'e9a13e55f35911e7aca0201a068c6482', '', NULL, 3, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-07 13:59:41', NULL, NULL, 'job:start', 1); +INSERT INTO `sys_menu` +VALUES ('f23f6a6bf09511e78a57201a068c6482', '2812', '修改密码', 'cfe54921dfb311e7b555201a068c6482', '', NULL, 4, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:54:06', NULL, NULL, 'user:repass', 1); +INSERT INTO `sys_menu` +VALUES ('ff015ea5f09411e78a57201a068c6482', '3643', '编辑', 'cff61424dfb311e7b555201a068c6482', '', NULL, 2, '', + 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-03 22:47:18', NULL, NULL, 'role:update', 1); -- ---------------------------- -- Table structure for sys_panelopt -- ---------------------------- DROP TABLE IF EXISTS `sys_panelopt`; -CREATE TABLE `sys_panelopt` ( - `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `panelopt_column` int(4) NOT NULL COMMENT '菜单顺序', - `panelopt_index` int(4) NOT NULL COMMENT '行', - `panelopt_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '列', - `panelopt_userid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_panelopt` +( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `panelopt_column` int(4) NOT NULL COMMENT '菜单顺序', + `panelopt_index` int(4) NOT NULL COMMENT '行', + `panelopt_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '列', + `panelopt_userid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_panelopt -- ---------------------------- -INSERT INTO `sys_panelopt` VALUES ('4ce6ed8e7724d5eca359fe4000678ec4', 1, 1, 'BACKLOG', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, NULL, NULL, NULL); -INSERT INTO `sys_panelopt` VALUES ('6a11703827eb95735368f587350d4822', 2, 0, 'DYNAMIC', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, NULL, NULL, NULL); -INSERT INTO `sys_panelopt` VALUES ('f42c77353ce806e5b5a788b508f76c88', 1, 0, 'SHORTCUTS', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, NULL, NULL, NULL); +INSERT INTO `sys_panelopt` +VALUES ('4ce6ed8e7724d5eca359fe4000678ec4', 1, 1, 'BACKLOG', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, NULL, NULL, + NULL); +INSERT INTO `sys_panelopt` +VALUES ('6a11703827eb95735368f587350d4822', 2, 0, 'DYNAMIC', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, NULL, NULL, + NULL); +INSERT INTO `sys_panelopt` +VALUES ('f42c77353ce806e5b5a788b508f76c88', 1, 0, 'SHORTCUTS', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, NULL, NULL, + NULL); -- ---------------------------- -- Table structure for sys_role -- ---------------------------- DROP TABLE IF EXISTS `sys_role`; -CREATE TABLE `sys_role` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `role_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_role` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `role_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_role -- ---------------------------- -INSERT INTO `sys_role` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'hr', '人事', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-04-21 23:02:16', NULL, NULL); -INSERT INTO `sys_role` VALUES ('0ea934e5e55411e7b983201a068c6482', 'manage', '经理', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-20 15:04:44', NULL, '2018-01-02 11:41:43'); -INSERT INTO `sys_role` VALUES ('2619a672e53811e7b983201a068c6482', 'admin', '管理员', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-20 11:44:57', NULL, '2018-01-02 11:38:37'); -INSERT INTO `sys_role` VALUES ('4bb891d8caf84cc6ba27e515e80ac40d', 'blogAdmin', '博客管理员', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-10-01 10:21:10', NULL, NULL); -INSERT INTO `sys_role` VALUES ('dcb0f642fe9611e7b472201a068c6482', 'dev', '开发', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-21 18:35:56', NULL, NULL); -INSERT INTO `sys_role` VALUES ('e346e96368484c8fa7f217ce550a0186', 'DeputyManager', '副经理', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-06-14 23:21:36', NULL, NULL); +INSERT INTO `sys_role` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'hr', '人事', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-04-21 23:02:16', + NULL, NULL); +INSERT INTO `sys_role` +VALUES ('0ea934e5e55411e7b983201a068c6482', 'manage', '经理', 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-20 15:04:44', + NULL, '2018-01-02 11:41:43'); +INSERT INTO `sys_role` +VALUES ('2619a672e53811e7b983201a068c6482', 'admin', '管理员', 'acfc0e9232f54732a5d9ffe9071bf572', + '2017-12-20 11:44:57', NULL, '2018-01-02 11:38:37'); +INSERT INTO `sys_role` +VALUES ('4bb891d8caf84cc6ba27e515e80ac40d', 'blogAdmin', '博客管理员', 'acfc0e9232f54732a5d9ffe9071bf572', + '2018-10-01 10:21:10', NULL, NULL); +INSERT INTO `sys_role` +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'dev', '开发', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-21 18:35:56', + NULL, NULL); +INSERT INTO `sys_role` +VALUES ('e346e96368484c8fa7f217ce550a0186', 'DeputyManager', '副经理', 'acfc0e9232f54732a5d9ffe9071bf572', + '2018-06-14 23:21:36', NULL, NULL); -- ---------------------------- -- Table structure for sys_role_menu -- ---------------------------- DROP TABLE IF EXISTS `sys_role_menu`; -CREATE TABLE `sys_role_menu` ( - `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `menu_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - PRIMARY KEY (`role_id`, `menu_id`) USING BTREE +CREATE TABLE `sys_role_menu` +( + `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `menu_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`role_id`, `menu_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_role_menu -- ---------------------------- -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6483'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e3b11497eb9e11e7928d201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('023366f3457511e8bcf1309c2315f9aa', 'f23f6a6bf09511e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('0ea934e5e55411e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '0e6c8d4cf09511e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '18bf8d5df09511e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '28661300f9d411e7a009201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '2b56410cf09411e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '3873ccc2dfda11e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '6315968bf37111e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '63da4415fc6211e7a781201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '7967e098ee0611e7a60d201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', '88b8e5d1f38911e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'b441914cee0811e7a60d201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6483'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'cff61424dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'e3b11497eb9e11e7928d201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'f23f6a6bf09511e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('2619a672e53811e7b983201a068c6482', 'ff015ea5f09411e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('35f7934d335e4641b7887e4b3b1885a5', '18bf8d5df09511e78a57201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('35f7934d335e4641b7887e4b3b1885a5', '3873ccc2dfda11e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('35f7934d335e4641b7887e4b3b1885a5', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('a56219ffeb7d11e7928d201a068c6482', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', '6315968bf37111e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('dcb0f642fe9611e7b472201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('e346e96368484c8fa7f217ce550a0186', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('e346e96368484c8fa7f217ce550a0186', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO `sys_role_menu` VALUES ('e346e96368484c8fa7f217ce550a0186', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6483'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e3b11497eb9e11e7928d201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'f23f6a6bf09511e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('0ea934e5e55411e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '0e6c8d4cf09511e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '18bf8d5df09511e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '28661300f9d411e7a009201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '2b56410cf09411e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '3873ccc2dfda11e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '6315968bf37111e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '63da4415fc6211e7a781201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '7967e098ee0611e7a60d201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', '88b8e5d1f38911e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'b441914cee0811e7a60d201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6483'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'cff61424dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'e3b11497eb9e11e7928d201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'f23f6a6bf09511e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('2619a672e53811e7b983201a068c6482', 'ff015ea5f09411e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('35f7934d335e4641b7887e4b3b1885a5', '18bf8d5df09511e78a57201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('35f7934d335e4641b7887e4b3b1885a5', '3873ccc2dfda11e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('35f7934d335e4641b7887e4b3b1885a5', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('a56219ffeb7d11e7928d201a068c6482', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', '6315968bf37111e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('e346e96368484c8fa7f217ce550a0186', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('e346e96368484c8fa7f217ce550a0186', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO `sys_role_menu` +VALUES ('e346e96368484c8fa7f217ce550a0186', 'e06da471f90311e780aa201a068c6482'); -- ---------------------------- -- Table structure for sys_role_user -- ---------------------------- DROP TABLE IF EXISTS `sys_role_user`; -CREATE TABLE `sys_role_user` ( - `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - PRIMARY KEY (`user_id`, `role_id`) USING BTREE +CREATE TABLE `sys_role_user` +( + `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`user_id`, `role_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_role_user -- ---------------------------- -INSERT INTO `sys_role_user` VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 'e346e96368484c8fa7f217ce550a0186'); -INSERT INTO `sys_role_user` VALUES ('5946a985f733c57f1ab71689f7b6aeea', 'dcb0f642fe9611e7b472201a068c6482'); -INSERT INTO `sys_role_user` VALUES ('98b051b03681de6028993a5d14ac93cb', '023366f3457511e8bcf1309c2315f9aa'); -INSERT INTO `sys_role_user` VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '2619a672e53811e7b983201a068c6482'); -INSERT INTO `sys_role_user` VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '4bb891d8caf84cc6ba27e515e80ac40d'); -INSERT INTO `sys_role_user` VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', '0ea934e5e55411e7b983201a068c6482'); +INSERT INTO `sys_role_user` +VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 'e346e96368484c8fa7f217ce550a0186'); +INSERT INTO `sys_role_user` +VALUES ('5946a985f733c57f1ab71689f7b6aeea', 'dcb0f642fe9611e7b472201a068c6482'); +INSERT INTO `sys_role_user` +VALUES ('98b051b03681de6028993a5d14ac93cb', '023366f3457511e8bcf1309c2315f9aa'); +INSERT INTO `sys_role_user` +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '2619a672e53811e7b983201a068c6482'); +INSERT INTO `sys_role_user` +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '4bb891d8caf84cc6ba27e515e80ac40d'); +INSERT INTO `sys_role_user` +VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', '0ea934e5e55411e7b983201a068c6482'); -- ---------------------------- -- Table structure for sys_shortcuts -- ---------------------------- DROP TABLE IF EXISTS `sys_shortcuts`; -CREATE TABLE `sys_shortcuts` ( - `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `shortcuts_num` int(4) NOT NULL COMMENT '序号', - `shortcuts_userid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户id', - `shortcuts_menuid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单id', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_shortcuts` +( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `shortcuts_num` int(4) NOT NULL COMMENT '序号', + `shortcuts_userid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户id', + `shortcuts_menuid` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单id', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_shortcuts -- ---------------------------- -INSERT INTO `sys_shortcuts` VALUES ('326c6c7b1cbd4aadbd9f562b15f30f3e', 5, 'acfc0e9232f54732a5d9ffe9071bf572', 'e9a13e55f35911e7aca0201a068c6482', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-04-30 22:22:10', NULL); -INSERT INTO `sys_shortcuts` VALUES ('468edda3053f49879fcb5b4b124c6362', 5, 'acfc0e9232f54732a5d9ffe9071bf572', '6dc13c6eec5f11e7a472201a068c6482', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-07-20 18:10:26', NULL); -INSERT INTO `sys_shortcuts` VALUES ('63131105465041b4ac01c3e2ad72e48e', 1, 'acfc0e9232f54732a5d9ffe9071bf572', '3873ccc2dfda11e7b555201a068c6482', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-04-17 23:09:37', NULL); -INSERT INTO `sys_shortcuts` VALUES ('a3c5d6a90a2146d9b19a6119581157c5', 2, 'acfc0e9232f54732a5d9ffe9071bf572', 'cfe54921dfb311e7b555201a068c6482', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-05-03 09:14:22', NULL); -INSERT INTO `sys_shortcuts` VALUES ('bf1bbfc705bb46bfb3f2c247a8e799eb', 0, 'acfc0e9232f54732a5d9ffe9071bf572', '7967e098ee0611e7a60d201a068c6482', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-05-02 23:52:20', NULL); -INSERT INTO `sys_shortcuts` VALUES ('ca68ff4350b74fb0b339d464f2b10423', 3, 'acfc0e9232f54732a5d9ffe9071bf572', 'b441914cee0811e7a60d201a068c6482', 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-05-03 09:14:10', NULL); +INSERT INTO `sys_shortcuts` +VALUES ('326c6c7b1cbd4aadbd9f562b15f30f3e', 5, 'acfc0e9232f54732a5d9ffe9071bf572', 'e9a13e55f35911e7aca0201a068c6482', + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-04-30 22:22:10', NULL); +INSERT INTO `sys_shortcuts` +VALUES ('468edda3053f49879fcb5b4b124c6362', 5, 'acfc0e9232f54732a5d9ffe9071bf572', '6dc13c6eec5f11e7a472201a068c6482', + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-07-20 18:10:26', NULL); +INSERT INTO `sys_shortcuts` +VALUES ('63131105465041b4ac01c3e2ad72e48e', 1, 'acfc0e9232f54732a5d9ffe9071bf572', '3873ccc2dfda11e7b555201a068c6482', + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-04-17 23:09:37', NULL); +INSERT INTO `sys_shortcuts` +VALUES ('a3c5d6a90a2146d9b19a6119581157c5', 2, 'acfc0e9232f54732a5d9ffe9071bf572', 'cfe54921dfb311e7b555201a068c6482', + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-05-03 09:14:22', NULL); +INSERT INTO `sys_shortcuts` +VALUES ('bf1bbfc705bb46bfb3f2c247a8e799eb', 0, 'acfc0e9232f54732a5d9ffe9071bf572', '7967e098ee0611e7a60d201a068c6482', + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-05-02 23:52:20', NULL); +INSERT INTO `sys_shortcuts` +VALUES ('ca68ff4350b74fb0b339d464f2b10423', 3, 'acfc0e9232f54732a5d9ffe9071bf572', 'b441914cee0811e7a60d201a068c6482', + 'acfc0e9232f54732a5d9ffe9071bf572', NULL, '2022-05-03 09:14:10', NULL); -- ---------------------------- -- Table structure for sys_user -- ---------------------------- DROP TABLE IF EXISTS `sys_user`; -CREATE TABLE `sys_user` ( - `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `password` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `age` int(4) NULL DEFAULT NULL, - `email` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `photo` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `real_name` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `user_empid` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '员工id', - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0可用1封禁', - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `sys_user` +( + `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `password` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `age` int(4) NULL DEFAULT NULL, + `email` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `photo` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `real_name` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `user_empid` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '员工id', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0可用1封禁', + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_user -- ---------------------------- -INSERT INTO `sys_user` VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 'jingli1', '40d400f384b4996fd6ab30dab720ef1e', 20, '11@qq.com', '', NULL, NULL, NULL, NULL, NULL, NULL, 0); -INSERT INTO `sys_user` VALUES ('5946a985f733c57f1ab71689f7b6aeea', 'zhangsan', 'a07e4c18324811b0d0ec17a89e0f855b', 20, '11@qq.com', '', NULL, NULL, NULL, NULL, NULL, NULL, 0); -INSERT INTO `sys_user` VALUES ('98b051b03681de6028993a5d14ac93cb', 'hr', 'bce07289deffa09011e644813e6d86a4', 20, '11@qq.com', '', NULL, NULL, NULL, NULL, NULL, NULL, 0); -INSERT INTO `sys_user` VALUES ('acfc0e9232f54732a5d9ffe9071bf572', 'admin', 'e0b141de1c8091be350d3fc80de66528', 24, '', 'a88e6ae3-af87-490e-8f3e-6a92156dc95f.jpeg', '管理员', NULL, NULL, 'acfc0e9232f54732a5d9ffe9071bf572', '2017-12-20 16:34:06', '2018-10-01 10:21:19', 0); -INSERT INTO `sys_user` VALUES ('c7f1a7d7018311e8a1a2201a068c6482', '666', 'c6953f608430df414ea52e8c01b81a45', 24, '', '', '666', NULL, 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-25 11:56:54', '2018-06-14 23:18:51', 1); -INSERT INTO `sys_user` VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', 'jingli', '6a333668613ef7946f4462866f537fb5', 20, '11@qq.com', '', NULL, NULL, NULL, NULL, NULL, NULL, 0); +INSERT INTO `sys_user` +VALUES ('0b7625fedaa05e85f282486e1c9c91b9', 'jingli1', '40d400f384b4996fd6ab30dab720ef1e', 20, '11@qq.com', '', NULL, + NULL, NULL, NULL, NULL, NULL, 0); +INSERT INTO `sys_user` +VALUES ('5946a985f733c57f1ab71689f7b6aeea', 'zhangsan', 'a07e4c18324811b0d0ec17a89e0f855b', 20, '11@qq.com', '', NULL, + NULL, NULL, NULL, NULL, NULL, 0); +INSERT INTO `sys_user` +VALUES ('98b051b03681de6028993a5d14ac93cb', 'hr', 'bce07289deffa09011e644813e6d86a4', 20, '11@qq.com', '', NULL, NULL, + NULL, NULL, NULL, NULL, 0); +INSERT INTO `sys_user` +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', 'admin', 'e0b141de1c8091be350d3fc80de66528', 24, '', + 'a88e6ae3-af87-490e-8f3e-6a92156dc95f.jpeg', '管理员', NULL, NULL, 'acfc0e9232f54732a5d9ffe9071bf572', + '2017-12-20 16:34:06', '2018-10-01 10:21:19', 0); +INSERT INTO `sys_user` +VALUES ('c7f1a7d7018311e8a1a2201a068c6482', '666', 'c6953f608430df414ea52e8c01b81a45', 24, '', '', '666', NULL, + 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', '2018-01-25 11:56:54', + '2018-06-14 23:18:51', 1); +INSERT INTO `sys_user` +VALUES ('d818ac6a86cf1a64d2184bf0699d67a8', 'jingli', '6a333668613ef7946f4462866f537fb5', 20, '11@qq.com', '', NULL, + NULL, NULL, NULL, NULL, NULL, 0); -- ---------------------------- -- Table structure for test -- ---------------------------- DROP TABLE IF EXISTS `test`; -CREATE TABLE `test` ( - `id` int(11) NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `test` +( + `id` int(11) NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of test -- ---------------------------- -INSERT INTO `test` VALUES (1, '22'); +INSERT INTO `test` +VALUES (1, '22'); -- ---------------------------- -- Table structure for user_leave -- ---------------------------- DROP TABLE IF EXISTS `user_leave`; -CREATE TABLE `user_leave` ( - `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - `user_name` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `begin_time` datetime(0) NULL DEFAULT NULL, - `end_time` datetime(0) NULL DEFAULT NULL, - `reason` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `days` int(11) NULL DEFAULT NULL, - `process_instance_Id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `create_date` datetime(0) NULL DEFAULT NULL, - `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `update_date` datetime(0) NULL DEFAULT NULL, - `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `task_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `urlpath` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `submittimes` int(10) NULL DEFAULT 1, - PRIMARY KEY (`id`) USING BTREE +CREATE TABLE `user_leave` +( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `user_name` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `begin_time` datetime(0) NULL DEFAULT NULL, + `end_time` datetime(0) NULL DEFAULT NULL, + `reason` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `days` int(11) NULL DEFAULT NULL, + `process_instance_Id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_date` datetime(0) NULL DEFAULT NULL, + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_date` datetime(0) NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `task_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `urlpath` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `submittimes` int(10) NULL DEFAULT 1, + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user_leave -- ---------------------------- -INSERT INTO `user_leave` VALUES ('432070fc1f52c0cc177ad901a5aac8d1', '5946a985f733c57f1ab71689f7b6aeea', 'zhangsan', '2022-03-31 00:00:00', '2022-04-02 00:00:00', '111', 3, '302556', NULL, NULL, NULL, NULL, NULL, NULL, '/leave/readOnlyLeave/432070fc1f52c0cc177ad901a5aac8d1', 1); -INSERT INTO `user_leave` VALUES ('7d5b418cc0b1cecdc7545261ba6b0b18', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', '2022-03-31 00:00:00', '2022-04-01 00:00:00', '111', 2, '302527', NULL, NULL, NULL, NULL, NULL, NULL, '/leave/readOnlyLeave/7d5b418cc0b1cecdc7545261ba6b0b18', 1); -INSERT INTO `user_leave` VALUES ('7e804e7eb7ab8f354af131cbbc62c683', '5946a985f733c57f1ab71689f7b6aeea', 'zhangsan', '2022-03-31 00:00:00', '2022-04-04 00:00:00', '222', 5, '302599', NULL, NULL, NULL, NULL, NULL, NULL, '/leave/readOnlyLeave/7e804e7eb7ab8f354af131cbbc62c683', 1); -INSERT INTO `user_leave` VALUES ('89f445cbe3334a458a412691170d1e11', 'a4a743bffe9711e7b472201a068c6482', 'zxm', '2018-07-19 00:00:00', '2018-07-25 00:00:00', '2222', 3, '277535', NULL, NULL, NULL, NULL, NULL, NULL, '/leave/readOnlyLeave/89f445cbe3334a458a412691170d1e11', 1); -INSERT INTO `user_leave` VALUES ('9b691eafc3521b8a316815f7a3a98b8f', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', '2022-03-31 00:00:00', '2022-04-01 00:00:00', '111', 2, '302514', NULL, NULL, NULL, NULL, NULL, NULL, '/leave/readOnlyLeave/9b691eafc3521b8a316815f7a3a98b8f', 1); -INSERT INTO `user_leave` VALUES ('be7055719798461d93c3aa635c309bdc', 'a4a743bffe9711e7b472201a068c6482', 'zxm', '2018-07-14 00:00:00', '2018-07-17 00:00:00', '111', 3, '277505', NULL, NULL, NULL, NULL, NULL, NULL, '/leave/readOnlyLeave/be7055719798461d93c3aa635c309bdc', 1); -INSERT INTO `user_leave` VALUES ('f77b8a76443318fa2a7b39f820bd56f9', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', '2022-03-31 00:00:00', '2022-04-01 00:00:00', '111', 2, '302501', NULL, NULL, NULL, NULL, NULL, NULL, '/leave/readOnlyLeave/f77b8a76443318fa2a7b39f820bd56f9', 1); - -SET FOREIGN_KEY_CHECKS = 1; +INSERT INTO `user_leave` +VALUES ('432070fc1f52c0cc177ad901a5aac8d1', '5946a985f733c57f1ab71689f7b6aeea', 'zhangsan', '2022-03-31 00:00:00', + '2022-04-02 00:00:00', '111', 3, '302556', NULL, NULL, NULL, NULL, NULL, NULL, + '/leave/readOnlyLeave/432070fc1f52c0cc177ad901a5aac8d1', 1); +INSERT INTO `user_leave` +VALUES ('7d5b418cc0b1cecdc7545261ba6b0b18', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', '2022-03-31 00:00:00', + '2022-04-01 00:00:00', '111', 2, '302527', NULL, NULL, NULL, NULL, NULL, NULL, + '/leave/readOnlyLeave/7d5b418cc0b1cecdc7545261ba6b0b18', 1); +INSERT INTO `user_leave` +VALUES ('7e804e7eb7ab8f354af131cbbc62c683', '5946a985f733c57f1ab71689f7b6aeea', 'zhangsan', '2022-03-31 00:00:00', + '2022-04-04 00:00:00', '222', 5, '302599', NULL, NULL, NULL, NULL, NULL, NULL, + '/leave/readOnlyLeave/7e804e7eb7ab8f354af131cbbc62c683', 1); +INSERT INTO `user_leave` +VALUES ('89f445cbe3334a458a412691170d1e11', 'a4a743bffe9711e7b472201a068c6482', 'zxm', '2018-07-19 00:00:00', + '2018-07-25 00:00:00', '2222', 3, '277535', NULL, NULL, NULL, NULL, NULL, NULL, + '/leave/readOnlyLeave/89f445cbe3334a458a412691170d1e11', 1); +INSERT INTO `user_leave` +VALUES ('9b691eafc3521b8a316815f7a3a98b8f', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', '2022-03-31 00:00:00', + '2022-04-01 00:00:00', '111', 2, '302514', NULL, NULL, NULL, NULL, NULL, NULL, + '/leave/readOnlyLeave/9b691eafc3521b8a316815f7a3a98b8f', 1); +INSERT INTO `user_leave` +VALUES ('be7055719798461d93c3aa635c309bdc', 'a4a743bffe9711e7b472201a068c6482', 'zxm', '2018-07-14 00:00:00', + '2018-07-17 00:00:00', '111', 3, '277505', NULL, NULL, NULL, NULL, NULL, NULL, + '/leave/readOnlyLeave/be7055719798461d93c3aa635c309bdc', 1); +INSERT INTO `user_leave` +VALUES ('f77b8a76443318fa2a7b39f820bd56f9', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', '2022-03-31 00:00:00', + '2022-04-01 00:00:00', '111', 2, '302501', NULL, NULL, NULL, NULL, NULL, NULL, + '/leave/readOnlyLeave/f77b8a76443318fa2a7b39f820bd56f9', 1); + +SET +FOREIGN_KEY_CHECKS = 1; diff --git a/db/lenos-oracle.sql b/db/lenos-oracle.sql index 3dd20bf..33851f9 100644 --- a/db/lenos-oracle.sql +++ b/db/lenos-oracle.sql @@ -19,18 +19,17 @@ Date: 2019-02-27 22:47:09 -- Table structure for ACT_ASSIGNEE -- ---------------------------- DROP TABLE "LEN"."ACT_ASSIGNEE"; -CREATE TABLE "LEN"."ACT_ASSIGNEE" ( -"ID" NVARCHAR2(32) NOT NULL , -"SID" NVARCHAR2(32) NOT NULL , -"ASSIGNEE" NVARCHAR2(64) NULL , -"ROLE_ID" NVARCHAR2(32) NULL , -"ASSIGNEE_TYPE" NUMBER(11) NOT NULL , -"ACTIVTI_NAME" NVARCHAR2(128) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_ASSIGNEE" +( + "ID" NVARCHAR2(32) NOT NULL, + "SID" NVARCHAR2(32) NOT NULL, + "ASSIGNEE" NVARCHAR2(64) NULL, + "ROLE_ID" NVARCHAR2(32) NULL, + "ASSIGNEE_TYPE" NUMBER(11) NOT NULL, + "ACTIVTI_NAME" NVARCHAR2(128) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -41,24 +40,23 @@ NOCACHE -- Table structure for ACT_EVT_LOG -- ---------------------------- DROP TABLE "LEN"."ACT_EVT_LOG"; -CREATE TABLE "LEN"."ACT_EVT_LOG" ( -"LOG_NR_" NUMBER(19) NOT NULL , -"TYPE_" NVARCHAR2(64) NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"TIME_STAMP_" TIMESTAMP(6) NOT NULL , -"USER_ID_" NVARCHAR2(255) NULL , -"DATA_" BLOB NULL , -"LOCK_OWNER_" NVARCHAR2(255) NULL , -"LOCK_TIME_" TIMESTAMP(6) NULL , -"IS_PROCESSED_" NUMBER(3) DEFAULT 0 NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_EVT_LOG" +( + "LOG_NR_" NUMBER(19) NOT NULL, + "TYPE_" NVARCHAR2(64) NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "TIME_STAMP_" TIMESTAMP(6) NOT NULL, + "USER_ID_" NVARCHAR2(255) NULL, + "DATA_" BLOB NULL, + "LOCK_OWNER_" NVARCHAR2(255) NULL, + "LOCK_TIME_" TIMESTAMP(6) NULL, + "IS_PROCESSED_" NUMBER(3) DEFAULT 0 NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -69,18 +67,17 @@ NOCACHE -- Table structure for ACT_GE_BYTEARRAY -- ---------------------------- DROP TABLE "LEN"."ACT_GE_BYTEARRAY"; -CREATE TABLE "LEN"."ACT_GE_BYTEARRAY" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"NAME_" NVARCHAR2(255) NULL , -"DEPLOYMENT_ID_" NVARCHAR2(64) NULL , -"BYTES_" BLOB NULL , -"GENERATED_" NUMBER(1) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_GE_BYTEARRAY" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "NAME_" NVARCHAR2(255) NULL, + "DEPLOYMENT_ID_" NVARCHAR2(64) NULL, + "BYTES_" BLOB NULL, + "GENERATED_" NUMBER(1) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -91,48 +88,49 @@ NOCACHE -- Table structure for ACT_GE_PROPERTY -- ---------------------------- DROP TABLE "LEN"."ACT_GE_PROPERTY"; -CREATE TABLE "LEN"."ACT_GE_PROPERTY" ( -"NAME_" NVARCHAR2(64) NOT NULL , -"VALUE_" NVARCHAR2(300) NULL , -"REV_" NUMBER NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_GE_PROPERTY" +( + "NAME_" NVARCHAR2(64) NOT NULL, + "VALUE_" NVARCHAR2(300) NULL, + "REV_" NUMBER NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- -- Records of ACT_GE_PROPERTY -- ---------------------------- -INSERT INTO "LEN"."ACT_GE_PROPERTY" VALUES ('schema.version', '5.22.0.0', '1'); -INSERT INTO "LEN"."ACT_GE_PROPERTY" VALUES ('schema.history', 'create(5.22.0.0)', '1'); -INSERT INTO "LEN"."ACT_GE_PROPERTY" VALUES ('next.dbid', '1', '1'); +INSERT INTO "LEN"."ACT_GE_PROPERTY" +VALUES ('schema.version', '5.22.0.0', '1'); +INSERT INTO "LEN"."ACT_GE_PROPERTY" +VALUES ('schema.history', 'create(5.22.0.0)', '1'); +INSERT INTO "LEN"."ACT_GE_PROPERTY" +VALUES ('next.dbid', '1', '1'); -- ---------------------------- -- Table structure for ACT_HI_ACTINST -- ---------------------------- DROP TABLE "LEN"."ACT_HI_ACTINST"; -CREATE TABLE "LEN"."ACT_HI_ACTINST" ( -"ID_" NVARCHAR2(64) NOT NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NOT NULL , -"PROC_INST_ID_" NVARCHAR2(64) NOT NULL , -"EXECUTION_ID_" NVARCHAR2(64) NOT NULL , -"ACT_ID_" NVARCHAR2(255) NOT NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"CALL_PROC_INST_ID_" NVARCHAR2(64) NULL , -"ACT_NAME_" NVARCHAR2(255) NULL , -"ACT_TYPE_" NVARCHAR2(255) NOT NULL , -"ASSIGNEE_" NVARCHAR2(255) NULL , -"START_TIME_" TIMESTAMP(6) NOT NULL , -"END_TIME_" TIMESTAMP(6) NULL , -"DURATION_" NUMBER(19) NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_ACTINST" +( + "ID_" NVARCHAR2(64) NOT NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NOT NULL, + "PROC_INST_ID_" NVARCHAR2(64) NOT NULL, + "EXECUTION_ID_" NVARCHAR2(64) NOT NULL, + "ACT_ID_" NVARCHAR2(255) NOT NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "CALL_PROC_INST_ID_" NVARCHAR2(64) NULL, + "ACT_NAME_" NVARCHAR2(255) NULL, + "ACT_TYPE_" NVARCHAR2(255) NOT NULL, + "ASSIGNEE_" NVARCHAR2(255) NULL, + "START_TIME_" TIMESTAMP(6) NOT NULL, + "END_TIME_" TIMESTAMP(6) NULL, + "DURATION_" NUMBER(19) NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -143,23 +141,22 @@ NOCACHE -- Table structure for ACT_HI_ATTACHMENT -- ---------------------------- DROP TABLE "LEN"."ACT_HI_ATTACHMENT"; -CREATE TABLE "LEN"."ACT_HI_ATTACHMENT" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"USER_ID_" NVARCHAR2(255) NULL , -"NAME_" NVARCHAR2(255) NULL , -"DESCRIPTION_" NVARCHAR2(2000) NULL , -"TYPE_" NVARCHAR2(255) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"URL_" NVARCHAR2(2000) NULL , -"CONTENT_ID_" NVARCHAR2(64) NULL , -"TIME_" TIMESTAMP(6) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_ATTACHMENT" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "USER_ID_" NVARCHAR2(255) NULL, + "NAME_" NVARCHAR2(255) NULL, + "DESCRIPTION_" NVARCHAR2(2000) NULL, + "TYPE_" NVARCHAR2(255) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "URL_" NVARCHAR2(2000) NULL, + "CONTENT_ID_" NVARCHAR2(64) NULL, + "TIME_" TIMESTAMP(6) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -170,21 +167,20 @@ NOCACHE -- Table structure for ACT_HI_COMMENT -- ---------------------------- DROP TABLE "LEN"."ACT_HI_COMMENT"; -CREATE TABLE "LEN"."ACT_HI_COMMENT" ( -"ID_" NVARCHAR2(64) NOT NULL , -"TYPE_" NVARCHAR2(255) NULL , -"TIME_" TIMESTAMP(6) NOT NULL , -"USER_ID_" NVARCHAR2(255) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"ACTION_" NVARCHAR2(255) NULL , -"MESSAGE_" NVARCHAR2(2000) NULL , -"FULL_MSG_" BLOB NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_COMMENT" +( + "ID_" NVARCHAR2(64) NOT NULL, + "TYPE_" NVARCHAR2(255) NULL, + "TIME_" TIMESTAMP(6) NOT NULL, + "USER_ID_" NVARCHAR2(255) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "ACTION_" NVARCHAR2(255) NULL, + "MESSAGE_" NVARCHAR2(2000) NULL, + "FULL_MSG_" BLOB NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -195,27 +191,26 @@ NOCACHE -- Table structure for ACT_HI_DETAIL -- ---------------------------- DROP TABLE "LEN"."ACT_HI_DETAIL"; -CREATE TABLE "LEN"."ACT_HI_DETAIL" ( -"ID_" NVARCHAR2(64) NOT NULL , -"TYPE_" NVARCHAR2(255) NOT NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"ACT_INST_ID_" NVARCHAR2(64) NULL , -"NAME_" NVARCHAR2(255) NOT NULL , -"VAR_TYPE_" NVARCHAR2(64) NULL , -"REV_" NUMBER NULL , -"TIME_" TIMESTAMP(6) NOT NULL , -"BYTEARRAY_ID_" NVARCHAR2(64) NULL , -"DOUBLE_" NUMBER NULL , -"LONG_" NUMBER(19) NULL , -"TEXT_" NVARCHAR2(2000) NULL , -"TEXT2_" NVARCHAR2(2000) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_DETAIL" +( + "ID_" NVARCHAR2(64) NOT NULL, + "TYPE_" NVARCHAR2(255) NOT NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "ACT_INST_ID_" NVARCHAR2(64) NULL, + "NAME_" NVARCHAR2(255) NOT NULL, + "VAR_TYPE_" NVARCHAR2(64) NULL, + "REV_" NUMBER NULL, + "TIME_" TIMESTAMP(6) NOT NULL, + "BYTEARRAY_ID_" NVARCHAR2(64) NULL, + "DOUBLE_" NUMBER NULL, + "LONG_" NUMBER(19) NULL, + "TEXT_" NVARCHAR2(2000) NULL, + "TEXT2_" NVARCHAR2(2000) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -226,18 +221,17 @@ NOCACHE -- Table structure for ACT_HI_IDENTITYLINK -- ---------------------------- DROP TABLE "LEN"."ACT_HI_IDENTITYLINK"; -CREATE TABLE "LEN"."ACT_HI_IDENTITYLINK" ( -"ID_" NVARCHAR2(64) NOT NULL , -"GROUP_ID_" NVARCHAR2(255) NULL , -"TYPE_" NVARCHAR2(255) NULL , -"USER_ID_" NVARCHAR2(255) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_IDENTITYLINK" +( + "ID_" NVARCHAR2(64) NOT NULL, + "GROUP_ID_" NVARCHAR2(255) NULL, + "TYPE_" NVARCHAR2(255) NULL, + "USER_ID_" NVARCHAR2(255) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -248,26 +242,25 @@ NOCACHE -- Table structure for ACT_HI_PROCINST -- ---------------------------- DROP TABLE "LEN"."ACT_HI_PROCINST"; -CREATE TABLE "LEN"."ACT_HI_PROCINST" ( -"ID_" NVARCHAR2(64) NOT NULL , -"PROC_INST_ID_" NVARCHAR2(64) NOT NULL , -"BUSINESS_KEY_" NVARCHAR2(255) NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NOT NULL , -"START_TIME_" TIMESTAMP(6) NOT NULL , -"END_TIME_" TIMESTAMP(6) NULL , -"DURATION_" NUMBER(19) NULL , -"START_USER_ID_" NVARCHAR2(255) NULL , -"START_ACT_ID_" NVARCHAR2(255) NULL , -"END_ACT_ID_" NVARCHAR2(255) NULL , -"SUPER_PROCESS_INSTANCE_ID_" NVARCHAR2(64) NULL , -"DELETE_REASON_" NVARCHAR2(2000) NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL , -"NAME_" NVARCHAR2(255) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_PROCINST" +( + "ID_" NVARCHAR2(64) NOT NULL, + "PROC_INST_ID_" NVARCHAR2(64) NOT NULL, + "BUSINESS_KEY_" NVARCHAR2(255) NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NOT NULL, + "START_TIME_" TIMESTAMP(6) NOT NULL, + "END_TIME_" TIMESTAMP(6) NULL, + "DURATION_" NUMBER(19) NULL, + "START_USER_ID_" NVARCHAR2(255) NULL, + "START_ACT_ID_" NVARCHAR2(255) NULL, + "END_ACT_ID_" NVARCHAR2(255) NULL, + "SUPER_PROCESS_INSTANCE_ID_" NVARCHAR2(64) NULL, + "DELETE_REASON_" NVARCHAR2(2000) NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL, + "NAME_" NVARCHAR2(255) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -278,32 +271,31 @@ NOCACHE -- Table structure for ACT_HI_TASKINST -- ---------------------------- DROP TABLE "LEN"."ACT_HI_TASKINST"; -CREATE TABLE "LEN"."ACT_HI_TASKINST" ( -"ID_" NVARCHAR2(64) NOT NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NULL , -"TASK_DEF_KEY_" NVARCHAR2(255) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"PARENT_TASK_ID_" NVARCHAR2(64) NULL , -"NAME_" NVARCHAR2(255) NULL , -"DESCRIPTION_" NVARCHAR2(2000) NULL , -"OWNER_" NVARCHAR2(255) NULL , -"ASSIGNEE_" NVARCHAR2(255) NULL , -"START_TIME_" TIMESTAMP(6) NOT NULL , -"CLAIM_TIME_" TIMESTAMP(6) NULL , -"END_TIME_" TIMESTAMP(6) NULL , -"DURATION_" NUMBER(19) NULL , -"DELETE_REASON_" NVARCHAR2(2000) NULL , -"PRIORITY_" NUMBER NULL , -"DUE_DATE_" TIMESTAMP(6) NULL , -"FORM_KEY_" NVARCHAR2(255) NULL , -"CATEGORY_" NVARCHAR2(255) NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_TASKINST" +( + "ID_" NVARCHAR2(64) NOT NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NULL, + "TASK_DEF_KEY_" NVARCHAR2(255) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "PARENT_TASK_ID_" NVARCHAR2(64) NULL, + "NAME_" NVARCHAR2(255) NULL, + "DESCRIPTION_" NVARCHAR2(2000) NULL, + "OWNER_" NVARCHAR2(255) NULL, + "ASSIGNEE_" NVARCHAR2(255) NULL, + "START_TIME_" TIMESTAMP(6) NOT NULL, + "CLAIM_TIME_" TIMESTAMP(6) NULL, + "END_TIME_" TIMESTAMP(6) NULL, + "DURATION_" NUMBER(19) NULL, + "DELETE_REASON_" NVARCHAR2(2000) NULL, + "PRIORITY_" NUMBER NULL, + "DUE_DATE_" TIMESTAMP(6) NULL, + "FORM_KEY_" NVARCHAR2(255) NULL, + "CATEGORY_" NVARCHAR2(255) NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -314,26 +306,25 @@ NOCACHE -- Table structure for ACT_HI_VARINST -- ---------------------------- DROP TABLE "LEN"."ACT_HI_VARINST"; -CREATE TABLE "LEN"."ACT_HI_VARINST" ( -"ID_" NVARCHAR2(64) NOT NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"NAME_" NVARCHAR2(255) NOT NULL , -"VAR_TYPE_" NVARCHAR2(100) NULL , -"REV_" NUMBER NULL , -"BYTEARRAY_ID_" NVARCHAR2(64) NULL , -"DOUBLE_" NUMBER NULL , -"LONG_" NUMBER(19) NULL , -"TEXT_" NVARCHAR2(2000) NULL , -"TEXT2_" NVARCHAR2(2000) NULL , -"CREATE_TIME_" TIMESTAMP(6) NULL , -"LAST_UPDATED_TIME_" TIMESTAMP(6) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_HI_VARINST" +( + "ID_" NVARCHAR2(64) NOT NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "NAME_" NVARCHAR2(255) NOT NULL, + "VAR_TYPE_" NVARCHAR2(100) NULL, + "REV_" NUMBER NULL, + "BYTEARRAY_ID_" NVARCHAR2(64) NULL, + "DOUBLE_" NUMBER NULL, + "LONG_" NUMBER(19) NULL, + "TEXT_" NVARCHAR2(2000) NULL, + "TEXT2_" NVARCHAR2(2000) NULL, + "CREATE_TIME_" TIMESTAMP(6) NULL, + "LAST_UPDATED_TIME_" TIMESTAMP(6) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -344,16 +335,15 @@ NOCACHE -- Table structure for ACT_ID_GROUP -- ---------------------------- DROP TABLE "LEN"."ACT_ID_GROUP"; -CREATE TABLE "LEN"."ACT_ID_GROUP" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"NAME_" NVARCHAR2(255) NULL , -"TYPE_" NVARCHAR2(255) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_ID_GROUP" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "NAME_" NVARCHAR2(255) NULL, + "TYPE_" NVARCHAR2(255) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -364,20 +354,19 @@ NOCACHE -- Table structure for ACT_ID_INFO -- ---------------------------- DROP TABLE "LEN"."ACT_ID_INFO"; -CREATE TABLE "LEN"."ACT_ID_INFO" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"USER_ID_" NVARCHAR2(64) NULL , -"TYPE_" NVARCHAR2(64) NULL , -"KEY_" NVARCHAR2(255) NULL , -"VALUE_" NVARCHAR2(255) NULL , -"PASSWORD_" BLOB NULL , -"PARENT_ID_" NVARCHAR2(255) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_ID_INFO" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "USER_ID_" NVARCHAR2(64) NULL, + "TYPE_" NVARCHAR2(64) NULL, + "KEY_" NVARCHAR2(255) NULL, + "VALUE_" NVARCHAR2(255) NULL, + "PASSWORD_" BLOB NULL, + "PARENT_ID_" NVARCHAR2(255) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -388,14 +377,13 @@ NOCACHE -- Table structure for ACT_ID_MEMBERSHIP -- ---------------------------- DROP TABLE "LEN"."ACT_ID_MEMBERSHIP"; -CREATE TABLE "LEN"."ACT_ID_MEMBERSHIP" ( -"USER_ID_" NVARCHAR2(64) NOT NULL , -"GROUP_ID_" NVARCHAR2(64) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_ID_MEMBERSHIP" +( + "USER_ID_" NVARCHAR2(64) NOT NULL, + "GROUP_ID_" NVARCHAR2(64) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -406,19 +394,18 @@ NOCACHE -- Table structure for ACT_ID_USER -- ---------------------------- DROP TABLE "LEN"."ACT_ID_USER"; -CREATE TABLE "LEN"."ACT_ID_USER" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"FIRST_" NVARCHAR2(255) NULL , -"LAST_" NVARCHAR2(255) NULL , -"EMAIL_" NVARCHAR2(255) NULL , -"PWD_" NVARCHAR2(255) NULL , -"PICTURE_ID_" NVARCHAR2(64) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_ID_USER" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "FIRST_" NVARCHAR2(255) NULL, + "LAST_" NVARCHAR2(255) NULL, + "EMAIL_" NVARCHAR2(255) NULL, + "PWD_" NVARCHAR2(255) NULL, + "PICTURE_ID_" NVARCHAR2(64) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -429,16 +416,15 @@ NOCACHE -- Table structure for ACT_PROCDEF_INFO -- ---------------------------- DROP TABLE "LEN"."ACT_PROCDEF_INFO"; -CREATE TABLE "LEN"."ACT_PROCDEF_INFO" ( -"ID_" NVARCHAR2(64) NOT NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"INFO_JSON_ID_" NVARCHAR2(64) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_PROCDEF_INFO" +( + "ID_" NVARCHAR2(64) NOT NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "INFO_JSON_ID_" NVARCHAR2(64) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -449,17 +435,16 @@ NOCACHE -- Table structure for ACT_RE_DEPLOYMENT -- ---------------------------- DROP TABLE "LEN"."ACT_RE_DEPLOYMENT"; -CREATE TABLE "LEN"."ACT_RE_DEPLOYMENT" ( -"ID_" NVARCHAR2(64) NOT NULL , -"NAME_" NVARCHAR2(255) NULL , -"CATEGORY_" NVARCHAR2(255) NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL , -"DEPLOY_TIME_" TIMESTAMP(6) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RE_DEPLOYMENT" +( + "ID_" NVARCHAR2(64) NOT NULL, + "NAME_" NVARCHAR2(255) NULL, + "CATEGORY_" NVARCHAR2(255) NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL, + "DEPLOY_TIME_" TIMESTAMP(6) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -470,25 +455,24 @@ NOCACHE -- Table structure for ACT_RE_MODEL -- ---------------------------- DROP TABLE "LEN"."ACT_RE_MODEL"; -CREATE TABLE "LEN"."ACT_RE_MODEL" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"NAME_" NVARCHAR2(255) NULL , -"KEY_" NVARCHAR2(255) NULL , -"CATEGORY_" NVARCHAR2(255) NULL , -"CREATE_TIME_" TIMESTAMP(6) NULL , -"LAST_UPDATE_TIME_" TIMESTAMP(6) NULL , -"VERSION_" NUMBER NULL , -"META_INFO_" NVARCHAR2(2000) NULL , -"DEPLOYMENT_ID_" NVARCHAR2(64) NULL , -"EDITOR_SOURCE_VALUE_ID_" NVARCHAR2(64) NULL , -"EDITOR_SOURCE_EXTRA_VALUE_ID_" NVARCHAR2(64) NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RE_MODEL" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "NAME_" NVARCHAR2(255) NULL, + "KEY_" NVARCHAR2(255) NULL, + "CATEGORY_" NVARCHAR2(255) NULL, + "CREATE_TIME_" TIMESTAMP(6) NULL, + "LAST_UPDATE_TIME_" TIMESTAMP(6) NULL, + "VERSION_" NUMBER NULL, + "META_INFO_" NVARCHAR2(2000) NULL, + "DEPLOYMENT_ID_" NVARCHAR2(64) NULL, + "EDITOR_SOURCE_VALUE_ID_" NVARCHAR2(64) NULL, + "EDITOR_SOURCE_EXTRA_VALUE_ID_" NVARCHAR2(64) NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -499,26 +483,25 @@ NOCACHE -- Table structure for ACT_RE_PROCDEF -- ---------------------------- DROP TABLE "LEN"."ACT_RE_PROCDEF"; -CREATE TABLE "LEN"."ACT_RE_PROCDEF" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"CATEGORY_" NVARCHAR2(255) NULL , -"NAME_" NVARCHAR2(255) NULL , -"KEY_" NVARCHAR2(255) NOT NULL , -"VERSION_" NUMBER NOT NULL , -"DEPLOYMENT_ID_" NVARCHAR2(64) NULL , -"RESOURCE_NAME_" NVARCHAR2(2000) NULL , -"DGRM_RESOURCE_NAME_" VARCHAR2(4000 BYTE) NULL , -"DESCRIPTION_" NVARCHAR2(2000) NULL , -"HAS_START_FORM_KEY_" NUMBER(1) NULL , -"HAS_GRAPHICAL_NOTATION_" NUMBER(1) NULL , -"SUSPENSION_STATE_" NUMBER NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RE_PROCDEF" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "CATEGORY_" NVARCHAR2(255) NULL, + "NAME_" NVARCHAR2(255) NULL, + "KEY_" NVARCHAR2(255) NOT NULL, + "VERSION_" NUMBER NOT NULL, + "DEPLOYMENT_ID_" NVARCHAR2(64) NULL, + "RESOURCE_NAME_" NVARCHAR2(2000) NULL, + "DGRM_RESOURCE_NAME_" VARCHAR2(4000 BYTE) NULL, + "DESCRIPTION_" NVARCHAR2(2000) NULL, + "HAS_START_FORM_KEY_" NUMBER(1) NULL, + "HAS_GRAPHICAL_NOTATION_" NUMBER(1) NULL, + "SUSPENSION_STATE_" NUMBER NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -529,23 +512,22 @@ NOCACHE -- Table structure for ACT_RU_EVENT_SUBSCR -- ---------------------------- DROP TABLE "LEN"."ACT_RU_EVENT_SUBSCR"; -CREATE TABLE "LEN"."ACT_RU_EVENT_SUBSCR" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"EVENT_TYPE_" NVARCHAR2(255) NOT NULL , -"EVENT_NAME_" NVARCHAR2(255) NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"ACTIVITY_ID_" NVARCHAR2(64) NULL , -"CONFIGURATION_" NVARCHAR2(255) NULL , -"CREATED_" TIMESTAMP(6) NOT NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RU_EVENT_SUBSCR" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "EVENT_TYPE_" NVARCHAR2(255) NOT NULL, + "EVENT_NAME_" NVARCHAR2(255) NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "ACTIVITY_ID_" NVARCHAR2(64) NULL, + "CONFIGURATION_" NVARCHAR2(255) NULL, + "CREATED_" TIMESTAMP(6) NOT NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -556,29 +538,28 @@ NOCACHE -- Table structure for ACT_RU_EXECUTION -- ---------------------------- DROP TABLE "LEN"."ACT_RU_EXECUTION"; -CREATE TABLE "LEN"."ACT_RU_EXECUTION" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"BUSINESS_KEY_" NVARCHAR2(255) NULL , -"PARENT_ID_" NVARCHAR2(64) NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NULL , -"SUPER_EXEC_" NVARCHAR2(64) NULL , -"ACT_ID_" NVARCHAR2(255) NULL , -"IS_ACTIVE_" NUMBER(1) NULL , -"IS_CONCURRENT_" NUMBER(1) NULL , -"IS_SCOPE_" NUMBER(1) NULL , -"IS_EVENT_SCOPE_" NUMBER(1) NULL , -"SUSPENSION_STATE_" NUMBER NULL , -"CACHED_ENT_STATE_" NUMBER NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL , -"NAME_" NVARCHAR2(255) NULL , -"LOCK_TIME_" TIMESTAMP(6) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RU_EXECUTION" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "BUSINESS_KEY_" NVARCHAR2(255) NULL, + "PARENT_ID_" NVARCHAR2(64) NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NULL, + "SUPER_EXEC_" NVARCHAR2(64) NULL, + "ACT_ID_" NVARCHAR2(255) NULL, + "IS_ACTIVE_" NUMBER(1) NULL, + "IS_CONCURRENT_" NUMBER(1) NULL, + "IS_SCOPE_" NUMBER(1) NULL, + "IS_EVENT_SCOPE_" NUMBER(1) NULL, + "SUSPENSION_STATE_" NUMBER NULL, + "CACHED_ENT_STATE_" NUMBER NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL, + "NAME_" NVARCHAR2(255) NULL, + "LOCK_TIME_" TIMESTAMP(6) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -589,20 +570,19 @@ NOCACHE -- Table structure for ACT_RU_IDENTITYLINK -- ---------------------------- DROP TABLE "LEN"."ACT_RU_IDENTITYLINK"; -CREATE TABLE "LEN"."ACT_RU_IDENTITYLINK" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"GROUP_ID_" NVARCHAR2(255) NULL , -"TYPE_" NVARCHAR2(255) NULL , -"USER_ID_" NVARCHAR2(255) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RU_IDENTITYLINK" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "GROUP_ID_" NVARCHAR2(255) NULL, + "TYPE_" NVARCHAR2(255) NULL, + "USER_ID_" NVARCHAR2(255) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -613,29 +593,28 @@ NOCACHE -- Table structure for ACT_RU_JOB -- ---------------------------- DROP TABLE "LEN"."ACT_RU_JOB"; -CREATE TABLE "LEN"."ACT_RU_JOB" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"TYPE_" NVARCHAR2(255) NOT NULL , -"LOCK_EXP_TIME_" TIMESTAMP(6) NULL , -"LOCK_OWNER_" NVARCHAR2(255) NULL , -"EXCLUSIVE_" NUMBER(1) NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"PROCESS_INSTANCE_ID_" NVARCHAR2(64) NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NULL , -"RETRIES_" NUMBER NULL , -"EXCEPTION_STACK_ID_" NVARCHAR2(64) NULL , -"EXCEPTION_MSG_" NVARCHAR2(2000) NULL , -"DUEDATE_" TIMESTAMP(6) NULL , -"REPEAT_" NVARCHAR2(255) NULL , -"HANDLER_TYPE_" NVARCHAR2(255) NULL , -"HANDLER_CFG_" NVARCHAR2(2000) NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RU_JOB" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "TYPE_" NVARCHAR2(255) NOT NULL, + "LOCK_EXP_TIME_" TIMESTAMP(6) NULL, + "LOCK_OWNER_" NVARCHAR2(255) NULL, + "EXCLUSIVE_" NUMBER(1) NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "PROCESS_INSTANCE_ID_" NVARCHAR2(64) NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NULL, + "RETRIES_" NUMBER NULL, + "EXCEPTION_STACK_ID_" NVARCHAR2(64) NULL, + "EXCEPTION_MSG_" NVARCHAR2(2000) NULL, + "DUEDATE_" TIMESTAMP(6) NULL, + "REPEAT_" NVARCHAR2(255) NULL, + "HANDLER_TYPE_" NVARCHAR2(255) NULL, + "HANDLER_CFG_" NVARCHAR2(2000) NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -646,31 +625,30 @@ NOCACHE -- Table structure for ACT_RU_TASK -- ---------------------------- DROP TABLE "LEN"."ACT_RU_TASK"; -CREATE TABLE "LEN"."ACT_RU_TASK" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"PROC_DEF_ID_" NVARCHAR2(64) NULL , -"NAME_" NVARCHAR2(255) NULL , -"PARENT_TASK_ID_" NVARCHAR2(64) NULL , -"DESCRIPTION_" NVARCHAR2(2000) NULL , -"TASK_DEF_KEY_" NVARCHAR2(255) NULL , -"OWNER_" NVARCHAR2(255) NULL , -"ASSIGNEE_" NVARCHAR2(255) NULL , -"DELEGATION_" NVARCHAR2(64) NULL , -"PRIORITY_" NUMBER NULL , -"CREATE_TIME_" TIMESTAMP(6) NULL , -"DUE_DATE_" TIMESTAMP(6) NULL , -"CATEGORY_" NVARCHAR2(255) NULL , -"SUSPENSION_STATE_" NUMBER NULL , -"TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL , -"FORM_KEY_" NVARCHAR2(255) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RU_TASK" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "PROC_DEF_ID_" NVARCHAR2(64) NULL, + "NAME_" NVARCHAR2(255) NULL, + "PARENT_TASK_ID_" NVARCHAR2(64) NULL, + "DESCRIPTION_" NVARCHAR2(2000) NULL, + "TASK_DEF_KEY_" NVARCHAR2(255) NULL, + "OWNER_" NVARCHAR2(255) NULL, + "ASSIGNEE_" NVARCHAR2(255) NULL, + "DELEGATION_" NVARCHAR2(64) NULL, + "PRIORITY_" NUMBER NULL, + "CREATE_TIME_" TIMESTAMP(6) NULL, + "DUE_DATE_" TIMESTAMP(6) NULL, + "CATEGORY_" NVARCHAR2(255) NULL, + "SUSPENSION_STATE_" NUMBER NULL, + "TENANT_ID_" NVARCHAR2(255) DEFAULT '' NULL, + "FORM_KEY_" NVARCHAR2(255) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -681,24 +659,23 @@ NOCACHE -- Table structure for ACT_RU_VARIABLE -- ---------------------------- DROP TABLE "LEN"."ACT_RU_VARIABLE"; -CREATE TABLE "LEN"."ACT_RU_VARIABLE" ( -"ID_" NVARCHAR2(64) NOT NULL , -"REV_" NUMBER NULL , -"TYPE_" NVARCHAR2(255) NOT NULL , -"NAME_" NVARCHAR2(255) NOT NULL , -"EXECUTION_ID_" NVARCHAR2(64) NULL , -"PROC_INST_ID_" NVARCHAR2(64) NULL , -"TASK_ID_" NVARCHAR2(64) NULL , -"BYTEARRAY_ID_" NVARCHAR2(64) NULL , -"DOUBLE_" NUMBER NULL , -"LONG_" NUMBER(19) NULL , -"TEXT_" NVARCHAR2(2000) NULL , -"TEXT2_" NVARCHAR2(2000) NULL -) -LOGGING +CREATE TABLE "LEN"."ACT_RU_VARIABLE" +( + "ID_" NVARCHAR2(64) NOT NULL, + "REV_" NUMBER NULL, + "TYPE_" NVARCHAR2(255) NOT NULL, + "NAME_" NVARCHAR2(255) NOT NULL, + "EXECUTION_ID_" NVARCHAR2(64) NULL, + "PROC_INST_ID_" NVARCHAR2(64) NULL, + "TASK_ID_" NVARCHAR2(64) NULL, + "BYTEARRAY_ID_" NVARCHAR2(64) NULL, + "DOUBLE_" NUMBER NULL, + "LONG_" NUMBER(19) NULL, + "TEXT_" NVARCHAR2(2000) NULL, + "TEXT2_" NVARCHAR2(2000) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -709,209 +686,287 @@ NOCACHE -- Table structure for BLOG_ARTICLE -- ---------------------------- DROP TABLE "LEN"."BLOG_ARTICLE"; -CREATE TABLE "LEN"."BLOG_ARTICLE" ( -"ID" NVARCHAR2(32) NOT NULL , -"CODE" NVARCHAR2(255) NOT NULL , -"TITLE" NVARCHAR2(255) NOT NULL , -"FIRST_IMG" NVARCHAR2(255) NULL , -"CONTENT" NCLOB NOT NULL , -"READ_NUMBER" NUMBER(11) NOT NULL , -"TOP_NUM" NUMBER(11) NULL , -"CREATE_BY" NVARCHAR2(32) NOT NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_DATE" DATE NULL , -"DEL_FLAG" NUMBER(4) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."BLOG_ARTICLE" +( + "ID" NVARCHAR2(32) NOT NULL, + "CODE" NVARCHAR2(255) NOT NULL, + "TITLE" NVARCHAR2(255) NOT NULL, + "FIRST_IMG" NVARCHAR2(255) NULL, + "CONTENT" NCLOB NOT NULL, + "READ_NUMBER" NUMBER(11) NOT NULL, + "TOP_NUM" NUMBER(11) NULL, + "CREATE_BY" NVARCHAR2(32) NOT NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_DATE" DATE NULL, + "DEL_FLAG" NUMBER(4) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE"."CODE" IS 'code'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE"."TITLE" IS '标题'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE"."FIRST_IMG" IS '列表缩略图'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE"."CONTENT" IS '文章内容'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE"."READ_NUMBER" IS '阅读次数'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE"."TOP_NUM" IS '次序(置顶功能)'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE"."DEL_FLAG" IS '0正常1删除'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE"."CODE" IS 'code'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE"."TITLE" IS '标题'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE"."FIRST_IMG" IS '列表缩略图'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE"."CONTENT" IS '文章内容'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE"."READ_NUMBER" IS '阅读次数'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE"."TOP_NUM" IS '次序(置顶功能)'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE"."DEL_FLAG" IS '0正常1删除'; -- ---------------------------- -- Records of BLOG_ARTICLE -- ---------------------------- -INSERT INTO "LEN"."BLOG_ARTICLE" VALUES ('3887934708c54f49bc5a566f77e2a759', '76249265', 'hello,world', 'http://localhost:8081/img/77e5338a-217c-4b07-a3fd-63f20411dfcb.png', '

你好,世界

<img src="http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg">

+INSERT INTO "LEN"."BLOG_ARTICLE" +VALUES ('3887934708c54f49bc5a566f77e2a759', '76249265', 'hello,world', + 'http://localhost:8081/img/77e5338a-217c-4b07-a3fd-63f20411dfcb.png', '

你好,世界

<img src="http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg">


<img src="http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg">

JsonUtil json = new JsonUtil();
 List<BlogCategory> categories = categoryService.selectAll();
 categories.sort(Comparator.comparing(BlogCategory::getSequence));
 json.setData(categories);
 return json;
-
', '16', '0', 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', TO_DATE('2018-10-14 17:47:41', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-11-25 17:35:00', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."BLOG_ARTICLE" VALUES ('3887934708c54f49bc5a566f77e2a759', '76249265', 'hello,world', 'http://localhost:8081/img/77e5338a-217c-4b07-a3fd-63f20411dfcb.png', '

你好,世界

<img src="http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg">

+', '16', '0', 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', + TO_DATE('2018-10-14 17:47:41', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-11-25 17:35:00', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."BLOG_ARTICLE" +VALUES ('3887934708c54f49bc5a566f77e2a759', '76249265', 'hello,world', + 'http://localhost:8081/img/77e5338a-217c-4b07-a3fd-63f20411dfcb.png', '

你好,世界

<img src="http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg">


<img src="http://localhost:8081/img/1b805822-4d00-4695-acdd-90f68af6150e.jpg">

JsonUtil json = new JsonUtil();
 List<BlogCategory> categories = categoryService.selectAll();
 categories.sort(Comparator.comparing(BlogCategory::getSequence));
 json.setData(categories);
 return json;
-
', '16', '0', 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', TO_DATE('2018-10-14 17:47:41', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-11-25 17:35:00', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."BLOG_ARTICLE" VALUES ('6e3fbd29b226452984428883d6e7a8a2', '53165934', '测试添加', 'http://localhost:8081/img/536ac5c8-ee9a-4826-9977-be8983622e00.png', '

内容啦啦啦啦啦


', '15', '0', 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', TO_DATE('2018-11-19 22:57:25', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-11-25 18:55:34', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."BLOG_ARTICLE" VALUES ('89f445cbe3334a458a4126741170d1e1', 'ASDFG2', 'java基础1', null, 'Java基础知识', '130', '1', 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-10-01 11:24:59', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); -INSERT INTO "LEN"."BLOG_ARTICLE" VALUES ('89f445cbe3334a458a4126751170d1e1', 'ASDFG1', 'java基础2', null, 'Java基础知识', '127', '1', 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-10-01 11:23:59', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); -INSERT INTO "LEN"."BLOG_ARTICLE" VALUES ('89f445cbe3334a458a412691170d1e12', 'xcbbg', 'java基础3', null, '

Java基础知识

', '124', '0', 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', TO_DATE('2018-10-01 11:22:59', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-11-25 22:16:19', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."BLOG_ARTICLE" VALUES ('89f445cbe3334a458a4126951170d1e1', 'ASDFGC', 'java基础4', null, 'Java基础知识', '124', '1', 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-10-01 11:21:59', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); +', '16', '0', 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', + TO_DATE('2018-10-14 17:47:41', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-11-25 17:35:00', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."BLOG_ARTICLE" +VALUES ('6e3fbd29b226452984428883d6e7a8a2', '53165934', '测试添加', + 'http://localhost:8081/img/536ac5c8-ee9a-4826-9977-be8983622e00.png', + '

内容啦啦啦啦啦


', + '15', '0', 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', + TO_DATE('2018-11-19 22:57:25', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-11-25 18:55:34', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."BLOG_ARTICLE" +VALUES ('89f445cbe3334a458a4126741170d1e1', 'ASDFG2', 'java基础1', null, 'Java基础知识', '130', '1', + 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-10-01 11:24:59', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); +INSERT INTO "LEN"."BLOG_ARTICLE" +VALUES ('89f445cbe3334a458a4126751170d1e1', 'ASDFG1', 'java基础2', null, 'Java基础知识', '127', '1', + 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-10-01 11:23:59', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); +INSERT INTO "LEN"."BLOG_ARTICLE" +VALUES ('89f445cbe3334a458a412691170d1e12', 'xcbbg', 'java基础3', null, '

Java基础知识

', '124', '0', + 'acfc0e9232f54732a5d9ffe9071bf572', 'a4a743bffe9711e7b472201a068c6482', + TO_DATE('2018-10-01 11:22:59', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-11-25 22:16:19', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."BLOG_ARTICLE" +VALUES ('89f445cbe3334a458a4126951170d1e1', 'ASDFGC', 'java基础4', null, 'Java基础知识', '124', '1', + 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-10-01 11:21:59', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); -- ---------------------------- -- Table structure for BLOG_ARTICLE_CATEGORY -- ---------------------------- DROP TABLE "LEN"."BLOG_ARTICLE_CATEGORY"; -CREATE TABLE "LEN"."BLOG_ARTICLE_CATEGORY" ( -"ID" NVARCHAR2(32) NOT NULL , -"ARTICLE_ID" NVARCHAR2(32) NOT NULL , -"CATEGORY_ID" NVARCHAR2(32) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."BLOG_ARTICLE_CATEGORY" +( + "ID" NVARCHAR2(32) NOT NULL, + "ARTICLE_ID" NVARCHAR2(32) NOT NULL, + "CATEGORY_ID" NVARCHAR2(32) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON TABLE "LEN"."BLOG_ARTICLE_CATEGORY" IS '文章标签表'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE_CATEGORY"."ARTICLE_ID" IS '文章id'; -COMMENT ON COLUMN "LEN"."BLOG_ARTICLE_CATEGORY"."CATEGORY_ID" IS '标签id'; +COMMENT +ON TABLE "LEN"."BLOG_ARTICLE_CATEGORY" IS '文章标签表'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE_CATEGORY"."ARTICLE_ID" IS '文章id'; +COMMENT +ON COLUMN "LEN"."BLOG_ARTICLE_CATEGORY"."CATEGORY_ID" IS '标签id'; -- ---------------------------- -- Records of BLOG_ARTICLE_CATEGORY -- ---------------------------- -INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" VALUES ('0037884871fa483db71e4158a18b0af9', '3887934708c54f49bc5a566f77e2a759', '3d4da698fc914ed0b956e86b58f93166'); -INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" VALUES ('2e2c8578a05b4048a9365e9a1b5ff726', '89f445cbe3334a458a412691170d1e12', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" VALUES ('68eeaf5f10a24ed195c042dbc6e25df7', 'a9455e9f36bc4f33ba01412a64d87d6a', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" VALUES ('7659e8a4b97144269775983f886ce25e', '3887934708c54f49bc5a566f77e2a759', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" VALUES ('db7a1ca9b5d04a618f98e65c6c5555db', '6e3fbd29b226452984428883d6e7a8a2', '3956852574b6490ba6198f35b1c00aee'); -INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" VALUES ('e6c27fd837244cefb43b2b2aca276f1f', '3887934708c54f49bc5a566f77e2a759', '2b7c729789de4c03a23fff8311b9eaf4'); -INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" VALUES ('fe7c34ffcf8c4af9922b4438e695c742', 'fd27b3ed7d344395b7766f596bf6fd06', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" +VALUES ('0037884871fa483db71e4158a18b0af9', '3887934708c54f49bc5a566f77e2a759', '3d4da698fc914ed0b956e86b58f93166'); +INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" +VALUES ('2e2c8578a05b4048a9365e9a1b5ff726', '89f445cbe3334a458a412691170d1e12', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" +VALUES ('68eeaf5f10a24ed195c042dbc6e25df7', 'a9455e9f36bc4f33ba01412a64d87d6a', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" +VALUES ('7659e8a4b97144269775983f886ce25e', '3887934708c54f49bc5a566f77e2a759', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" +VALUES ('db7a1ca9b5d04a618f98e65c6c5555db', '6e3fbd29b226452984428883d6e7a8a2', '3956852574b6490ba6198f35b1c00aee'); +INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" +VALUES ('e6c27fd837244cefb43b2b2aca276f1f', '3887934708c54f49bc5a566f77e2a759', '2b7c729789de4c03a23fff8311b9eaf4'); +INSERT INTO "LEN"."BLOG_ARTICLE_CATEGORY" +VALUES ('fe7c34ffcf8c4af9922b4438e695c742', 'fd27b3ed7d344395b7766f596bf6fd06', '3956852574b6490ba6198f35b1c00aee'); -- ---------------------------- -- Table structure for BLOG_ARTICLE_TAG -- ---------------------------- DROP TABLE "LEN"."BLOG_ARTICLE_TAG"; -CREATE TABLE "LEN"."BLOG_ARTICLE_TAG" ( -"ARTICLE_ID" NVARCHAR2(32) NOT NULL , -"TAG_ID" NVARCHAR2(32) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."BLOG_ARTICLE_TAG" +( + "ARTICLE_ID" NVARCHAR2(32) NOT NULL, + "TAG_ID" NVARCHAR2(32) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- -- Records of BLOG_ARTICLE_TAG -- ---------------------------- -INSERT INTO "LEN"."BLOG_ARTICLE_TAG" VALUES ('3887934708c54f49bc5a566f77e2a759', 'eeba8137d0cc42249a8c1db9b2830e8a'); -INSERT INTO "LEN"."BLOG_ARTICLE_TAG" VALUES ('6e3fbd29b226452984428883d6e7a8a2', '0596836fc90540d1a497cd7bfae306e4'); -INSERT INTO "LEN"."BLOG_ARTICLE_TAG" VALUES ('6e3fbd29b226452984428883d6e7a8a2', '1f44f472a64f4ebe9782b2b868e2caf2'); -INSERT INTO "LEN"."BLOG_ARTICLE_TAG" VALUES ('89f445cbe3334a458a412691170d1e12', 'eeba8137d0cc42249a8c1db9b2830e8a'); -INSERT INTO "LEN"."BLOG_ARTICLE_TAG" VALUES ('a9455e9f36bc4f33ba01412a64d87d6a', 'eba6d766a88b4a108d4189c08f86e7a6'); -INSERT INTO "LEN"."BLOG_ARTICLE_TAG" VALUES ('fd27b3ed7d344395b7766f596bf6fd06', '0596836fc90540d1a497cd7bfae306e4'); -INSERT INTO "LEN"."BLOG_ARTICLE_TAG" VALUES ('fd27b3ed7d344395b7766f596bf6fd06', 'eba6d766a88b4a108d4189c08f86e7a6'); +INSERT INTO "LEN"."BLOG_ARTICLE_TAG" +VALUES ('3887934708c54f49bc5a566f77e2a759', 'eeba8137d0cc42249a8c1db9b2830e8a'); +INSERT INTO "LEN"."BLOG_ARTICLE_TAG" +VALUES ('6e3fbd29b226452984428883d6e7a8a2', '0596836fc90540d1a497cd7bfae306e4'); +INSERT INTO "LEN"."BLOG_ARTICLE_TAG" +VALUES ('6e3fbd29b226452984428883d6e7a8a2', '1f44f472a64f4ebe9782b2b868e2caf2'); +INSERT INTO "LEN"."BLOG_ARTICLE_TAG" +VALUES ('89f445cbe3334a458a412691170d1e12', 'eeba8137d0cc42249a8c1db9b2830e8a'); +INSERT INTO "LEN"."BLOG_ARTICLE_TAG" +VALUES ('a9455e9f36bc4f33ba01412a64d87d6a', 'eba6d766a88b4a108d4189c08f86e7a6'); +INSERT INTO "LEN"."BLOG_ARTICLE_TAG" +VALUES ('fd27b3ed7d344395b7766f596bf6fd06', '0596836fc90540d1a497cd7bfae306e4'); +INSERT INTO "LEN"."BLOG_ARTICLE_TAG" +VALUES ('fd27b3ed7d344395b7766f596bf6fd06', 'eba6d766a88b4a108d4189c08f86e7a6'); -- ---------------------------- -- Table structure for BLOG_CATEGORY -- ---------------------------- DROP TABLE "LEN"."BLOG_CATEGORY"; -CREATE TABLE "LEN"."BLOG_CATEGORY" ( -"ID" NVARCHAR2(32) NOT NULL , -"SEQUENCE" NUMBER(4) NOT NULL , -"CODE" NVARCHAR2(16) NOT NULL , -"NAME" NVARCHAR2(64) NOT NULL , -"PARENT_ID" NVARCHAR2(32) NOT NULL , -"CREATE_BY" NVARCHAR2(32) NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_DATE" DATE NULL -) -LOGGING +CREATE TABLE "LEN"."BLOG_CATEGORY" +( + "ID" NVARCHAR2(32) NOT NULL, + "SEQUENCE" NUMBER(4) NOT NULL, + "CODE" NVARCHAR2(16) NOT NULL, + "NAME" NVARCHAR2(64) NOT NULL, + "PARENT_ID" NVARCHAR2(32) NOT NULL, + "CREATE_BY" NVARCHAR2(32) NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_DATE" DATE NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON TABLE "LEN"."BLOG_CATEGORY" IS '类别表(顶部展示)'; -COMMENT ON COLUMN "LEN"."BLOG_CATEGORY"."CODE" IS '搜索code'; -COMMENT ON COLUMN "LEN"."BLOG_CATEGORY"."NAME" IS '类别名称'; -COMMENT ON COLUMN "LEN"."BLOG_CATEGORY"."PARENT_ID" IS '上层id(目前最多两次层)'; +COMMENT +ON TABLE "LEN"."BLOG_CATEGORY" IS '类别表(顶部展示)'; +COMMENT +ON COLUMN "LEN"."BLOG_CATEGORY"."CODE" IS '搜索code'; +COMMENT +ON COLUMN "LEN"."BLOG_CATEGORY"."NAME" IS '类别名称'; +COMMENT +ON COLUMN "LEN"."BLOG_CATEGORY"."PARENT_ID" IS '上层id(目前最多两次层)'; -- ---------------------------- -- Records of BLOG_CATEGORY -- ---------------------------- -INSERT INTO "LEN"."BLOG_CATEGORY" VALUES ('2b7c729789de4c03a23fff8311b9eaf4', '3', '架构', '架构', '0', 'zxm', null, TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); -INSERT INTO "LEN"."BLOG_CATEGORY" VALUES ('3956852574b6490ba6198f35b1c00aee', '1', 'Java', 'Java', '0', 'zxm', null, TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); -INSERT INTO "LEN"."BLOG_CATEGORY" VALUES ('3d4da698fc914ed0b956e86b58f93166', '2', 'Linux', 'Linux', '0', 'zxm', null, TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); -INSERT INTO "LEN"."BLOG_CATEGORY" VALUES ('7de23cc796ac4e6887ef1de6ca331bd8', '4', '其他', '其他', '0', 'zxm', null, TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "LEN"."BLOG_CATEGORY" +VALUES ('2b7c729789de4c03a23fff8311b9eaf4', '3', '架构', '架构', '0', 'zxm', null, + TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "LEN"."BLOG_CATEGORY" +VALUES ('3956852574b6490ba6198f35b1c00aee', '1', 'Java', 'Java', '0', 'zxm', null, + TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "LEN"."BLOG_CATEGORY" +VALUES ('3d4da698fc914ed0b956e86b58f93166', '2', 'Linux', 'Linux', '0', 'zxm', null, + TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "LEN"."BLOG_CATEGORY" +VALUES ('7de23cc796ac4e6887ef1de6ca331bd8', '4', '其他', '其他', '0', 'zxm', null, + TO_DATE('2018-10-12 22:30:18', 'YYYY-MM-DD HH24:MI:SS'), null); -- ---------------------------- -- Table structure for BLOG_TAG -- ---------------------------- DROP TABLE "LEN"."BLOG_TAG"; -CREATE TABLE "LEN"."BLOG_TAG" ( -"ID" NVARCHAR2(32) NOT NULL , -"TAG_CODE" NVARCHAR2(16) NOT NULL , -"TAG_NAME" NVARCHAR2(255) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."BLOG_TAG" +( + "ID" NVARCHAR2(32) NOT NULL, + "TAG_CODE" NVARCHAR2(16) NOT NULL, + "TAG_NAME" NVARCHAR2(255) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON COLUMN "LEN"."BLOG_TAG"."TAG_CODE" IS '标签code'; -COMMENT ON COLUMN "LEN"."BLOG_TAG"."TAG_NAME" IS '标签name'; +COMMENT +ON COLUMN "LEN"."BLOG_TAG"."TAG_CODE" IS '标签code'; +COMMENT +ON COLUMN "LEN"."BLOG_TAG"."TAG_NAME" IS '标签name'; -- ---------------------------- -- Records of BLOG_TAG -- ---------------------------- -INSERT INTO "LEN"."BLOG_TAG" VALUES ('0596836fc90540d1a497cd7bfae306e4', 'shiro', 'shiro'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('1f44f472a64f4ebe9782b2b868e2caf2', 'spring', 'spring'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('32297dbf97d44462bfa8b2f868704660', 'mybatis', 'mybatis'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('483af3b2db5743e99a9cde0f81559b43', 'spring cloud', 'spring cloud'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('4e4aa6cd7fea4a70a9e31083c1109090', 'sql', 'sql'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('56a9dc14db164453a0baa30d3193367c', '22', '22'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('75cae88b2f9f451392bfc06928a7c58d', 'centos7', 'centos7'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('7b470a9a121b42dc995e876fb532660e', 'linux', 'linux'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('7e467f2922a34a0b91afd908676f0ef5', 'spring security', 'spring security'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('8f41425ce8794fa8a0affa17beb13f11', 'redis', 'redis'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('d4e6b7774db343ff8575b1790a615aa2', 'git', 'git'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('da34c84e702341d68e6ea6d004508e67', 'vue', 'vue'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('e4ca0a14f2724de8bf71ad0ac8988c57', 'quartz', 'quartz'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('eba6d766a88b4a108d4189c08f86e7a6', 'spring boot', 'spring boot'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('eeba8137d0cc42249a8c1db9b2830e8a', 'java', 'java'); -INSERT INTO "LEN"."BLOG_TAG" VALUES ('f4ebc211eb3242739d6007e030c54ae5', 'oauth2.0', 'oauth2.0'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('0596836fc90540d1a497cd7bfae306e4', 'shiro', 'shiro'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('1f44f472a64f4ebe9782b2b868e2caf2', 'spring', 'spring'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('32297dbf97d44462bfa8b2f868704660', 'mybatis', 'mybatis'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('483af3b2db5743e99a9cde0f81559b43', 'spring cloud', 'spring cloud'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('4e4aa6cd7fea4a70a9e31083c1109090', 'sql', 'sql'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('56a9dc14db164453a0baa30d3193367c', '22', '22'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('75cae88b2f9f451392bfc06928a7c58d', 'centos7', 'centos7'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('7b470a9a121b42dc995e876fb532660e', 'linux', 'linux'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('7e467f2922a34a0b91afd908676f0ef5', 'spring security', 'spring security'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('8f41425ce8794fa8a0affa17beb13f11', 'redis', 'redis'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('d4e6b7774db343ff8575b1790a615aa2', 'git', 'git'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('da34c84e702341d68e6ea6d004508e67', 'vue', 'vue'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('e4ca0a14f2724de8bf71ad0ac8988c57', 'quartz', 'quartz'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('eba6d766a88b4a108d4189c08f86e7a6', 'spring boot', 'spring boot'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('eeba8137d0cc42249a8c1db9b2830e8a', 'java', 'java'); +INSERT INTO "LEN"."BLOG_TAG" +VALUES ('f4ebc211eb3242739d6007e030c54ae5', 'oauth2.0', 'oauth2.0'); -- ---------------------------- -- Table structure for SYS_DICT_ITEM -- ---------------------------- DROP TABLE "LEN"."SYS_DICT_ITEM"; -CREATE TABLE "LEN"."SYS_DICT_ITEM" ( -"ID" NVARCHAR2(32) NOT NULL , -"SEQUENCE" NUMBER(11) NOT NULL , -"VALUE" NVARCHAR2(100) NOT NULL , -"DESCRIPTION" NVARCHAR2(100) NOT NULL , -"TYPE_ID" NVARCHAR2(32) NOT NULL , -"CREATE_BY" NVARCHAR2(32) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"UPDATE_DATE" DATE NULL , -"DEL_FLAG" NCHAR(1) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_DICT_ITEM" +( + "ID" NVARCHAR2(32) NOT NULL, + "SEQUENCE" NUMBER(11) NOT NULL, + "VALUE" NVARCHAR2(100) NOT NULL, + "DESCRIPTION" NVARCHAR2(100) NOT NULL, + "TYPE_ID" NVARCHAR2(32) NOT NULL, + "CREATE_BY" NVARCHAR2(32) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "UPDATE_DATE" DATE NULL, + "DEL_FLAG" NCHAR(1) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON TABLE "LEN"."SYS_DICT_ITEM" IS '字典子表'; -COMMENT ON COLUMN "LEN"."SYS_DICT_ITEM"."SEQUENCE" IS '序号'; -COMMENT ON COLUMN "LEN"."SYS_DICT_ITEM"."VALUE" IS '值'; -COMMENT ON COLUMN "LEN"."SYS_DICT_ITEM"."DESCRIPTION" IS '描述'; -COMMENT ON COLUMN "LEN"."SYS_DICT_ITEM"."TYPE_ID" IS '字典id外检'; -COMMENT ON COLUMN "LEN"."SYS_DICT_ITEM"."DEL_FLAG" IS '删除标识'; +COMMENT +ON TABLE "LEN"."SYS_DICT_ITEM" IS '字典子表'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_ITEM"."SEQUENCE" IS '序号'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_ITEM"."VALUE" IS '值'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_ITEM"."DESCRIPTION" IS '描述'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_ITEM"."TYPE_ID" IS '字典id外检'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_ITEM"."DEL_FLAG" IS '删除标识'; -- ---------------------------- -- Records of SYS_DICT_ITEM @@ -921,25 +976,28 @@ COMMENT ON COLUMN "LEN"."SYS_DICT_ITEM"."DEL_FLAG" IS '删除标识'; -- Table structure for SYS_DICT_TYPE -- ---------------------------- DROP TABLE "LEN"."SYS_DICT_TYPE"; -CREATE TABLE "LEN"."SYS_DICT_TYPE" ( -"ID" NVARCHAR2(32) NOT NULL , -"CODE" NVARCHAR2(255) NOT NULL , -"DEL_FLAG" NCHAR(1) NOT NULL , -"TEXT" NVARCHAR2(255) NOT NULL , -"CREATE_BY" NVARCHAR2(32) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"UPDATE_DATE" DATE NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_DICT_TYPE" +( + "ID" NVARCHAR2(32) NOT NULL, + "CODE" NVARCHAR2(255) NOT NULL, + "DEL_FLAG" NCHAR(1) NOT NULL, + "TEXT" NVARCHAR2(255) NOT NULL, + "CREATE_BY" NVARCHAR2(32) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "UPDATE_DATE" DATE NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON TABLE "LEN"."SYS_DICT_TYPE" IS '字典主表'; -COMMENT ON COLUMN "LEN"."SYS_DICT_TYPE"."CODE" IS '编码'; -COMMENT ON COLUMN "LEN"."SYS_DICT_TYPE"."DEL_FLAG" IS '删除标识'; -COMMENT ON COLUMN "LEN"."SYS_DICT_TYPE"."TEXT" IS '字典名称'; +COMMENT +ON TABLE "LEN"."SYS_DICT_TYPE" IS '字典主表'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_TYPE"."CODE" IS '编码'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_TYPE"."DEL_FLAG" IS '删除标识'; +COMMENT +ON COLUMN "LEN"."SYS_DICT_TYPE"."TEXT" IS '字典名称'; -- ---------------------------- -- Records of SYS_DICT_TYPE @@ -949,52 +1007,63 @@ COMMENT ON COLUMN "LEN"."SYS_DICT_TYPE"."TEXT" IS '字典名称'; -- Table structure for SYS_JOB -- ---------------------------- DROP TABLE "LEN"."SYS_JOB"; -CREATE TABLE "LEN"."SYS_JOB" ( -"ID" NVARCHAR2(32) NOT NULL , -"JOB_NAME" NVARCHAR2(255) NOT NULL , -"CRON" NVARCHAR2(255) NOT NULL , -"STATUS" NUMBER(4) NOT NULL , -"CLAZZ_PATH" NVARCHAR2(255) NOT NULL , -"JOB_DESC" NVARCHAR2(255) NULL , -"CREATE_BY" NVARCHAR2(255) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_BY" NVARCHAR2(255) NULL , -"UPDATE_DATE" DATE NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_JOB" +( + "ID" NVARCHAR2(32) NOT NULL, + "JOB_NAME" NVARCHAR2(255) NOT NULL, + "CRON" NVARCHAR2(255) NOT NULL, + "STATUS" NUMBER(4) NOT NULL, + "CLAZZ_PATH" NVARCHAR2(255) NOT NULL, + "JOB_DESC" NVARCHAR2(255) NULL, + "CREATE_BY" NVARCHAR2(255) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_BY" NVARCHAR2(255) NULL, + "UPDATE_DATE" DATE NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON COLUMN "LEN"."SYS_JOB"."JOB_NAME" IS '描述任务'; -COMMENT ON COLUMN "LEN"."SYS_JOB"."CRON" IS '任务表达式'; -COMMENT ON COLUMN "LEN"."SYS_JOB"."STATUS" IS '状态:0未启动false/1启动true'; -COMMENT ON COLUMN "LEN"."SYS_JOB"."CLAZZ_PATH" IS '任务执行方法'; -COMMENT ON COLUMN "LEN"."SYS_JOB"."JOB_DESC" IS '其他描述'; +COMMENT +ON COLUMN "LEN"."SYS_JOB"."JOB_NAME" IS '描述任务'; +COMMENT +ON COLUMN "LEN"."SYS_JOB"."CRON" IS '任务表达式'; +COMMENT +ON COLUMN "LEN"."SYS_JOB"."STATUS" IS '状态:0未启动false/1启动true'; +COMMENT +ON COLUMN "LEN"."SYS_JOB"."CLAZZ_PATH" IS '任务执行方法'; +COMMENT +ON COLUMN "LEN"."SYS_JOB"."JOB_DESC" IS '其他描述'; -- ---------------------------- -- Records of SYS_JOB -- ---------------------------- -INSERT INTO "LEN"."SYS_JOB" VALUES ('55147ebdf2f611e7a4fe201a068c6482', '测试定时demo1', '0/5 * * * * ?', '0', 'com.len.core.quartz.CustomQuartz.JobDemo1', '测试定时demo1', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 12:30:00', 'YYYY-MM-DD HH24:MI:SS'), 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-07-14 13:29:55', 'YYYY-MM-DD HH24:MI:SS')); -INSERT INTO "LEN"."SYS_JOB" VALUES ('ab648a22f38d11e7aca0201a068c6482', '任务demo2', '0 0/1 * * * ?', '0', 'com.len.core.quartz.CustomQuartz.JobDemo2', '任务demo2', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:32:36', 'YYYY-MM-DD HH24:MI:SS'), 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-07-07 17:07:45', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "LEN"."SYS_JOB" +VALUES ('55147ebdf2f611e7a4fe201a068c6482', '测试定时demo1', '0/5 * * * * ?', '0', + 'com.len.core.quartz.CustomQuartz.JobDemo1', '测试定时demo1', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-01-07 12:30:00', 'YYYY-MM-DD HH24:MI:SS'), 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-07-14 13:29:55', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "LEN"."SYS_JOB" +VALUES ('ab648a22f38d11e7aca0201a068c6482', '任务demo2', '0 0/1 * * * ?', '0', + 'com.len.core.quartz.CustomQuartz.JobDemo2', '任务demo2', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-01-07 17:32:36', 'YYYY-MM-DD HH24:MI:SS'), 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-07-07 17:07:45', 'YYYY-MM-DD HH24:MI:SS')); -- ---------------------------- -- Table structure for SYS_LOG -- ---------------------------- DROP TABLE "LEN"."SYS_LOG"; -CREATE TABLE "LEN"."SYS_LOG" ( -"ID" NUMBER(11) NOT NULL , -"USER_NAME" NVARCHAR2(32) NULL , -"IP" NVARCHAR2(255) NULL , -"TYPE" NVARCHAR2(255) NULL , -"TEXT" NVARCHAR2(255) NULL , -"PARAM" NCLOB NULL , -"CREATE_TIME" DATE NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_LOG" +( + "ID" NUMBER(11) NOT NULL, + "USER_NAME" NVARCHAR2(32) NULL, + "IP" NVARCHAR2(255) NULL, + "TYPE" NVARCHAR2(255) NULL, + "TEXT" NVARCHAR2(255) NULL, + "PARAM" NCLOB NULL, + "CREATE_TIME" DATE NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- @@ -1005,299 +1074,553 @@ NOCACHE -- Table structure for SYS_MENU -- ---------------------------- DROP TABLE "LEN"."SYS_MENU"; -CREATE TABLE "LEN"."SYS_MENU" ( -"ID" NVARCHAR2(36) NOT NULL , -"NAME" NVARCHAR2(255) NOT NULL , -"P_ID" NVARCHAR2(36) NULL , -"URL" NVARCHAR2(255) NULL , -"ORDER_NUM" NUMBER(11) NULL , -"ICON" NVARCHAR2(255) NULL , -"CREATE_BY" NVARCHAR2(32) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"UPDATE_DATE" DATE NULL , -"PERMISSION" NVARCHAR2(255) NULL , -"MENU_TYPE" NUMBER(4) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_MENU" +( + "ID" NVARCHAR2(36) NOT NULL, + "NAME" NVARCHAR2(255) NOT NULL, + "P_ID" NVARCHAR2(36) NULL, + "URL" NVARCHAR2(255) NULL, + "ORDER_NUM" NUMBER(11) NULL, + "ICON" NVARCHAR2(255) NULL, + "CREATE_BY" NVARCHAR2(32) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "UPDATE_DATE" DATE NULL, + "PERMISSION" NVARCHAR2(255) NULL, + "MENU_TYPE" NUMBER(4) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON COLUMN "LEN"."SYS_MENU"."ORDER_NUM" IS '排序字段'; -COMMENT ON COLUMN "LEN"."SYS_MENU"."ICON" IS '图标'; -COMMENT ON COLUMN "LEN"."SYS_MENU"."PERMISSION" IS '权限'; -COMMENT ON COLUMN "LEN"."SYS_MENU"."MENU_TYPE" IS '1栏目2菜单'; +COMMENT +ON COLUMN "LEN"."SYS_MENU"."ORDER_NUM" IS '排序字段'; +COMMENT +ON COLUMN "LEN"."SYS_MENU"."ICON" IS '图标'; +COMMENT +ON COLUMN "LEN"."SYS_MENU"."PERMISSION" IS '权限'; +COMMENT +ON COLUMN "LEN"."SYS_MENU"."MENU_TYPE" IS '1栏目2菜单'; -- ---------------------------- -- Records of SYS_MENU -- ---------------------------- -INSERT INTO "LEN"."SYS_MENU" VALUES ('0e6c8d4cf09511e78a57201a068c6482', '删除', 'cff61424dfb311e7b555201a068c6482', null, '3', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:47:44', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'role:del', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('18bf8d5df09511e78a57201a068c6482', '新增', '3873ccc2dfda11e7b555201a068c6482', null, '1', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:48:01', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'nemu:add', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('28661300f9d411e7a009201a068c6482', '流程管理', 'e06da471f90311e780aa201a068c6482', '/act/goAct', '2', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-15 17:12:06', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'act:deployment', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('2b56410cf09411e78a57201a068c6482', '新增', 'cff61424dfb311e7b555201a068c6482', null, '1', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:41:23', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'role:add', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('3873ccc2dfda11e7b555201a068c6482', '菜单管理', 'cfda8029dfb311e7b555201a068c6482', 'menu/showMenu', '1', '', null, TO_DATE('2017-12-14 14:02:50', 'YYYY-MM-DD HH24:MI:SS'), 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-04-23 19:43:54', 'YYYY-MM-DD HH24:MI:SS'), 'menu:show', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('433089a6eb0111e782d5201a068c6482', '编辑', 'cfe54921dfb311e7b555201a068c6482', null, null, '1', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-27 20:27:11', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'user:update', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('4d603831fe9b11e7b472201a068c6482', '待办任务', 'e06da471f90311e780aa201a068c6482', '/leave/showTask', '5', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-21 19:07:43', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'task:show', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('5ae3d4e9f38e11e7aca0201a068c6482', '新增', 'e9a13e55f35911e7aca0201a068c6482', null, '1', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:37:30', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'job:add', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('6315968bf37111e7aca0201a068c6482', '停止', 'e9a13e55f35911e7aca0201a068c6482', null, '4', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 14:10:09', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'job:end', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('63da4415fc6211e7a781201a068c6482', '模型列表', 'e06da471f90311e780aa201a068c6482', '/act/goActModel', '3', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-18 23:15:17', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'act', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('6931fd22f09611e78a57201a068c6482', '删除', 'b441914cee0811e7a60d201a068c6482', null, '1', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:57:26', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'control:del', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('69f3f59cf38e11e7aca0201a068c6482', '编辑', 'e9a13e55f35911e7aca0201a068c6482', null, '2', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:37:56', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'job:update', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('6dc13c6eec5f11e7a472201a068c6482', '系统日志', 'a1ca6642ec5e11e7a472201a068c6482', 'log/showLog', '1', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-29 14:43:46', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2017-12-29 14:43:46', 'YYYY-MM-DD HH24:MI:SS'), 'log:show', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('788d8e34f38e11e7aca0201a068c6482', '删除', 'e9a13e55f35911e7aca0201a068c6482', null, '5', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:38:20', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'job:del', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('7967e098ee0611e7a60d201a068c6482', '接口api', 'a1ca6642ec5e11e7a472201a068c6482', 'swagger-ui.html', '2', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-31 16:42:04', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('873f30b0f38e11e7aca0201a068c6482', '查看', 'e9a13e55f35911e7aca0201a068c6482', null, '6', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:38:45', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'job:select', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('88b8e5d1f38911e7aca0201a068c6482', '查看', 'cff61424dfb311e7b555201a068c6482', null, '4', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:03:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'role:select', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('8a6c8bfa7f804eac810c5790cad9a62a', '删除', '3873ccc2dfda11e7b555201a068c6482', null, '2', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-06-20 21:55:55', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'menu:del', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('a1ca6642ec5e11e7a472201a068c6482', '系统监控', null, null, '2', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 10:56:14', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2018-01-03 10:56:14', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('b441914cee0811e7a60d201a068c6482', '系统监控', 'a1ca6642ec5e11e7a472201a068c6482', 'druid/index.html', '3', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-31 16:58:01', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('b7839f59fe8811e7b472201a068c6482', '请假流程', 'e06da471f90311e780aa201a068c6482', '/leave/showLeave', '4', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-21 16:54:40', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'leave:show', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('cfda8029dfb311e7b555201a068c6482', '系统管理', null, null, '1', '', null, TO_DATE('2018-01-03 10:56:13', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2018-01-03 10:56:13', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('cfe54921dfb311e7b555201a068c6482', '用户管理', 'cfda8029dfb311e7b555201a068c6482', '/user/showUser', '2', '', null, TO_DATE('2017-12-29 14:40:34', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2017-12-29 14:40:34', 'YYYY-MM-DD HH24:MI:SS'), 'user:show', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('cfe54921dfb311e7b555201a068c6483', '增加', 'cfe54921dfb311e7b555201a068c6482', null, '1', null, null, null, null, null, 'user:select', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('cff61424dfb311e7b555201a068c6482', '角色管理', 'cfda8029dfb311e7b555201a068c6482', '/role/showRole', '3', '', null, TO_DATE('2017-12-29 14:40:36', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2017-12-29 14:40:36', 'YYYY-MM-DD HH24:MI:SS'), 'role:show', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('e06da471f90311e780aa201a068c6482', '工作流程管理', null, null, '3', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-14 16:21:10', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('e3b11497eb9e11e7928d201a068c6482', '删除', 'cfe54921dfb311e7b555201a068c6482', null, null, null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-28 15:17:07', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2017-12-28 15:17:07', 'YYYY-MM-DD HH24:MI:SS'), 'user:del', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('e9a13e55f35911e7aca0201a068c6482', '定时任务', 'a1ca6642ec5e11e7a472201a068c6482', '/job/showJob', '3', '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 11:22:06', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'job:show', '0'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('ecda560cf36f11e7aca0201a068c6482', '启动', 'e9a13e55f35911e7aca0201a068c6482', null, '3', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 13:59:41', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'job:start', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('f23f6a6bf09511e78a57201a068c6482', '修改密码', 'cfe54921dfb311e7b555201a068c6482', null, '4', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:54:06', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'user:repass', '1'); -INSERT INTO "LEN"."SYS_MENU" VALUES ('ff015ea5f09411e78a57201a068c6482', '编辑', 'cff61424dfb311e7b555201a068c6482', null, '2', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:47:18', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'role:update', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('0e6c8d4cf09511e78a57201a068c6482', '删除', 'cff61424dfb311e7b555201a068c6482', null, '3', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:47:44', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'role:del', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('18bf8d5df09511e78a57201a068c6482', '新增', '3873ccc2dfda11e7b555201a068c6482', null, '1', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:48:01', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'nemu:add', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('28661300f9d411e7a009201a068c6482', '流程管理', 'e06da471f90311e780aa201a068c6482', '/act/goAct', '2', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-15 17:12:06', 'YYYY-MM-DD HH24:MI:SS'), null, + null, 'act:deployment', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('2b56410cf09411e78a57201a068c6482', '新增', 'cff61424dfb311e7b555201a068c6482', null, '1', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:41:23', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'role:add', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('3873ccc2dfda11e7b555201a068c6482', '菜单管理', 'cfda8029dfb311e7b555201a068c6482', 'menu/showMenu', '1', '', + null, TO_DATE('2017-12-14 14:02:50', 'YYYY-MM-DD HH24:MI:SS'), 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-04-23 19:43:54', 'YYYY-MM-DD HH24:MI:SS'), 'menu:show', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('433089a6eb0111e782d5201a068c6482', '编辑', 'cfe54921dfb311e7b555201a068c6482', null, null, '1', + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-27 20:27:11', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'user:update', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('4d603831fe9b11e7b472201a068c6482', '待办任务', 'e06da471f90311e780aa201a068c6482', '/leave/showTask', '5', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-21 19:07:43', 'YYYY-MM-DD HH24:MI:SS'), null, + null, 'task:show', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('5ae3d4e9f38e11e7aca0201a068c6482', '新增', 'e9a13e55f35911e7aca0201a068c6482', null, '1', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:37:30', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'job:add', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('6315968bf37111e7aca0201a068c6482', '停止', 'e9a13e55f35911e7aca0201a068c6482', null, '4', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 14:10:09', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'job:end', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('63da4415fc6211e7a781201a068c6482', '模型列表', 'e06da471f90311e780aa201a068c6482', '/act/goActModel', '3', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-18 23:15:17', 'YYYY-MM-DD HH24:MI:SS'), null, + null, 'act', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('6931fd22f09611e78a57201a068c6482', '删除', 'b441914cee0811e7a60d201a068c6482', null, '1', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:57:26', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'control:del', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('69f3f59cf38e11e7aca0201a068c6482', '编辑', 'e9a13e55f35911e7aca0201a068c6482', null, '2', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:37:56', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'job:update', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('6dc13c6eec5f11e7a472201a068c6482', '系统日志', 'a1ca6642ec5e11e7a472201a068c6482', 'log/showLog', '1', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-29 14:43:46', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2017-12-29 14:43:46', 'YYYY-MM-DD HH24:MI:SS'), 'log:show', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('788d8e34f38e11e7aca0201a068c6482', '删除', 'e9a13e55f35911e7aca0201a068c6482', null, '5', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:38:20', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'job:del', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('7967e098ee0611e7a60d201a068c6482', '接口api', 'a1ca6642ec5e11e7a472201a068c6482', 'swagger-ui.html', '2', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-31 16:42:04', 'YYYY-MM-DD HH24:MI:SS'), null, + null, null, '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('873f30b0f38e11e7aca0201a068c6482', '查看', 'e9a13e55f35911e7aca0201a068c6482', null, '6', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:38:45', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'job:select', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('88b8e5d1f38911e7aca0201a068c6482', '查看', 'cff61424dfb311e7b555201a068c6482', null, '4', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 17:03:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'role:select', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('8a6c8bfa7f804eac810c5790cad9a62a', '删除', '3873ccc2dfda11e7b555201a068c6482', null, '2', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-06-20 21:55:55', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'menu:del', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('a1ca6642ec5e11e7a472201a068c6482', '系统监控', null, null, '2', '', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-01-03 10:56:14', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2018-01-03 10:56:14', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('b441914cee0811e7a60d201a068c6482', '系统监控', 'a1ca6642ec5e11e7a472201a068c6482', 'druid/index.html', '3', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-31 16:58:01', 'YYYY-MM-DD HH24:MI:SS'), null, + null, null, '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('b7839f59fe8811e7b472201a068c6482', '请假流程', 'e06da471f90311e780aa201a068c6482', '/leave/showLeave', '4', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-21 16:54:40', 'YYYY-MM-DD HH24:MI:SS'), null, + null, 'leave:show', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('cfda8029dfb311e7b555201a068c6482', '系统管理', null, null, '1', '', null, + TO_DATE('2018-01-03 10:56:13', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2018-01-03 10:56:13', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('cfe54921dfb311e7b555201a068c6482', '用户管理', 'cfda8029dfb311e7b555201a068c6482', '/user/showUser', '2', + '', null, TO_DATE('2017-12-29 14:40:34', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2017-12-29 14:40:34', 'YYYY-MM-DD HH24:MI:SS'), 'user:show', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('cfe54921dfb311e7b555201a068c6483', '增加', 'cfe54921dfb311e7b555201a068c6482', null, '1', null, null, null, + null, null, 'user:select', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('cff61424dfb311e7b555201a068c6482', '角色管理', 'cfda8029dfb311e7b555201a068c6482', '/role/showRole', '3', + '', null, TO_DATE('2017-12-29 14:40:36', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2017-12-29 14:40:36', 'YYYY-MM-DD HH24:MI:SS'), 'role:show', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('e06da471f90311e780aa201a068c6482', '工作流程管理', null, null, '3', '', + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-14 16:21:10', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, + '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('e3b11497eb9e11e7928d201a068c6482', '删除', 'cfe54921dfb311e7b555201a068c6482', null, null, null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-28 15:17:07', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2017-12-28 15:17:07', 'YYYY-MM-DD HH24:MI:SS'), 'user:del', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('e9a13e55f35911e7aca0201a068c6482', '定时任务', 'a1ca6642ec5e11e7a472201a068c6482', '/job/showJob', '3', + '', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 11:22:06', 'YYYY-MM-DD HH24:MI:SS'), null, + null, 'job:show', '0'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('ecda560cf36f11e7aca0201a068c6482', '启动', 'e9a13e55f35911e7aca0201a068c6482', null, '3', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-07 13:59:41', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'job:start', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('f23f6a6bf09511e78a57201a068c6482', '修改密码', 'cfe54921dfb311e7b555201a068c6482', null, '4', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:54:06', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'user:repass', '1'); +INSERT INTO "LEN"."SYS_MENU" +VALUES ('ff015ea5f09411e78a57201a068c6482', '编辑', 'cff61424dfb311e7b555201a068c6482', null, '2', null, + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 22:47:18', 'YYYY-MM-DD HH24:MI:SS'), null, null, + 'role:update', '1'); -- ---------------------------- -- Table structure for SYS_ROLE -- ---------------------------- DROP TABLE "LEN"."SYS_ROLE"; -CREATE TABLE "LEN"."SYS_ROLE" ( -"ID" NVARCHAR2(32) NOT NULL , -"ROLE_NAME" NVARCHAR2(128) NULL , -"REMARK" NVARCHAR2(255) NULL , -"CREATE_BY" NVARCHAR2(32) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"UPDATE_DATE" DATE NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_ROLE" +( + "ID" NVARCHAR2(32) NOT NULL, + "ROLE_NAME" NVARCHAR2(128) NULL, + "REMARK" NVARCHAR2(255) NULL, + "CREATE_BY" NVARCHAR2(32) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "UPDATE_DATE" DATE NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- -- Records of SYS_ROLE -- ---------------------------- -INSERT INTO "LEN"."SYS_ROLE" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'hr', '人事', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-04-21 23:02:16', 'YYYY-MM-DD HH24:MI:SS'), null, null); -INSERT INTO "LEN"."SYS_ROLE" VALUES ('0ea934e5e55411e7b983201a068c6482', 'manage', '经理', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-20 15:04:44', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2018-01-02 11:41:43', 'YYYY-MM-DD HH24:MI:SS')); -INSERT INTO "LEN"."SYS_ROLE" VALUES ('2619a672e53811e7b983201a068c6482', 'admin', '管理员', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-20 11:44:57', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2018-01-02 11:38:37', 'YYYY-MM-DD HH24:MI:SS')); -INSERT INTO "LEN"."SYS_ROLE" VALUES ('4bb891d8caf84cc6ba27e515e80ac40d', 'blogAdmin', '博客管理员', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-10-01 10:21:10', 'YYYY-MM-DD HH24:MI:SS'), null, null); -INSERT INTO "LEN"."SYS_ROLE" VALUES ('dcb0f642fe9611e7b472201a068c6482', 'dev', '开发', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-21 18:35:56', 'YYYY-MM-DD HH24:MI:SS'), null, null); -INSERT INTO "LEN"."SYS_ROLE" VALUES ('e346e96368484c8fa7f217ce550a0186', 'DeputyManager', '副经理', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-06-14 23:21:36', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "LEN"."SYS_ROLE" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'hr', '人事', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-04-21 23:02:16', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "LEN"."SYS_ROLE" +VALUES ('0ea934e5e55411e7b983201a068c6482', 'manage', '经理', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2017-12-20 15:04:44', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2018-01-02 11:41:43', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "LEN"."SYS_ROLE" +VALUES ('2619a672e53811e7b983201a068c6482', 'admin', '管理员', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2017-12-20 11:44:57', 'YYYY-MM-DD HH24:MI:SS'), null, + TO_DATE('2018-01-02 11:38:37', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "LEN"."SYS_ROLE" +VALUES ('4bb891d8caf84cc6ba27e515e80ac40d', 'blogAdmin', '博客管理员', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-10-01 10:21:10', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "LEN"."SYS_ROLE" +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'dev', '开发', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-01-21 18:35:56', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "LEN"."SYS_ROLE" +VALUES ('e346e96368484c8fa7f217ce550a0186', 'DeputyManager', '副经理', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-06-14 23:21:36', 'YYYY-MM-DD HH24:MI:SS'), null, null); -- ---------------------------- -- Table structure for SYS_ROLE_MENU -- ---------------------------- DROP TABLE "LEN"."SYS_ROLE_MENU"; -CREATE TABLE "LEN"."SYS_ROLE_MENU" ( -"ROLE_ID" NVARCHAR2(32) NOT NULL , -"MENU_ID" NVARCHAR2(32) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_ROLE_MENU" +( + "ROLE_ID" NVARCHAR2(32) NOT NULL, + "MENU_ID" NVARCHAR2(32) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- -- Records of SYS_ROLE_MENU -- ---------------------------- -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6483'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e3b11497eb9e11e7928d201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('023366f3457511e8bcf1309c2315f9aa', 'f23f6a6bf09511e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('0ea934e5e55411e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '0e6c8d4cf09511e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '18bf8d5df09511e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '28661300f9d411e7a009201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '2b56410cf09411e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '3873ccc2dfda11e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '6315968bf37111e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '63da4415fc6211e7a781201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '7967e098ee0611e7a60d201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', '88b8e5d1f38911e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'b441914cee0811e7a60d201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6483'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'cff61424dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'e3b11497eb9e11e7928d201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'f23f6a6bf09511e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('2619a672e53811e7b983201a068c6482', 'ff015ea5f09411e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('35f7934d335e4641b7887e4b3b1885a5', '18bf8d5df09511e78a57201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('35f7934d335e4641b7887e4b3b1885a5', '3873ccc2dfda11e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('35f7934d335e4641b7887e4b3b1885a5', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('a56219ffeb7d11e7928d201a068c6482', '433089a6eb0111e782d5201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', '6315968bf37111e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e06da471f90311e780aa201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('dcb0f642fe9611e7b472201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('e346e96368484c8fa7f217ce550a0186', '4d603831fe9b11e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('e346e96368484c8fa7f217ce550a0186', 'b7839f59fe8811e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_MENU" VALUES ('e346e96368484c8fa7f217ce550a0186', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'cfe54921dfb311e7b555201a068c6483'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'e3b11497eb9e11e7928d201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('023366f3457511e8bcf1309c2315f9aa', 'f23f6a6bf09511e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('0ea934e5e55411e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '0e6c8d4cf09511e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '18bf8d5df09511e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '28661300f9d411e7a009201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '2b56410cf09411e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '3873ccc2dfda11e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '6315968bf37111e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '63da4415fc6211e7a781201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '6931fd22f09611e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '6dc13c6eec5f11e7a472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '7967e098ee0611e7a60d201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', '88b8e5d1f38911e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'b441914cee0811e7a60d201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'cfe54921dfb311e7b555201a068c6483'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'cff61424dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'e3b11497eb9e11e7928d201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'f23f6a6bf09511e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('2619a672e53811e7b983201a068c6482', 'ff015ea5f09411e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('35f7934d335e4641b7887e4b3b1885a5', '18bf8d5df09511e78a57201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('35f7934d335e4641b7887e4b3b1885a5', '3873ccc2dfda11e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('35f7934d335e4641b7887e4b3b1885a5', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('a56219ffeb7d11e7928d201a068c6482', '433089a6eb0111e782d5201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfda8029dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('a56219ffeb7d11e7928d201a068c6482', 'cfe54921dfb311e7b555201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', '5ae3d4e9f38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', '6315968bf37111e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', '69f3f59cf38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', '788d8e34f38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', '873f30b0f38e11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'a1ca6642ec5e11e7a472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e06da471f90311e780aa201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'e9a13e55f35911e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('dcb0f642fe9611e7b472201a068c6482', 'ecda560cf36f11e7aca0201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('e346e96368484c8fa7f217ce550a0186', '4d603831fe9b11e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('e346e96368484c8fa7f217ce550a0186', 'b7839f59fe8811e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_MENU" +VALUES ('e346e96368484c8fa7f217ce550a0186', 'e06da471f90311e780aa201a068c6482'); -- ---------------------------- -- Table structure for SYS_ROLE_USER -- ---------------------------- DROP TABLE "LEN"."SYS_ROLE_USER"; -CREATE TABLE "LEN"."SYS_ROLE_USER" ( -"USER_ID" NVARCHAR2(32) NOT NULL , -"ROLE_ID" NVARCHAR2(32) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_ROLE_USER" +( + "USER_ID" NVARCHAR2(32) NOT NULL, + "ROLE_ID" NVARCHAR2(32) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- -- Records of SYS_ROLE_USER -- ---------------------------- -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('1ec421975ffe45229b48d4b9d712ff4f', 'dcb0f642fe9611e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('2211fec3e17c11e795ed201a068c6482', '0ea934e5e55411e7b983201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('3c14c2f8316741e9aaeb29d78d03e958', 'dcb0f642fe9611e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('a4a743bffe9711e7b472201a068c6482', '4bb891d8caf84cc6ba27e515e80ac40d'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('a4a743bffe9711e7b472201a068c6482', 'dcb0f642fe9611e7b472201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '2619a672e53811e7b983201a068c6482'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '4bb891d8caf84cc6ba27e515e80ac40d'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('d555ffd6b51f4df7a18e2ef4eece1bed', 'e346e96368484c8fa7f217ce550a0186'); -INSERT INTO "LEN"."SYS_ROLE_USER" VALUES ('fb483b76457811e8bcf1309c2315f9aa', '023366f3457511e8bcf1309c2315f9aa'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('1ec421975ffe45229b48d4b9d712ff4f', 'dcb0f642fe9611e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('2211fec3e17c11e795ed201a068c6482', '0ea934e5e55411e7b983201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('3c14c2f8316741e9aaeb29d78d03e958', 'dcb0f642fe9611e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('a4a743bffe9711e7b472201a068c6482', '4bb891d8caf84cc6ba27e515e80ac40d'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('a4a743bffe9711e7b472201a068c6482', 'dcb0f642fe9611e7b472201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '2619a672e53811e7b983201a068c6482'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', '4bb891d8caf84cc6ba27e515e80ac40d'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('d555ffd6b51f4df7a18e2ef4eece1bed', 'e346e96368484c8fa7f217ce550a0186'); +INSERT INTO "LEN"."SYS_ROLE_USER" +VALUES ('fb483b76457811e8bcf1309c2315f9aa', '023366f3457511e8bcf1309c2315f9aa'); -- ---------------------------- -- Table structure for SYS_USER -- ---------------------------- DROP TABLE "LEN"."SYS_USER"; -CREATE TABLE "LEN"."SYS_USER" ( -"ID" NVARCHAR2(36) NOT NULL , -"USERNAME" NVARCHAR2(64) NOT NULL , -"PASSWORD" NVARCHAR2(128) NOT NULL , -"AGE" NUMBER(11) NULL , -"EMAIL" NVARCHAR2(128) NULL , -"PHOTO" NVARCHAR2(255) NULL , -"REAL_NAME" NVARCHAR2(18) NULL , -"CREATE_BY" NVARCHAR2(32) NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"CREATE_DATE" DATE NULL , -"UPDATE_DATE" DATE NULL , -"DEL_FLAG" NUMBER(4) NOT NULL -) -LOGGING +CREATE TABLE "LEN"."SYS_USER" +( + "ID" NVARCHAR2(36) NOT NULL, + "USERNAME" NVARCHAR2(64) NOT NULL, + "PASSWORD" NVARCHAR2(128) NOT NULL, + "AGE" NUMBER(11) NULL, + "EMAIL" NVARCHAR2(128) NULL, + "PHOTO" NVARCHAR2(255) NULL, + "REAL_NAME" NVARCHAR2(18) NULL, + "CREATE_BY" NVARCHAR2(32) NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "CREATE_DATE" DATE NULL, + "UPDATE_DATE" DATE NULL, + "DEL_FLAG" NUMBER(4) NOT NULL +) LOGGING NOCOMPRESS NOCACHE - ; -COMMENT ON COLUMN "LEN"."SYS_USER"."DEL_FLAG" IS '0可用1封禁'; +COMMENT +ON COLUMN "LEN"."SYS_USER"."DEL_FLAG" IS '0可用1封禁'; -- ---------------------------- -- Records of SYS_USER -- ---------------------------- -INSERT INTO "LEN"."SYS_USER" VALUES ('1ec421975ffe45229b48d4b9d712ff4f', '33333', '533add1dc96c02469d50ca0ffdcb493a', '26', null, null, '33', 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-08-20 23:52:47', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-12-11 22:57:16', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('2211fec3e17c11e795ed201a068c6482', 'tom', '11ac200620f90acd1fdae53716fd3de2', '41', 'lenospmiller@gmail.com', 'bd214483-7c5e-49d6-862d-de97e9de50b5.jpeg', 'Tom Curise', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-03 15:49:48', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-06-19 21:15:49', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('2bf2d2db774247b99f27efb1dda29c34', '12', '123456', '10', '2345', null, '123', null, null, null, null, '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('3c14c2f8316741e9aaeb29d78d03e958', '22222', '2b8aae82f069cc838dfe8afc945f8045', '222', null, null, '222', 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-08-19 22:00:27', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('a4a743bffe9711e7b472201a068c6482', 'zxm', 'f8880ebbdbc37a936245657fa9084198', '25', '1544040976@qq.com', '662d5a3b-56aa-4bbb-bd47-194e24db1d60.jpeg', 'zxm', 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-21 18:41:32', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-17 15:09:41', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('acfc0e9232f54732a5d9ffe9071bf572', 'admin', 'e0b141de1c8091be350d3fc80de66528', '24', null, '2d4c37c3-c106-4288-9c0d-e7fe1b8adc72.jpeg', '管理员', null, 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2017-12-20 16:34:06', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-10-01 10:21:19', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('b50d049022124b04b73605caae5ecb3b', '12', '123456', '10', '2345', null, '123', null, null, null, null, '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('c7f1a7d7018311e8a1a2201a068c6482', '666', 'c6953f608430df414ea52e8c01b81a45', '24', null, null, '666', 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-25 11:56:54', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-06-14 23:18:51', 'YYYY-MM-DD HH24:MI:SS'), '1'); -INSERT INTO "LEN"."SYS_USER" VALUES ('d555ffd6b51f4df7a18e2ef4eece1bed', 'wangwu', 'b162011c014942eac61c478a7bfc386d', '25', null, null, '王五', 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-06-14 23:21:17', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-06-19 23:09:12', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('fb483b76457811e8bcf1309c2315f9aa', 'lisi', 'f497935e5f47325399d595ef31b25e47', '20', null, null, '李四', 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-04-21 23:30:43', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-06-14 23:21:50', 'YYYY-MM-DD HH24:MI:SS'), '0'); -INSERT INTO "LEN"."SYS_USER" VALUES ('fbb427b4e2764260a337f074744bc55a', '12', '123456', '10', '2345', null, '123', null, null, null, null, '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('1ec421975ffe45229b48d4b9d712ff4f', '33333', '533add1dc96c02469d50ca0ffdcb493a', '26', null, null, '33', + 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-08-20 23:52:47', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-12-11 22:57:16', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('2211fec3e17c11e795ed201a068c6482', 'tom', '11ac200620f90acd1fdae53716fd3de2', '41', 'lenospmiller@gmail.com', + 'bd214483-7c5e-49d6-862d-de97e9de50b5.jpeg', 'Tom Curise', null, 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-01-03 15:49:48', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-06-19 21:15:49', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('2bf2d2db774247b99f27efb1dda29c34', '12', '123456', '10', '2345', null, '123', null, null, null, null, '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('3c14c2f8316741e9aaeb29d78d03e958', '22222', '2b8aae82f069cc838dfe8afc945f8045', '222', null, null, '222', + 'acfc0e9232f54732a5d9ffe9071bf572', null, TO_DATE('2018-08-19 22:00:27', 'YYYY-MM-DD HH24:MI:SS'), null, '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('a4a743bffe9711e7b472201a068c6482', 'zxm', 'f8880ebbdbc37a936245657fa9084198', '25', '1544040976@qq.com', + '662d5a3b-56aa-4bbb-bd47-194e24db1d60.jpeg', 'zxm', 'acfc0e9232f54732a5d9ffe9071bf572', + 'acfc0e9232f54732a5d9ffe9071bf572', TO_DATE('2018-01-21 18:41:32', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-17 15:09:41', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('acfc0e9232f54732a5d9ffe9071bf572', 'admin', 'e0b141de1c8091be350d3fc80de66528', '24', null, + '2d4c37c3-c106-4288-9c0d-e7fe1b8adc72.jpeg', '管理员', null, 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2017-12-20 16:34:06', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-10-01 10:21:19', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('b50d049022124b04b73605caae5ecb3b', '12', '123456', '10', '2345', null, '123', null, null, null, null, '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('c7f1a7d7018311e8a1a2201a068c6482', '666', 'c6953f608430df414ea52e8c01b81a45', '24', null, null, '666', + 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-01-25 11:56:54', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-06-14 23:18:51', 'YYYY-MM-DD HH24:MI:SS'), '1'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('d555ffd6b51f4df7a18e2ef4eece1bed', 'wangwu', 'b162011c014942eac61c478a7bfc386d', '25', null, null, '王五', + 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-06-14 23:21:17', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-06-19 23:09:12', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('fb483b76457811e8bcf1309c2315f9aa', 'lisi', 'f497935e5f47325399d595ef31b25e47', '20', null, null, '李四', + 'acfc0e9232f54732a5d9ffe9071bf572', 'acfc0e9232f54732a5d9ffe9071bf572', + TO_DATE('2018-04-21 23:30:43', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-06-14 23:21:50', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "LEN"."SYS_USER" +VALUES ('fbb427b4e2764260a337f074744bc55a', '12', '123456', '10', '2345', null, '123', null, null, null, null, '0'); -- ---------------------------- -- Table structure for USER_LEAVE -- ---------------------------- DROP TABLE "LEN"."USER_LEAVE"; -CREATE TABLE "LEN"."USER_LEAVE" ( -"ID" NVARCHAR2(32) NOT NULL , -"USER_ID" NVARCHAR2(32) NOT NULL , -"USER_NAME" NVARCHAR2(18) NULL , -"BEGIN_TIME" DATE NULL , -"END_TIME" DATE NULL , -"REASON" NVARCHAR2(255) NULL , -"DAYS" NUMBER(11) NULL , -"PROCESS_INSTANCE_ID" NVARCHAR2(32) NULL , -"STATUS" NVARCHAR2(64) NULL , -"CREATE_DATE" DATE NULL , -"CREATE_BY" NVARCHAR2(32) NULL , -"UPDATE_DATE" DATE NULL , -"UPDATE_BY" NVARCHAR2(32) NULL , -"TASK_NAME" NVARCHAR2(255) NULL , -"URLPATH" NVARCHAR2(255) NULL , -"SUBMITTIMES" NUMBER(11) NULL -) -LOGGING +CREATE TABLE "LEN"."USER_LEAVE" +( + "ID" NVARCHAR2(32) NOT NULL, + "USER_ID" NVARCHAR2(32) NOT NULL, + "USER_NAME" NVARCHAR2(18) NULL, + "BEGIN_TIME" DATE NULL, + "END_TIME" DATE NULL, + "REASON" NVARCHAR2(255) NULL, + "DAYS" NUMBER(11) NULL, + "PROCESS_INSTANCE_ID" NVARCHAR2(32) NULL, + "STATUS" NVARCHAR2(64) NULL, + "CREATE_DATE" DATE NULL, + "CREATE_BY" NVARCHAR2(32) NULL, + "UPDATE_DATE" DATE NULL, + "UPDATE_BY" NVARCHAR2(32) NULL, + "TASK_NAME" NVARCHAR2(255) NULL, + "URLPATH" NVARCHAR2(255) NULL, + "SUBMITTIMES" NUMBER(11) NULL +) LOGGING NOCOMPRESS NOCACHE - ; -- ---------------------------- -- Records of USER_LEAVE -- ---------------------------- -INSERT INTO "LEN"."USER_LEAVE" VALUES ('25e601c9ba9a43d38dcee96ef7ec2066', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假11111122', '3', '2617', null, null, null, null, null, null, '/leave/readOnlyLeave/25e601c9ba9a43d38dcee96ef7ec2066', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('34ef7e4ff58044c6b6ed3d303968e2d4', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假1234', '3', '2641', null, null, null, null, null, null, '/leave/readOnlyLeave/34ef7e4ff58044c6b6ed3d303968e2d4', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('4d5cc5e5bd5642569a4b0b9509597f11', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假1111', '3', '2678', null, null, null, null, null, null, '/leave/readOnlyLeave/4d5cc5e5bd5642569a4b0b9509597f11', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('5da09b45283b4720b0026e41a318df56', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假11111', '3', '2589', null, null, null, null, null, null, '/leave/readOnlyLeave/5da09b45283b4720b0026e41a318df56', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('870c3774dacb4640935824398bad686a', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '123', '3', '2665', null, null, null, null, null, null, '/leave/readOnlyLeave/870c3774dacb4640935824398bad686a', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('89f445cbe3334a458a412691170d1e11', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2018-07-19 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-07-25 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '2222', '3', '277535', null, null, null, null, null, null, '/leave/readOnlyLeave/89f445cbe3334a458a412691170d1e11', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('96d24b30e2c04c3b8da030dd2c066cc9', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '轻机枪111', '3', '2576', null, null, null, null, null, null, '/leave/readOnlyLeave/96d24b30e2c04c3b8da030dd2c066cc9', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('b43d3d08bbb445ec9ba9ce10eac1985d', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', TO_DATE('2019-02-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '111', '3', '302501', null, null, null, null, null, null, '/leave/readOnlyLeave/b43d3d08bbb445ec9ba9ce10eac1985d', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('be7055719798461d93c3aa635c309bdc', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2018-07-14 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2018-07-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '111', '3', '277505', null, null, null, null, null, null, '/leave/readOnlyLeave/be7055719798461d93c3aa635c309bdc', '1'); -INSERT INTO "LEN"."USER_LEAVE" VALUES ('caeae3400ee14e96a3b7c27359258111', 'a4a743bffe9711e7b472201a068c6482', 'zxm', TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-02-19 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '阿斯蒂芬', '3', '2691', null, null, null, null, null, null, '/leave/readOnlyLeave/caeae3400ee14e96a3b7c27359258111', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('25e601c9ba9a43d38dcee96ef7ec2066', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假11111122', '3', '2617', null, null, null, null, + null, null, '/leave/readOnlyLeave/25e601c9ba9a43d38dcee96ef7ec2066', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('34ef7e4ff58044c6b6ed3d303968e2d4', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假1234', '3', '2641', null, null, null, null, null, + null, '/leave/readOnlyLeave/34ef7e4ff58044c6b6ed3d303968e2d4', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('4d5cc5e5bd5642569a4b0b9509597f11', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假1111', '3', '2678', null, null, null, null, null, + null, '/leave/readOnlyLeave/4d5cc5e5bd5642569a4b0b9509597f11', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('5da09b45283b4720b0026e41a318df56', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '请假11111', '3', '2589', null, null, null, null, null, + null, '/leave/readOnlyLeave/5da09b45283b4720b0026e41a318df56', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('870c3774dacb4640935824398bad686a', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '123', '3', '2665', null, null, null, null, null, null, + '/leave/readOnlyLeave/870c3774dacb4640935824398bad686a', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('89f445cbe3334a458a412691170d1e11', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2018-07-19 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-07-25 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '2222', '3', '277535', null, null, null, null, null, + null, '/leave/readOnlyLeave/89f445cbe3334a458a412691170d1e11', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('96d24b30e2c04c3b8da030dd2c066cc9', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '轻机枪111', '3', '2576', null, null, null, null, null, + null, '/leave/readOnlyLeave/96d24b30e2c04c3b8da030dd2c066cc9', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('b43d3d08bbb445ec9ba9ce10eac1985d', 'acfc0e9232f54732a5d9ffe9071bf572', 'admin', + TO_DATE('2019-02-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '111', '3', '302501', null, null, null, null, null, + null, '/leave/readOnlyLeave/b43d3d08bbb445ec9ba9ce10eac1985d', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('be7055719798461d93c3aa635c309bdc', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2018-07-14 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2018-07-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '111', '3', '277505', null, null, null, null, null, + null, '/leave/readOnlyLeave/be7055719798461d93c3aa635c309bdc', '1'); +INSERT INTO "LEN"."USER_LEAVE" +VALUES ('caeae3400ee14e96a3b7c27359258111', 'a4a743bffe9711e7b472201a068c6482', 'zxm', + TO_DATE('2019-02-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), + TO_DATE('2019-02-19 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '阿斯蒂芬', '3', '2691', null, null, null, null, null, + null, '/leave/readOnlyLeave/caeae3400ee14e96a3b7c27359258111', '1'); -- ---------------------------- -- Sequence structure for ACT_EVT_LOG_SEQ -- ---------------------------- DROP SEQUENCE "LEN"."ACT_EVT_LOG_SEQ"; CREATE SEQUENCE "LEN"."ACT_EVT_LOG_SEQ" - INCREMENT BY 1 - MINVALUE 1 - MAXVALUE 9999999999999999999999999999 - START WITH 1 - CACHE 20; + INCREMENT BY 1 + MINVALUE 1 + MAXVALUE 9999999999999999999999999999 + START WITH 1 CACHE 20; -- ---------------------------- -- Indexes structure for table ACT_ASSIGNEE @@ -1306,14 +1629,18 @@ CREATE SEQUENCE "LEN"."ACT_EVT_LOG_SEQ" -- ---------------------------- -- Checks structure for table ACT_ASSIGNEE -- ---------------------------- -ALTER TABLE "LEN"."ACT_ASSIGNEE" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."ACT_ASSIGNEE" ADD CHECK ("SID" IS NOT NULL); -ALTER TABLE "LEN"."ACT_ASSIGNEE" ADD CHECK ("ASSIGNEE_TYPE" IS NOT NULL); +ALTER TABLE "LEN"."ACT_ASSIGNEE" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."ACT_ASSIGNEE" + ADD CHECK ("SID" IS NOT NULL); +ALTER TABLE "LEN"."ACT_ASSIGNEE" + ADD CHECK ("ASSIGNEE_TYPE" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_ASSIGNEE -- ---------------------------- -ALTER TABLE "LEN"."ACT_ASSIGNEE" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."ACT_ASSIGNEE" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table ACT_EVT_LOG @@ -1322,30 +1649,33 @@ ALTER TABLE "LEN"."ACT_ASSIGNEE" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table ACT_EVT_LOG -- ---------------------------- -ALTER TABLE "LEN"."ACT_EVT_LOG" ADD CHECK ("TIME_STAMP_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_EVT_LOG" + ADD CHECK ("TIME_STAMP_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_EVT_LOG -- ---------------------------- -ALTER TABLE "LEN"."ACT_EVT_LOG" ADD PRIMARY KEY ("LOG_NR_"); +ALTER TABLE "LEN"."ACT_EVT_LOG" + ADD PRIMARY KEY ("LOG_NR_"); -- ---------------------------- -- Indexes structure for table ACT_GE_BYTEARRAY -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_BYTEAR_DEPL" -ON "LEN"."ACT_GE_BYTEARRAY" ("DEPLOYMENT_ID_" ASC) -LOGGING + ON "LEN"."ACT_GE_BYTEARRAY" ("DEPLOYMENT_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_GE_BYTEARRAY -- ---------------------------- -ALTER TABLE "LEN"."ACT_GE_BYTEARRAY" ADD CHECK (GENERATED_ IN (1,0)); +ALTER TABLE "LEN"."ACT_GE_BYTEARRAY" + ADD CHECK (GENERATED_ IN (1, 0)); -- ---------------------------- -- Primary Key structure for table ACT_GE_BYTEARRAY -- ---------------------------- -ALTER TABLE "LEN"."ACT_GE_BYTEARRAY" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_GE_BYTEARRAY" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_GE_PROPERTY @@ -1354,43 +1684,48 @@ ALTER TABLE "LEN"."ACT_GE_BYTEARRAY" ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Primary Key structure for table ACT_GE_PROPERTY -- ---------------------------- -ALTER TABLE "LEN"."ACT_GE_PROPERTY" ADD PRIMARY KEY ("NAME_"); +ALTER TABLE "LEN"."ACT_GE_PROPERTY" + ADD PRIMARY KEY ("NAME_"); -- ---------------------------- -- Indexes structure for table ACT_HI_ACTINST -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_HI_ACT_INST_END" -ON "LEN"."ACT_HI_ACTINST" ("END_TIME_" ASC) -LOGGING + ON "LEN"."ACT_HI_ACTINST" ("END_TIME_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_ACT_INST_EXEC" -ON "LEN"."ACT_HI_ACTINST" ("EXECUTION_ID_" ASC, "ACT_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_ACTINST" ("EXECUTION_ID_" ASC, "ACT_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_ACT_INST_PROCINST" -ON "LEN"."ACT_HI_ACTINST" ("PROC_INST_ID_" ASC, "ACT_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_ACTINST" ("PROC_INST_ID_" ASC, "ACT_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_ACT_INST_START" -ON "LEN"."ACT_HI_ACTINST" ("START_TIME_" ASC) -LOGGING + ON "LEN"."ACT_HI_ACTINST" ("START_TIME_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_HI_ACTINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD CHECK ("PROC_DEF_ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD CHECK ("PROC_INST_ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD CHECK ("EXECUTION_ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD CHECK ("ACT_ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD CHECK ("ACT_TYPE_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD CHECK ("START_TIME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD CHECK ("PROC_DEF_ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD CHECK ("PROC_INST_ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD CHECK ("EXECUTION_ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD CHECK ("ACT_ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD CHECK ("ACT_TYPE_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD CHECK ("START_TIME_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_HI_ACTINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_ACTINST" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_HI_ATTACHMENT @@ -1399,12 +1734,14 @@ ALTER TABLE "LEN"."ACT_HI_ACTINST" ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Checks structure for table ACT_HI_ATTACHMENT -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_ATTACHMENT" ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_ATTACHMENT" + ADD CHECK ("ID_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_HI_ATTACHMENT -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_ATTACHMENT" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_ATTACHMENT" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_HI_COMMENT @@ -1413,147 +1750,154 @@ ALTER TABLE "LEN"."ACT_HI_ATTACHMENT" ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Checks structure for table ACT_HI_COMMENT -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_COMMENT" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_COMMENT" ADD CHECK ("TIME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_COMMENT" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_COMMENT" + ADD CHECK ("TIME_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_HI_COMMENT -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_COMMENT" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_COMMENT" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_HI_DETAIL -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_HI_DETAIL_ACT_INST" -ON "LEN"."ACT_HI_DETAIL" ("ACT_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_DETAIL" ("ACT_INST_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_DETAIL_NAME" -ON "LEN"."ACT_HI_DETAIL" ("NAME_" ASC) -LOGGING + ON "LEN"."ACT_HI_DETAIL" ("NAME_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_DETAIL_PROC_INST" -ON "LEN"."ACT_HI_DETAIL" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_DETAIL" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_DETAIL_TASK_ID" -ON "LEN"."ACT_HI_DETAIL" ("TASK_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_DETAIL" ("TASK_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_DETAIL_TIME" -ON "LEN"."ACT_HI_DETAIL" ("TIME_" ASC) -LOGGING + ON "LEN"."ACT_HI_DETAIL" ("TIME_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_HI_DETAIL -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_DETAIL" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_DETAIL" ADD CHECK ("TYPE_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_DETAIL" ADD CHECK ("NAME_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_DETAIL" ADD CHECK ("TIME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_DETAIL" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_DETAIL" + ADD CHECK ("TYPE_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_DETAIL" + ADD CHECK ("NAME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_DETAIL" + ADD CHECK ("TIME_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_HI_DETAIL -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_DETAIL" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_DETAIL" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_HI_IDENTITYLINK -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_HI_IDENT_LNK_PROCINST" -ON "LEN"."ACT_HI_IDENTITYLINK" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_IDENTITYLINK" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_IDENT_LNK_TASK" -ON "LEN"."ACT_HI_IDENTITYLINK" ("TASK_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_IDENTITYLINK" ("TASK_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_IDENT_LNK_USER" -ON "LEN"."ACT_HI_IDENTITYLINK" ("USER_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_IDENTITYLINK" ("USER_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Primary Key structure for table ACT_HI_IDENTITYLINK -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_IDENTITYLINK" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_IDENTITYLINK" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_HI_PROCINST -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_HI_PRO_INST_END" -ON "LEN"."ACT_HI_PROCINST" ("END_TIME_" ASC) -LOGGING + ON "LEN"."ACT_HI_PROCINST" ("END_TIME_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_PRO_I_BUSKEY" -ON "LEN"."ACT_HI_PROCINST" ("BUSINESS_KEY_" ASC) -LOGGING + ON "LEN"."ACT_HI_PROCINST" ("BUSINESS_KEY_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Uniques structure for table ACT_HI_PROCINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_PROCINST" ADD UNIQUE ("PROC_INST_ID_"); +ALTER TABLE "LEN"."ACT_HI_PROCINST" + ADD UNIQUE ("PROC_INST_ID_"); -- ---------------------------- -- Checks structure for table ACT_HI_PROCINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_PROCINST" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_PROCINST" ADD CHECK ("PROC_INST_ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_PROCINST" ADD CHECK ("PROC_DEF_ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_PROCINST" ADD CHECK ("START_TIME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_PROCINST" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_PROCINST" + ADD CHECK ("PROC_INST_ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_PROCINST" + ADD CHECK ("PROC_DEF_ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_PROCINST" + ADD CHECK ("START_TIME_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_HI_PROCINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_PROCINST" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_PROCINST" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_HI_TASKINST -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_HI_TASK_INST_PROCINST" -ON "LEN"."ACT_HI_TASKINST" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_TASKINST" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_HI_TASKINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_TASKINST" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_TASKINST" ADD CHECK ("START_TIME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_TASKINST" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_TASKINST" + ADD CHECK ("START_TIME_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_HI_TASKINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_TASKINST" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_TASKINST" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_HI_VARINST -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_HI_PROCVAR_NAME_TYPE" -ON "LEN"."ACT_HI_VARINST" ("NAME_" ASC, "VAR_TYPE_" ASC) -LOGGING + ON "LEN"."ACT_HI_VARINST" ("NAME_" ASC, "VAR_TYPE_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_PROCVAR_PROC_INST" -ON "LEN"."ACT_HI_VARINST" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_VARINST" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_HI_PROCVAR_TASK_ID" -ON "LEN"."ACT_HI_VARINST" ("TASK_ID_" ASC) -LOGGING + ON "LEN"."ACT_HI_VARINST" ("TASK_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_HI_VARINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_VARINST" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_HI_VARINST" ADD CHECK ("NAME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_VARINST" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_HI_VARINST" + ADD CHECK ("NAME_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_HI_VARINST -- ---------------------------- -ALTER TABLE "LEN"."ACT_HI_VARINST" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_HI_VARINST" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_ID_GROUP @@ -1562,7 +1906,8 @@ ALTER TABLE "LEN"."ACT_HI_VARINST" ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Primary Key structure for table ACT_ID_GROUP -- ---------------------------- -ALTER TABLE "LEN"."ACT_ID_GROUP" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_ID_GROUP" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_ID_INFO @@ -1571,24 +1916,24 @@ ALTER TABLE "LEN"."ACT_ID_GROUP" ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Primary Key structure for table ACT_ID_INFO -- ---------------------------- -ALTER TABLE "LEN"."ACT_ID_INFO" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_ID_INFO" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_ID_MEMBERSHIP -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_MEMB_GROUP" -ON "LEN"."ACT_ID_MEMBERSHIP" ("GROUP_ID_" ASC) -LOGGING + ON "LEN"."ACT_ID_MEMBERSHIP" ("GROUP_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_MEMB_USER" -ON "LEN"."ACT_ID_MEMBERSHIP" ("USER_ID_" ASC) -LOGGING + ON "LEN"."ACT_ID_MEMBERSHIP" ("USER_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Primary Key structure for table ACT_ID_MEMBERSHIP -- ---------------------------- -ALTER TABLE "LEN"."ACT_ID_MEMBERSHIP" ADD PRIMARY KEY ("USER_ID_", "GROUP_ID_"); +ALTER TABLE "LEN"."ACT_ID_MEMBERSHIP" + ADD PRIMARY KEY ("USER_ID_", "GROUP_ID_"); -- ---------------------------- -- Indexes structure for table ACT_ID_USER @@ -1597,35 +1942,38 @@ ALTER TABLE "LEN"."ACT_ID_MEMBERSHIP" ADD PRIMARY KEY ("USER_ID_", "GROUP_ID_"); -- ---------------------------- -- Primary Key structure for table ACT_ID_USER -- ---------------------------- -ALTER TABLE "LEN"."ACT_ID_USER" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_ID_USER" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_PROCDEF_INFO -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_PROCDEF_INFO_JSON" -ON "LEN"."ACT_PROCDEF_INFO" ("INFO_JSON_ID_" ASC) -LOGGING + ON "LEN"."ACT_PROCDEF_INFO" ("INFO_JSON_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_PROCDEF_INFO_PROC" -ON "LEN"."ACT_PROCDEF_INFO" ("PROC_DEF_ID_" ASC) -LOGGING + ON "LEN"."ACT_PROCDEF_INFO" ("PROC_DEF_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Uniques structure for table ACT_PROCDEF_INFO -- ---------------------------- -ALTER TABLE "LEN"."ACT_PROCDEF_INFO" ADD UNIQUE ("PROC_DEF_ID_"); +ALTER TABLE "LEN"."ACT_PROCDEF_INFO" + ADD UNIQUE ("PROC_DEF_ID_"); -- ---------------------------- -- Checks structure for table ACT_PROCDEF_INFO -- ---------------------------- -ALTER TABLE "LEN"."ACT_PROCDEF_INFO" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_PROCDEF_INFO" ADD CHECK ("PROC_DEF_ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_PROCDEF_INFO" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_PROCDEF_INFO" + ADD CHECK ("PROC_DEF_ID_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_PROCDEF_INFO -- ---------------------------- -ALTER TABLE "LEN"."ACT_PROCDEF_INFO" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_PROCDEF_INFO" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RE_DEPLOYMENT @@ -1634,33 +1982,33 @@ ALTER TABLE "LEN"."ACT_PROCDEF_INFO" ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Primary Key structure for table ACT_RE_DEPLOYMENT -- ---------------------------- -ALTER TABLE "LEN"."ACT_RE_DEPLOYMENT" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RE_DEPLOYMENT" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RE_MODEL -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_MODEL_DEPLOYMENT" -ON "LEN"."ACT_RE_MODEL" ("DEPLOYMENT_ID_" ASC) -LOGGING + ON "LEN"."ACT_RE_MODEL" ("DEPLOYMENT_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_MODEL_SOURCE" -ON "LEN"."ACT_RE_MODEL" ("EDITOR_SOURCE_VALUE_ID_" ASC) -LOGGING + ON "LEN"."ACT_RE_MODEL" ("EDITOR_SOURCE_VALUE_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_MODEL_SOURCE_EXTRA" -ON "LEN"."ACT_RE_MODEL" ("EDITOR_SOURCE_EXTRA_VALUE_ID_" ASC) -LOGGING + ON "LEN"."ACT_RE_MODEL" ("EDITOR_SOURCE_EXTRA_VALUE_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_RE_MODEL -- ---------------------------- -ALTER TABLE "LEN"."ACT_RE_MODEL" ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RE_MODEL" + ADD CHECK ("ID_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_RE_MODEL -- ---------------------------- -ALTER TABLE "LEN"."ACT_RE_MODEL" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RE_MODEL" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RE_PROCDEF @@ -1669,199 +2017,211 @@ ALTER TABLE "LEN"."ACT_RE_MODEL" ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Uniques structure for table ACT_RE_PROCDEF -- ---------------------------- -ALTER TABLE "LEN"."ACT_RE_PROCDEF" ADD UNIQUE ("KEY_", "VERSION_", "TENANT_ID_"); +ALTER TABLE "LEN"."ACT_RE_PROCDEF" + ADD UNIQUE ("KEY_", "VERSION_", "TENANT_ID_"); -- ---------------------------- -- Checks structure for table ACT_RE_PROCDEF -- ---------------------------- -ALTER TABLE "LEN"."ACT_RE_PROCDEF" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RE_PROCDEF" ADD CHECK ("KEY_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RE_PROCDEF" ADD CHECK ("VERSION_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RE_PROCDEF" ADD CHECK (HAS_START_FORM_KEY_ IN (1,0)); -ALTER TABLE "LEN"."ACT_RE_PROCDEF" ADD CHECK (HAS_GRAPHICAL_NOTATION_ IN (1,0)); +ALTER TABLE "LEN"."ACT_RE_PROCDEF" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RE_PROCDEF" + ADD CHECK ("KEY_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RE_PROCDEF" + ADD CHECK ("VERSION_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RE_PROCDEF" + ADD CHECK (HAS_START_FORM_KEY_ IN (1, 0)); +ALTER TABLE "LEN"."ACT_RE_PROCDEF" + ADD CHECK (HAS_GRAPHICAL_NOTATION_ IN (1, 0)); -- ---------------------------- -- Primary Key structure for table ACT_RE_PROCDEF -- ---------------------------- -ALTER TABLE "LEN"."ACT_RE_PROCDEF" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RE_PROCDEF" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RU_EVENT_SUBSCR -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_EVENT_SUBSCR" -ON "LEN"."ACT_RU_EVENT_SUBSCR" ("EXECUTION_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_EVENT_SUBSCR" ("EXECUTION_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_EVENT_SUBSCR_CONFIG_" -ON "LEN"."ACT_RU_EVENT_SUBSCR" ("CONFIGURATION_" ASC) -LOGGING + ON "LEN"."ACT_RU_EVENT_SUBSCR" ("CONFIGURATION_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_RU_EVENT_SUBSCR -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" ADD CHECK ("EVENT_TYPE_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" ADD CHECK ("CREATED_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" + ADD CHECK ("EVENT_TYPE_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" + ADD CHECK ("CREATED_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_RU_EVENT_SUBSCR -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RU_EXECUTION -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_EXEC_BUSKEY" -ON "LEN"."ACT_RU_EXECUTION" ("BUSINESS_KEY_" ASC) -LOGGING + ON "LEN"."ACT_RU_EXECUTION" ("BUSINESS_KEY_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_EXE_PARENT" -ON "LEN"."ACT_RU_EXECUTION" ("PARENT_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_EXECUTION" ("PARENT_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_EXE_PROCDEF" -ON "LEN"."ACT_RU_EXECUTION" ("PROC_DEF_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_EXECUTION" ("PROC_DEF_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_EXE_PROCINST" -ON "LEN"."ACT_RU_EXECUTION" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_EXECUTION" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_EXE_SUPER" -ON "LEN"."ACT_RU_EXECUTION" ("SUPER_EXEC_" ASC) -LOGGING + ON "LEN"."ACT_RU_EXECUTION" ("SUPER_EXEC_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_RU_EXECUTION -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD CHECK (IS_ACTIVE_ IN (1,0)); -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD CHECK (IS_CONCURRENT_ IN (1,0)); -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD CHECK (IS_SCOPE_ IN (1,0)); -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD CHECK (IS_EVENT_SCOPE_ IN (1,0)); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD CHECK (IS_ACTIVE_ IN (1, 0)); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD CHECK (IS_CONCURRENT_ IN (1, 0)); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD CHECK (IS_SCOPE_ IN (1, 0)); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD CHECK (IS_EVENT_SCOPE_ IN (1, 0)); -- ---------------------------- -- Primary Key structure for table ACT_RU_EXECUTION -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RU_IDENTITYLINK -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_ATHRZ_PROCEDEF" -ON "LEN"."ACT_RU_IDENTITYLINK" ("PROC_DEF_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_IDENTITYLINK" ("PROC_DEF_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_IDENT_LNK_GROUP" -ON "LEN"."ACT_RU_IDENTITYLINK" ("GROUP_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_IDENTITYLINK" ("GROUP_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_IDENT_LNK_USER" -ON "LEN"."ACT_RU_IDENTITYLINK" ("USER_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_IDENTITYLINK" ("USER_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_IDL_PROCINST" -ON "LEN"."ACT_RU_IDENTITYLINK" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_IDENTITYLINK" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_TSKASS_TASK" -ON "LEN"."ACT_RU_IDENTITYLINK" ("TASK_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_IDENTITYLINK" ("TASK_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Primary Key structure for table ACT_RU_IDENTITYLINK -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RU_JOB -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_JOB_EXCEPTION" -ON "LEN"."ACT_RU_JOB" ("EXCEPTION_STACK_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_JOB" ("EXCEPTION_STACK_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_RU_JOB -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_JOB" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RU_JOB" ADD CHECK ("TYPE_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RU_JOB" ADD CHECK (EXCLUSIVE_ IN (1,0)); +ALTER TABLE "LEN"."ACT_RU_JOB" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_JOB" + ADD CHECK ("TYPE_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_JOB" + ADD CHECK (EXCLUSIVE_ IN (1, 0)); -- ---------------------------- -- Primary Key structure for table ACT_RU_JOB -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_JOB" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RU_JOB" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RU_TASK -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_TASK_CREATE" -ON "LEN"."ACT_RU_TASK" ("CREATE_TIME_" ASC) -LOGGING + ON "LEN"."ACT_RU_TASK" ("CREATE_TIME_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_TASK_EXEC" -ON "LEN"."ACT_RU_TASK" ("EXECUTION_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_TASK" ("EXECUTION_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_TASK_PROCDEF" -ON "LEN"."ACT_RU_TASK" ("PROC_DEF_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_TASK" ("PROC_DEF_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_TASK_PROCINST" -ON "LEN"."ACT_RU_TASK" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_TASK" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Primary Key structure for table ACT_RU_TASK -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_TASK" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RU_TASK" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Indexes structure for table ACT_RU_VARIABLE -- ---------------------------- CREATE INDEX "LEN"."ACT_IDX_VARIABLE_TASK_ID" -ON "LEN"."ACT_RU_VARIABLE" ("TASK_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_VARIABLE" ("TASK_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_VAR_BYTEARRAY" -ON "LEN"."ACT_RU_VARIABLE" ("BYTEARRAY_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_VARIABLE" ("BYTEARRAY_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_VAR_EXE" -ON "LEN"."ACT_RU_VARIABLE" ("EXECUTION_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_VARIABLE" ("EXECUTION_ID_" ASC) LOGGING VISIBLE; CREATE INDEX "LEN"."ACT_IDX_VAR_PROCINST" -ON "LEN"."ACT_RU_VARIABLE" ("PROC_INST_ID_" ASC) -LOGGING + ON "LEN"."ACT_RU_VARIABLE" ("PROC_INST_ID_" ASC) LOGGING VISIBLE; -- ---------------------------- -- Checks structure for table ACT_RU_VARIABLE -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_VARIABLE" ADD CHECK ("ID_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RU_VARIABLE" ADD CHECK ("TYPE_" IS NOT NULL); -ALTER TABLE "LEN"."ACT_RU_VARIABLE" ADD CHECK ("NAME_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_VARIABLE" + ADD CHECK ("ID_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_VARIABLE" + ADD CHECK ("TYPE_" IS NOT NULL); +ALTER TABLE "LEN"."ACT_RU_VARIABLE" + ADD CHECK ("NAME_" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table ACT_RU_VARIABLE -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_VARIABLE" ADD PRIMARY KEY ("ID_"); +ALTER TABLE "LEN"."ACT_RU_VARIABLE" + ADD PRIMARY KEY ("ID_"); -- ---------------------------- -- Checks structure for table BLOG_ARTICLE -- ---------------------------- -ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("CODE" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("TITLE" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("CONTENT" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("READ_NUMBER" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("CREATE_BY" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("DEL_FLAG" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE" + ADD CHECK ("CODE" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE" + ADD CHECK ("TITLE" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE" + ADD CHECK ("CONTENT" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE" + ADD CHECK ("READ_NUMBER" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE" + ADD CHECK ("CREATE_BY" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE" + ADD CHECK ("DEL_FLAG" IS NOT NULL); -- ---------------------------- -- Indexes structure for table BLOG_ARTICLE_CATEGORY @@ -1870,14 +2230,18 @@ ALTER TABLE "LEN"."BLOG_ARTICLE" ADD CHECK ("DEL_FLAG" IS NOT NULL); -- ---------------------------- -- Checks structure for table BLOG_ARTICLE_CATEGORY -- ---------------------------- -ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" ADD CHECK ("ARTICLE_ID" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" ADD CHECK ("CATEGORY_ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" + ADD CHECK ("ARTICLE_ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" + ADD CHECK ("CATEGORY_ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table BLOG_ARTICLE_CATEGORY -- ---------------------------- -ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table BLOG_ARTICLE_TAG @@ -1886,13 +2250,16 @@ ALTER TABLE "LEN"."BLOG_ARTICLE_CATEGORY" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table BLOG_ARTICLE_TAG -- ---------------------------- -ALTER TABLE "LEN"."BLOG_ARTICLE_TAG" ADD CHECK ("ARTICLE_ID" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_ARTICLE_TAG" ADD CHECK ("TAG_ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE_TAG" + ADD CHECK ("ARTICLE_ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_ARTICLE_TAG" + ADD CHECK ("TAG_ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table BLOG_ARTICLE_TAG -- ---------------------------- -ALTER TABLE "LEN"."BLOG_ARTICLE_TAG" ADD PRIMARY KEY ("ARTICLE_ID", "TAG_ID"); +ALTER TABLE "LEN"."BLOG_ARTICLE_TAG" + ADD PRIMARY KEY ("ARTICLE_ID", "TAG_ID"); -- ---------------------------- -- Indexes structure for table BLOG_CATEGORY @@ -1901,16 +2268,22 @@ ALTER TABLE "LEN"."BLOG_ARTICLE_TAG" ADD PRIMARY KEY ("ARTICLE_ID", "TAG_ID"); -- ---------------------------- -- Checks structure for table BLOG_CATEGORY -- ---------------------------- -ALTER TABLE "LEN"."BLOG_CATEGORY" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_CATEGORY" ADD CHECK ("SEQUENCE" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_CATEGORY" ADD CHECK ("CODE" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_CATEGORY" ADD CHECK ("NAME" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_CATEGORY" ADD CHECK ("PARENT_ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_CATEGORY" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_CATEGORY" + ADD CHECK ("SEQUENCE" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_CATEGORY" + ADD CHECK ("CODE" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_CATEGORY" + ADD CHECK ("NAME" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_CATEGORY" + ADD CHECK ("PARENT_ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table BLOG_CATEGORY -- ---------------------------- -ALTER TABLE "LEN"."BLOG_CATEGORY" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."BLOG_CATEGORY" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table BLOG_TAG @@ -1919,14 +2292,18 @@ ALTER TABLE "LEN"."BLOG_CATEGORY" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table BLOG_TAG -- ---------------------------- -ALTER TABLE "LEN"."BLOG_TAG" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_TAG" ADD CHECK ("TAG_CODE" IS NOT NULL); -ALTER TABLE "LEN"."BLOG_TAG" ADD CHECK ("TAG_NAME" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_TAG" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_TAG" + ADD CHECK ("TAG_CODE" IS NOT NULL); +ALTER TABLE "LEN"."BLOG_TAG" + ADD CHECK ("TAG_NAME" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table BLOG_TAG -- ---------------------------- -ALTER TABLE "LEN"."BLOG_TAG" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."BLOG_TAG" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table SYS_DICT_ITEM @@ -1935,17 +2312,24 @@ ALTER TABLE "LEN"."BLOG_TAG" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table SYS_DICT_ITEM -- ---------------------------- -ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD CHECK ("SEQUENCE" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD CHECK ("VALUE" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD CHECK ("DESCRIPTION" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD CHECK ("TYPE_ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD CHECK ("DEL_FLAG" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_ITEM" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_ITEM" + ADD CHECK ("SEQUENCE" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_ITEM" + ADD CHECK ("VALUE" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_ITEM" + ADD CHECK ("DESCRIPTION" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_ITEM" + ADD CHECK ("TYPE_ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_ITEM" + ADD CHECK ("DEL_FLAG" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_DICT_ITEM -- ---------------------------- -ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."SYS_DICT_ITEM" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table SYS_DICT_TYPE @@ -1954,15 +2338,20 @@ ALTER TABLE "LEN"."SYS_DICT_ITEM" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table SYS_DICT_TYPE -- ---------------------------- -ALTER TABLE "LEN"."SYS_DICT_TYPE" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_TYPE" ADD CHECK ("CODE" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_TYPE" ADD CHECK ("DEL_FLAG" IS NOT NULL); -ALTER TABLE "LEN"."SYS_DICT_TYPE" ADD CHECK ("TEXT" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_TYPE" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_TYPE" + ADD CHECK ("CODE" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_TYPE" + ADD CHECK ("DEL_FLAG" IS NOT NULL); +ALTER TABLE "LEN"."SYS_DICT_TYPE" + ADD CHECK ("TEXT" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_DICT_TYPE -- ---------------------------- -ALTER TABLE "LEN"."SYS_DICT_TYPE" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."SYS_DICT_TYPE" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table SYS_JOB @@ -1971,16 +2360,22 @@ ALTER TABLE "LEN"."SYS_DICT_TYPE" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table SYS_JOB -- ---------------------------- -ALTER TABLE "LEN"."SYS_JOB" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_JOB" ADD CHECK ("JOB_NAME" IS NOT NULL); -ALTER TABLE "LEN"."SYS_JOB" ADD CHECK ("CRON" IS NOT NULL); -ALTER TABLE "LEN"."SYS_JOB" ADD CHECK ("STATUS" IS NOT NULL); -ALTER TABLE "LEN"."SYS_JOB" ADD CHECK ("CLAZZ_PATH" IS NOT NULL); +ALTER TABLE "LEN"."SYS_JOB" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_JOB" + ADD CHECK ("JOB_NAME" IS NOT NULL); +ALTER TABLE "LEN"."SYS_JOB" + ADD CHECK ("CRON" IS NOT NULL); +ALTER TABLE "LEN"."SYS_JOB" + ADD CHECK ("STATUS" IS NOT NULL); +ALTER TABLE "LEN"."SYS_JOB" + ADD CHECK ("CLAZZ_PATH" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_JOB -- ---------------------------- -ALTER TABLE "LEN"."SYS_JOB" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."SYS_JOB" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table SYS_LOG @@ -1989,12 +2384,14 @@ ALTER TABLE "LEN"."SYS_JOB" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table SYS_LOG -- ---------------------------- -ALTER TABLE "LEN"."SYS_LOG" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_LOG" + ADD CHECK ("ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_LOG -- ---------------------------- -ALTER TABLE "LEN"."SYS_LOG" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."SYS_LOG" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table SYS_MENU @@ -2003,14 +2400,18 @@ ALTER TABLE "LEN"."SYS_LOG" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table SYS_MENU -- ---------------------------- -ALTER TABLE "LEN"."SYS_MENU" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_MENU" ADD CHECK ("NAME" IS NOT NULL); -ALTER TABLE "LEN"."SYS_MENU" ADD CHECK ("MENU_TYPE" IS NOT NULL); +ALTER TABLE "LEN"."SYS_MENU" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_MENU" + ADD CHECK ("NAME" IS NOT NULL); +ALTER TABLE "LEN"."SYS_MENU" + ADD CHECK ("MENU_TYPE" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_MENU -- ---------------------------- -ALTER TABLE "LEN"."SYS_MENU" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."SYS_MENU" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table SYS_ROLE @@ -2019,12 +2420,14 @@ ALTER TABLE "LEN"."SYS_MENU" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table SYS_ROLE -- ---------------------------- -ALTER TABLE "LEN"."SYS_ROLE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_ROLE" + ADD CHECK ("ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_ROLE -- ---------------------------- -ALTER TABLE "LEN"."SYS_ROLE" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."SYS_ROLE" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table SYS_ROLE_MENU @@ -2033,13 +2436,16 @@ ALTER TABLE "LEN"."SYS_ROLE" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table SYS_ROLE_MENU -- ---------------------------- -ALTER TABLE "LEN"."SYS_ROLE_MENU" ADD CHECK ("ROLE_ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_ROLE_MENU" ADD CHECK ("MENU_ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_ROLE_MENU" + ADD CHECK ("ROLE_ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_ROLE_MENU" + ADD CHECK ("MENU_ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_ROLE_MENU -- ---------------------------- -ALTER TABLE "LEN"."SYS_ROLE_MENU" ADD PRIMARY KEY ("ROLE_ID", "MENU_ID"); +ALTER TABLE "LEN"."SYS_ROLE_MENU" + ADD PRIMARY KEY ("ROLE_ID", "MENU_ID"); -- ---------------------------- -- Indexes structure for table SYS_ROLE_USER @@ -2048,13 +2454,16 @@ ALTER TABLE "LEN"."SYS_ROLE_MENU" ADD PRIMARY KEY ("ROLE_ID", "MENU_ID"); -- ---------------------------- -- Checks structure for table SYS_ROLE_USER -- ---------------------------- -ALTER TABLE "LEN"."SYS_ROLE_USER" ADD CHECK ("USER_ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_ROLE_USER" ADD CHECK ("ROLE_ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_ROLE_USER" + ADD CHECK ("USER_ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_ROLE_USER" + ADD CHECK ("ROLE_ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_ROLE_USER -- ---------------------------- -ALTER TABLE "LEN"."SYS_ROLE_USER" ADD PRIMARY KEY ("USER_ID", "ROLE_ID"); +ALTER TABLE "LEN"."SYS_ROLE_USER" + ADD PRIMARY KEY ("USER_ID", "ROLE_ID"); -- ---------------------------- -- Indexes structure for table SYS_USER @@ -2063,15 +2472,20 @@ ALTER TABLE "LEN"."SYS_ROLE_USER" ADD PRIMARY KEY ("USER_ID", "ROLE_ID"); -- ---------------------------- -- Checks structure for table SYS_USER -- ---------------------------- -ALTER TABLE "LEN"."SYS_USER" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."SYS_USER" ADD CHECK ("USERNAME" IS NOT NULL); -ALTER TABLE "LEN"."SYS_USER" ADD CHECK ("PASSWORD" IS NOT NULL); -ALTER TABLE "LEN"."SYS_USER" ADD CHECK ("DEL_FLAG" IS NOT NULL); +ALTER TABLE "LEN"."SYS_USER" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."SYS_USER" + ADD CHECK ("USERNAME" IS NOT NULL); +ALTER TABLE "LEN"."SYS_USER" + ADD CHECK ("PASSWORD" IS NOT NULL); +ALTER TABLE "LEN"."SYS_USER" + ADD CHECK ("DEL_FLAG" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table SYS_USER -- ---------------------------- -ALTER TABLE "LEN"."SYS_USER" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."SYS_USER" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Indexes structure for table USER_LEAVE @@ -2080,73 +2494,99 @@ ALTER TABLE "LEN"."SYS_USER" ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Checks structure for table USER_LEAVE -- ---------------------------- -ALTER TABLE "LEN"."USER_LEAVE" ADD CHECK ("ID" IS NOT NULL); -ALTER TABLE "LEN"."USER_LEAVE" ADD CHECK ("USER_ID" IS NOT NULL); +ALTER TABLE "LEN"."USER_LEAVE" + ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "LEN"."USER_LEAVE" + ADD CHECK ("USER_ID" IS NOT NULL); -- ---------------------------- -- Primary Key structure for table USER_LEAVE -- ---------------------------- -ALTER TABLE "LEN"."USER_LEAVE" ADD PRIMARY KEY ("ID"); +ALTER TABLE "LEN"."USER_LEAVE" + ADD PRIMARY KEY ("ID"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_GE_BYTEARRAY" -- ---------------------------- -ALTER TABLE "LEN"."ACT_GE_BYTEARRAY" ADD FOREIGN KEY ("DEPLOYMENT_ID_") REFERENCES "LEN"."ACT_RE_DEPLOYMENT" ("ID_"); +ALTER TABLE "LEN"."ACT_GE_BYTEARRAY" + ADD FOREIGN KEY ("DEPLOYMENT_ID_") REFERENCES "LEN"."ACT_RE_DEPLOYMENT" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_ID_MEMBERSHIP" -- ---------------------------- -ALTER TABLE "LEN"."ACT_ID_MEMBERSHIP" ADD FOREIGN KEY ("GROUP_ID_") REFERENCES "LEN"."ACT_ID_GROUP" ("ID_"); -ALTER TABLE "LEN"."ACT_ID_MEMBERSHIP" ADD FOREIGN KEY ("USER_ID_") REFERENCES "LEN"."ACT_ID_USER" ("ID_"); +ALTER TABLE "LEN"."ACT_ID_MEMBERSHIP" + ADD FOREIGN KEY ("GROUP_ID_") REFERENCES "LEN"."ACT_ID_GROUP" ("ID_"); +ALTER TABLE "LEN"."ACT_ID_MEMBERSHIP" + ADD FOREIGN KEY ("USER_ID_") REFERENCES "LEN"."ACT_ID_USER" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_PROCDEF_INFO" -- ---------------------------- -ALTER TABLE "LEN"."ACT_PROCDEF_INFO" ADD FOREIGN KEY ("INFO_JSON_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); -ALTER TABLE "LEN"."ACT_PROCDEF_INFO" ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); +ALTER TABLE "LEN"."ACT_PROCDEF_INFO" + ADD FOREIGN KEY ("INFO_JSON_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); +ALTER TABLE "LEN"."ACT_PROCDEF_INFO" + ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_RE_MODEL" -- ---------------------------- -ALTER TABLE "LEN"."ACT_RE_MODEL" ADD FOREIGN KEY ("DEPLOYMENT_ID_") REFERENCES "LEN"."ACT_RE_DEPLOYMENT" ("ID_"); -ALTER TABLE "LEN"."ACT_RE_MODEL" ADD FOREIGN KEY ("EDITOR_SOURCE_VALUE_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); -ALTER TABLE "LEN"."ACT_RE_MODEL" ADD FOREIGN KEY ("EDITOR_SOURCE_EXTRA_VALUE_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); +ALTER TABLE "LEN"."ACT_RE_MODEL" + ADD FOREIGN KEY ("DEPLOYMENT_ID_") REFERENCES "LEN"."ACT_RE_DEPLOYMENT" ("ID_"); +ALTER TABLE "LEN"."ACT_RE_MODEL" + ADD FOREIGN KEY ("EDITOR_SOURCE_VALUE_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); +ALTER TABLE "LEN"."ACT_RE_MODEL" + ADD FOREIGN KEY ("EDITOR_SOURCE_EXTRA_VALUE_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_RU_EVENT_SUBSCR" -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" ADD FOREIGN KEY ("EXECUTION_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_EVENT_SUBSCR" + ADD FOREIGN KEY ("EXECUTION_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_RU_EXECUTION" -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD FOREIGN KEY ("PARENT_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_EXECUTION" ADD FOREIGN KEY ("SUPER_EXEC_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD FOREIGN KEY ("PARENT_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_EXECUTION" + ADD FOREIGN KEY ("SUPER_EXEC_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_RU_IDENTITYLINK" -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" ADD FOREIGN KEY ("TASK_ID_") REFERENCES "LEN"."ACT_RU_TASK" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" + ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" + ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_IDENTITYLINK" + ADD FOREIGN KEY ("TASK_ID_") REFERENCES "LEN"."ACT_RU_TASK" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_RU_JOB" -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_JOB" ADD FOREIGN KEY ("EXCEPTION_STACK_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_JOB" + ADD FOREIGN KEY ("EXCEPTION_STACK_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_RU_TASK" -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_TASK" ADD FOREIGN KEY ("EXECUTION_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_TASK" ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_TASK" ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_TASK" + ADD FOREIGN KEY ("EXECUTION_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_TASK" + ADD FOREIGN KEY ("PROC_DEF_ID_") REFERENCES "LEN"."ACT_RE_PROCDEF" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_TASK" + ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -- ---------------------------- -- Foreign Key structure for table "LEN"."ACT_RU_VARIABLE" -- ---------------------------- -ALTER TABLE "LEN"."ACT_RU_VARIABLE" ADD FOREIGN KEY ("BYTEARRAY_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_VARIABLE" ADD FOREIGN KEY ("EXECUTION_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); -ALTER TABLE "LEN"."ACT_RU_VARIABLE" ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_VARIABLE" + ADD FOREIGN KEY ("BYTEARRAY_ID_") REFERENCES "LEN"."ACT_GE_BYTEARRAY" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_VARIABLE" + ADD FOREIGN KEY ("EXECUTION_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); +ALTER TABLE "LEN"."ACT_RU_VARIABLE" + ADD FOREIGN KEY ("PROC_INST_ID_") REFERENCES "LEN"."ACT_RU_EXECUTION" ("ID_"); diff --git a/len-activiti/pom.xml b/len-activiti/pom.xml index ad9c854..0c11fb5 100644 --- a/len-activiti/pom.xml +++ b/len-activiti/pom.xml @@ -1,89 +1,89 @@ - - - lenosp - com.len - lenosp-2.0-SNAPSHOT - - 4.0.0 + + + lenosp + com.len + lenosp-2.0-SNAPSHOT + + 4.0.0 - len-activiti + len-activiti - len-activiti - http://maven.apache.org - + len-activiti + http://maven.apache.org + - - UTF-8 - 5.22.0 - - + + UTF-8 + 5.22.0 + + - - - org.activiti - activiti-engine - ${activiti.version} - + + + org.activiti + activiti-engine + ${activiti.version} + - - org.activiti - activiti-spring - ${activiti.version} - + + org.activiti + activiti-spring + ${activiti.version} + - - org.activiti - activiti-modeler - ${activiti.version} - + + org.activiti + activiti-modeler + ${activiti.version} + - - org.activiti - activiti-diagram-rest - ${activiti.version} - - + + org.activiti + activiti-diagram-rest + ${activiti.version} + + - - - com.len - len-sys - - - junit - junit - 4.12 - - - - - - com.len - len-sys - lenosp-2.0-SNAPSHOT - + + + com.len + len-sys + + + junit + junit + 4.12 + - + + + + com.len + len-sys + lenosp-2.0-SNAPSHOT + + + - - - - src/main/java - - **/*.xml - - - - src/main/resources - - **.* - **/*.* - **/*/*.* - - - - + + + + src/main/java + + **/*.xml + + + + src/main/resources + + **.* + **/*.* + **/*/*.* + + + + diff --git a/len-activiti/src/main/java/com/len/actlistener/ActNodeListener.java b/len-activiti/src/main/java/com/len/actlistener/ActNodeListener.java index 155ca87..dcd7efa 100644 --- a/len-activiti/src/main/java/com/len/actlistener/ActNodeListener.java +++ b/len-activiti/src/main/java/com/len/actlistener/ActNodeListener.java @@ -1,20 +1,22 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.actlistener; +import java.util.List; + +import org.activiti.engine.delegate.DelegateTask; +import org.activiti.engine.delegate.TaskListener; + import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.len.entity.ActAssignee; import com.len.service.ActAssigneeService; @@ -22,23 +24,18 @@ import com.len.service.impl.ActAssigneeServiceImpl; import com.len.util.AssigneeType; import com.len.util.SpringUtil; -import java.util.List; - -import org.activiti.engine.delegate.DelegateTask; -import org.activiti.engine.delegate.TaskListener; - /** * @author zhuxiaomeng * @date 2018/1/20. * @email lenospmiller@gmail.com - *

- * 流程监听器 动态注入节点办理人 + *

+ * 流程监听器 动态注入节点办理人 */ public class ActNodeListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { - //KEY + // KEY String nodeId = delegateTask.getTaskDefinitionKey(); ActAssigneeService actAssigneeService = SpringUtil.getBean(ActAssigneeServiceImpl.class); List assigneeList = actAssigneeService.list(new QueryWrapper<>(new ActAssignee(nodeId))); diff --git a/len-activiti/src/main/java/com/len/actlistener/ActStartNodeListener.java b/len-activiti/src/main/java/com/len/actlistener/ActStartNodeListener.java index ab993a0..4ba5c5b 100644 --- a/len-activiti/src/main/java/com/len/actlistener/ActStartNodeListener.java +++ b/len-activiti/src/main/java/com/len/actlistener/ActStartNodeListener.java @@ -1,42 +1,40 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.actlistener; -import com.len.entity.BaseTask; +import java.util.Map; + import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.TaskListener; -import java.util.Map; +import com.len.entity.BaseTask; /** * @author zhuxiaomeng * @date 2018/1/20. * @email lenospmiller@gmail.com - *

- * 流程监听器 动态注入节点办理人 + *

+ * 流程监听器 动态注入节点办理人 */ public class ActStartNodeListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { - //KEY + // KEY String nodeId = delegateTask.getTaskDefinitionKey(); Map variables = delegateTask.getVariables(); - BaseTask baseTask = (BaseTask) variables.get("baseTask"); + BaseTask baseTask = (BaseTask)variables.get("baseTask"); delegateTask.setAssignee(baseTask.getUserId()); diff --git a/len-activiti/src/main/java/com/len/actlistener/LeaveListenerImpl.java b/len-activiti/src/main/java/com/len/actlistener/LeaveListenerImpl.java index ebac5f5..65c1904 100644 --- a/len-activiti/src/main/java/com/len/actlistener/LeaveListenerImpl.java +++ b/len-activiti/src/main/java/com/len/actlistener/LeaveListenerImpl.java @@ -1,31 +1,29 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.actlistener; -import com.len.entity.UserLeave; +import java.util.Map; + import org.activiti.engine.delegate.DelegateTask; -import java.util.Map; +import com.len.entity.UserLeave; /** * @author zhuxiaomeng * @date 2018/1/25. * @email lenospmiller@gmail.com - *

- * 自定义请假流程 监听器 + *

+ * 自定义请假流程 监听器 */ public class LeaveListenerImpl extends ActNodeListener { @@ -34,7 +32,7 @@ public class LeaveListenerImpl extends ActNodeListener { super.notify(delegateTask); String taskId = delegateTask.getId(); Map map = delegateTask.getVariables(); - UserLeave userLeave = (UserLeave) map.get("userLeave"); + UserLeave userLeave = (UserLeave)map.get("userLeave"); delegateTask.addCandidateUser(userLeave.getUserId()); } } diff --git a/len-activiti/src/main/java/com/len/actlistener/ListenUserRole.java b/len-activiti/src/main/java/com/len/actlistener/ListenUserRole.java index 8d9145f..ccf0170 100644 --- a/len-activiti/src/main/java/com/len/actlistener/ListenUserRole.java +++ b/len-activiti/src/main/java/com/len/actlistener/ListenUserRole.java @@ -1,25 +1,21 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.actlistener; -import com.len.entity.SysRole; -import com.len.entity.SysRoleUser; -import com.len.entity.SysUser; -import com.len.service.SysUserService; -import com.len.util.LenResponse; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import org.activiti.engine.IdentityService; import org.activiti.engine.identity.Group; import org.activiti.engine.identity.User; @@ -31,16 +27,18 @@ import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import com.len.entity.SysRole; +import com.len.entity.SysRoleUser; +import com.len.entity.SysUser; +import com.len.service.SysUserService; +import com.len.util.LenResponse; /** * @author zhuxiaomeng * @date 2018/1/25. * @email lenospmiller@gmail.com - *

- * 切入实现系统用户 角色 用户-角色 同步到 activiti 用户 组 用户组 同步到工作流,模块化 无侵入 + *

+ * 切入实现系统用户 角色 用户-角色 同步到 activiti 用户 组 用户组 同步到工作流,模块化 无侵入 */ @Aspect @Component @@ -52,7 +50,7 @@ public class ListenUserRole { @Autowired SysUserService userService; - /**********************用户处理begin***************************/ + /********************** 用户处理begin ***************************/ /** * 明确切入方法的参数 * @@ -61,15 +59,15 @@ public class ListenUserRole { @Around("execution(com.len.util.LenResponse com.len.controller.UserController.updateUser(*,String[]))") public Object listenerUserUpdate(ProceedingJoinPoint joinPoint) throws Throwable { Object o = new Object(); - //更新前拿到用户-角色数据 + // 更新前拿到用户-角色数据 SysRoleUser sysRoleUser = new SysRoleUser(); Object[] args = joinPoint.getArgs(); - sysRoleUser.setUserId(((SysUser) args[0]).getId()); + sysRoleUser.setUserId(((SysUser)args[0]).getId()); List keyList = userService.selectByCondition(sysRoleUser); List strings = new ArrayList<>(); keyList.forEach(sysRoleUser1 -> strings.add(sysRoleUser1.getRoleId())); o = joinPoint.proceed(joinPoint.getArgs()); - LenResponse jsonUtil = (LenResponse) o; + LenResponse jsonUtil = (LenResponse)o; if (jsonUtil.isFlag()) { changeUser(args, strings); } @@ -86,9 +84,9 @@ public class ListenUserRole { Object o = joinPoint.proceed(joinPoint.getArgs()); Object[] args = joinPoint.getArgs(); if (args.length == 2) { - LenResponse jsonUtil = (LenResponse) o; + LenResponse jsonUtil = (LenResponse)o; if (jsonUtil.isFlag()) { - changeUser(args, Arrays.asList((String[]) args[1])); + changeUser(args, Arrays.asList((String[])args[1])); } } return o; @@ -97,34 +95,33 @@ public class ListenUserRole { @Around("execution(com.len.util.LenResponse com.len.controller.UserController.del(..))") public Object listenDelUser(ProceedingJoinPoint point) throws Throwable { Object o = point.proceed(point.getArgs()); - LenResponse util = (LenResponse) o; + LenResponse util = (LenResponse)o; if (util.isFlag()) { Object[] args = point.getArgs(); - identityService.deleteUser((String) args[0]); + identityService.deleteUser((String)args[0]); } return o; } - /** * 保存进 activiti 用户 角色 用户角色中间表 * * @param obj */ private void changeUser(Object[] obj, List strings) { - SysUser user = (SysUser) obj[0]; + SysUser user = (SysUser)obj[0]; identityService.deleteUser(user.getId()); User au = new UserEntity(); au.setId(user.getId()); -// au.setFirstName(user.getRealName()); + // au.setFirstName(user.getRealName()); au.setEmail(user.getEmail()); identityService.saveUser(au); - //删除用户-组关联 + // 删除用户-组关联 for (String roleId : strings) { identityService.deleteMembership(user.getId(), roleId); } - //再次关联 + // 再次关联 if (!strings.isEmpty()) { for (String roleId : strings) { identityService.createMembership(user.getId(), roleId); @@ -132,14 +129,13 @@ public class ListenUserRole { } } - /**********************用户处理end***************************/ - + /********************** 用户处理end ***************************/ - /**********************角色处理begin***************************/ + /********************** 角色处理begin ***************************/ @Around("execution(com.len.util.LenResponse com.len.controller.RoleController.addRole(*,String[]))") public Object listenRoleInsert(ProceedingJoinPoint joinPoint) throws Throwable { Object o = joinPoint.proceed(joinPoint.getArgs()); - LenResponse j = (LenResponse) o; + LenResponse j = (LenResponse)o; if (j.isFlag()) { Object[] args = joinPoint.getArgs(); if (args.length == 2) { @@ -154,7 +150,7 @@ public class ListenUserRole { Object o = joinPoint.proceed(joinPoint.getArgs()); Object[] args = joinPoint.getArgs(); if (args.length == 2) { - if (((LenResponse) o).isFlag()) { + if (((LenResponse)o).isFlag()) { changeRole(args); } } @@ -165,10 +161,10 @@ public class ListenUserRole { @Around("execution(com.len.util.LenResponse com.len.controller.RoleController.del(..))") public Object listenDelRole(ProceedingJoinPoint point) throws Throwable { Object o = point.proceed(point.getArgs()); - LenResponse util = (LenResponse) o; + LenResponse util = (LenResponse)o; if (util.isFlag()) { Object[] args = point.getArgs(); - identityService.deleteGroup((String) args[0]); + identityService.deleteGroup((String)args[0]); } return o; } @@ -179,7 +175,7 @@ public class ListenUserRole { * @param obj */ public void changeRole(Object[] obj) { - SysRole role = (SysRole) obj[0]; + SysRole role = (SysRole)obj[0]; identityService.deleteGroup(role.getId()); Group group = new GroupEntity(); group.setId(role.getId()); @@ -187,5 +183,5 @@ public class ListenUserRole { identityService.saveGroup(group); } - /**********************角色处理end***************************/ + /********************** 角色处理end ***************************/ } diff --git a/len-activiti/src/main/java/com/len/config/ActPropertiesConfig.java b/len-activiti/src/main/java/com/len/config/ActPropertiesConfig.java index cdd1ed6..539f53e 100644 --- a/len-activiti/src/main/java/com/len/config/ActPropertiesConfig.java +++ b/len-activiti/src/main/java/com/len/config/ActPropertiesConfig.java @@ -1,17 +1,14 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.config; @@ -28,19 +25,19 @@ import org.springframework.context.annotation.PropertySource; @PropertySource("classpath:properties\\activiti.properties") public class ActPropertiesConfig { - @Value("${modelId}") - private String modelId; + @Value("${modelId}") + private String modelId; - public String getModelId() { - return modelId; - } + public String getModelId() { + return modelId; + } - public void setModelId(String modelId) { - this.modelId = modelId; - } + public void setModelId(String modelId) { + this.modelId = modelId; + } - @Bean - public ActPropertiesConfig getActPropertiesConfig(){ - return new ActPropertiesConfig(); - } + @Bean + public ActPropertiesConfig getActPropertiesConfig() { + return new ActPropertiesConfig(); + } } diff --git a/len-activiti/src/main/java/com/len/config/ActivitiConfig.java b/len-activiti/src/main/java/com/len/config/ActivitiConfig.java index bc37a6d..f4bb63f 100644 --- a/len-activiti/src/main/java/com/len/config/ActivitiConfig.java +++ b/len-activiti/src/main/java/com/len/config/ActivitiConfig.java @@ -1,21 +1,9 @@ package com.len.config; -import com.fasterxml.jackson.databind.ObjectMapper; - import javax.sql.DataSource; -import org.activiti.engine.DynamicBpmnService; -import org.activiti.engine.FormService; -import org.activiti.engine.HistoryService; -import org.activiti.engine.IdentityService; -import org.activiti.engine.ManagementService; -import org.activiti.engine.ProcessEngine; -import org.activiti.engine.ProcessEngineConfiguration; -import org.activiti.engine.RepositoryService; -import org.activiti.engine.RuntimeService; -import org.activiti.engine.TaskService; +import org.activiti.engine.*; import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl; -import org.activiti.image.HMProcessDiagramGenerator; import org.activiti.image.impl.DefaultProcessDiagramGenerator; import org.activiti.spring.ProcessEngineFactoryBean; import org.activiti.spring.SpringProcessEngineConfiguration; @@ -23,12 +11,11 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +import com.fasterxml.jackson.databind.ObjectMapper; /** - * Created by liuruijie on 2017/2/20. - * activiti工作流配置 + * Created by liuruijie on 2017/2/20. activiti工作流配置 */ @Configuration public class ActivitiConfig { @@ -40,17 +27,18 @@ public class ActivitiConfig { * spring 集成 activiti */ @Bean - public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager) { + public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, + PlatformTransactionManager transactionManager) { SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration(); processEngineConfiguration.setDataSource(dataSource); - //表不存在创建表 + // 表不存在创建表 processEngineConfiguration.setDatabaseSchemaUpdate("true"); - //指定数据库 + // 指定数据库 processEngineConfiguration.setDatabaseType(dataType); processEngineConfiguration.setTransactionManager(transactionManager); - //历史变量 + // 历史变量 processEngineConfiguration.setHistory("full"); - //指定字体 + // 指定字体 processEngineConfiguration.setActivityFontName("宋体"); processEngineConfiguration.setAnnotationFontName("宋体"); processEngineConfiguration.setLabelFontName("宋体"); @@ -60,11 +48,12 @@ public class ActivitiConfig { return processEngineConfiguration; } - //流程引擎,与spring整合使用factoryBean + // 流程引擎,与spring整合使用factoryBean @Bean public ProcessEngineFactoryBean processEngine(ProcessEngineConfiguration processEngineConfiguration) { ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean(); - processEngineFactoryBean.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration); + processEngineFactoryBean + .setProcessEngineConfiguration((ProcessEngineConfigurationImpl)processEngineConfiguration); return processEngineFactoryBean; } diff --git a/len-activiti/src/main/java/com/len/controller/ActivitiController.java b/len-activiti/src/main/java/com/len/controller/ActivitiController.java index 70b477e..372a500 100644 --- a/len-activiti/src/main/java/com/len/controller/ActivitiController.java +++ b/len-activiti/src/main/java/com/len/controller/ActivitiController.java @@ -1,38 +1,26 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.controller; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.len.base.BaseController; -import com.len.config.ActPropertiesConfig; -import com.len.entity.*; -import com.len.exception.LenException; -import com.len.service.ActAssigneeService; -import com.len.service.RoleService; -import com.len.service.RoleUserService; -import com.len.service.SysUserService; -import com.len.util.Base64Utils; -import com.len.util.Checkbox; -import com.len.util.LenResponse; -import com.len.util.ReType; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.util.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.activiti.bpmn.converter.BpmnXMLConverter; import org.activiti.bpmn.model.BpmnModel; import org.activiti.editor.constants.ModelDataJsonConstants; @@ -55,50 +43,55 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.util.*; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.len.base.BaseController; +import com.len.config.ActPropertiesConfig; +import com.len.entity.*; +import com.len.exception.LenException; +import com.len.service.ActAssigneeService; +import com.len.service.RoleService; +import com.len.service.RoleUserService; +import com.len.service.SysUserService; +import com.len.util.Base64Utils; +import com.len.util.Checkbox; +import com.len.util.LenResponse; +import com.len.util.ReType; /** * @author zhuxiaomeng * @date 2018/1/13. * @email lenospmiller@gmail.com - *

- * 流程管理 流程创建、发布 流程节点绑定角色/用户(绑定用户 开始ing) + *

+ * 流程管理 流程创建、发布 流程节点绑定角色/用户(绑定用户 开始ing) */ @Controller @RequestMapping(value = "/act") public class ActivitiController extends BaseController { + @Autowired + ActivitiService activitiService; + @Autowired + ActPropertiesConfig actPropertiesConfig; @Autowired private RepositoryService repositoryService; - @Autowired private ObjectMapper objectMapper; - @Autowired private IdentityService identityService; - @Autowired private SysUserService userService; - @Autowired private RoleService roleService; - @Autowired private RoleUserService roleUserService; - @Autowired private ActAssigneeService actAssigneeService; - @Autowired - ActivitiService activitiService; - - /** * 同步用户 角色 用户角色到activiti表中 */ @@ -112,7 +105,7 @@ public class ActivitiController extends BaseController { for (SysUser user : userList) { au = new UserEntity(); au.setId(user.getId()); -// au.setFirstName(user.getRealName()); + // au.setFirstName(user.getRealName()); au.setEmail(user.getEmail()); identityService.deleteUser(au.getId()); identityService.saveUser(au); @@ -141,7 +134,6 @@ public class ActivitiController extends BaseController { return j; } - @GetMapping(value = "goActiviti") public String goActiviti() throws UnsupportedEncodingException { Model model = repositoryService.newModel(); @@ -163,7 +155,7 @@ public class ActivitiController extends BaseController { repositoryService.saveModel(model); String id = model.getId(); - //完善ModelEditorSource + // 完善ModelEditorSource JSONObject editor = new JSONObject(); editor.put("id", "canvas"); editor.put("resourceId", "canvas"); @@ -189,10 +181,8 @@ public class ActivitiController extends BaseController { */ @GetMapping(value = "showAct") @ResponseBody - public ReType showAct(org.springframework.ui.Model model, ProcessDefinition definition, - String page, String limit) { - ProcessDefinitionQuery processDefinitionQuery = repositoryService - .createProcessDefinitionQuery(); + public ReType showAct(org.springframework.ui.Model model, ProcessDefinition definition, String page, String limit) { + ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); List processDefinitionList = null; if (definition != null) { if (!StringUtils.isEmpty(definition.getDeploymentId())) { @@ -203,16 +193,15 @@ public class ActivitiController extends BaseController { } } - processDefinitionList = processDefinitionQuery.listPage(Integer.valueOf(limit) * (Integer.valueOf(page) - 1), Integer.valueOf(limit)); + processDefinitionList = processDefinitionQuery.listPage(Integer.valueOf(limit) * (Integer.valueOf(page) - 1), + Integer.valueOf(limit)); long count = repositoryService.createProcessDefinitionQuery().count(); -// long count = repositoryService.createDeploymentQuery().count(); + // long count = repositoryService.createDeploymentQuery().count(); List list = new ArrayList<>(); - processDefinitionList - .forEach(processDefinition -> list.add(new ProcessDefinition(processDefinition))); + processDefinitionList.forEach(processDefinition -> list.add(new ProcessDefinition(processDefinition))); return new ReType(count, list); } - @GetMapping(value = "goActModel") public String goActModel(org.springframework.ui.Model model) { return "/actModelList"; @@ -223,8 +212,7 @@ public class ActivitiController extends BaseController { */ @GetMapping(value = "showAm") @ResponseBody - public ReType showModel(org.springframework.ui.Model model, ActModel actModel, String page, - String limit) { + public ReType showModel(org.springframework.ui.Model model, ActModel actModel, String page, String limit) { ModelQuery modelQuery = repositoryService.createModelQuery(); if (actModel != null) { if (!StringUtils.isEmpty(actModel.getKey())) { @@ -234,8 +222,8 @@ public class ActivitiController extends BaseController { modelQuery.modelNameLike("%" + actModel.getName() + "%"); } } - List models = modelQuery - .listPage(Integer.valueOf(limit) * (Integer.valueOf(page) - 1), Integer.valueOf(limit)); + List models = + modelQuery.listPage(Integer.valueOf(limit) * (Integer.valueOf(page) - 1), Integer.valueOf(limit)); long count = repositoryService.createModelQuery().count(); List list = new ArrayList<>(); models.forEach(mo -> list.add(new ActModel(mo))); @@ -264,15 +252,13 @@ public class ActivitiController extends BaseController { return LenResponse.error("数据不符合要求"); } byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model); - //发布流程 + // 发布流程 String processName = modelData.getName() + ".bpmn20.xml"; String convertToXML = new String(bpmnBytes); System.out.println(convertToXML); - Deployment deployment = repositoryService.createDeployment() - .name(modelData.getName()) - .addString(processName, new String(bpmnBytes, "UTF-8")) - .deploy(); + Deployment deployment = repositoryService.createDeployment().name(modelData.getName()) + .addString(processName, new String(bpmnBytes, "UTF-8")).deploy(); modelData.setDeploymentId(deployment.getId()); repositoryService.saveModel(modelData); } catch (LenException e) { @@ -285,7 +271,6 @@ public class ActivitiController extends BaseController { return j; } - /** * 根据流程部署id获取节点并且传到前端 * @@ -294,11 +279,10 @@ public class ActivitiController extends BaseController { * @return */ @GetMapping("goAssignee/{deploymentId}") - public String goAssignee(@PathVariable("deploymentId") String deploymentId, - org.springframework.ui.Model model) { - /**根据流程实例id查询出所有流程节点*/ + public String goAssignee(@PathVariable("deploymentId") String deploymentId, org.springframework.ui.Model model) { + /** 根据流程实例id查询出所有流程节点 */ List activityList = actAssigneeService.getActivityList(deploymentId); - /**角色和节点关系封装成list*/ + /** 角色和节点关系封装成list */ List roleList = roleService.list(); Checkbox checkbox = null; Map map = null; @@ -307,11 +291,11 @@ public class ActivitiController extends BaseController { List checkboxList = null; for (ActivityImpl activiti : activityList) { map = new HashMap<>(); - String name = (String) activiti.getProperty("name"); + String name = (String)activiti.getProperty("name"); if (StringUtils.isEmpty(name) || "start".equals(name) || "end".equals(name)) { continue; } - //节点id 、name、节点目前关联的角色 封装成进map + // 节点id 、name、节点目前关联的角色 封装成进map String nodeId = activiti.getId(); assigneeList = actAssigneeService.list(new QueryWrapper<>(new ActAssignee(nodeId))); List strings = new ArrayList<>(); @@ -356,16 +340,16 @@ public class ActivitiController extends BaseController { String nodeId = entry.getKey().substring(0, sub); nodeId = nodeId.substring(nodeId.lastIndexOf("_") + 1, nodeId.length()); String nodeName = entry.getKey().substring(entry.getKey().lastIndexOf("_") + 1, entry.getKey().length()); - //更新进list + // 更新进list assignee.setAssigneeType(3); assignee.setRoleId(entry.getValue()[0]); assignee.setSid(nodeId); assignee.setActivtiName(nodeName); - //先清除 + // 先清除 actAssigneeService.deleteByNodeId(nodeId); assigneeList.add(assignee); } - //后添加 在map循环里添加 多角色会导致添加了的再次被删除 so 要拿出来 + // 后添加 在map循环里添加 多角色会导致添加了的再次被删除 so 要拿出来 for (ActAssignee actAssignee : assigneeList) { actAssigneeService.save(actAssignee); } @@ -391,7 +375,7 @@ public class ActivitiController extends BaseController { if (StringUtils.isEmpty(nodeId) || "start".equals(nodeId) || "end".equals(nodeId)) { continue; } - /**接触节点和代办关联*/ + /** 接触节点和代办关联 */ actAssigneeService.deleteByNodeId(nodeId); } repositoryService.deleteDeployment(id, true); @@ -404,9 +388,6 @@ public class ActivitiController extends BaseController { return j; } - @Autowired - ActPropertiesConfig actPropertiesConfig; - @GetMapping("shinePics/{processInstanceId}") public String shinePics(org.springframework.ui.Model model, @PathVariable String processInstanceId) { model.addAttribute("processInstanceId", processInstanceId); @@ -416,7 +397,7 @@ public class ActivitiController extends BaseController { @GetMapping("getShineProcImage") @ResponseBody public JSONObject getShineProcImage(HttpServletRequest request, HttpServletResponse resp, String processInstanceId) - throws IOException { + throws IOException { JSONObject result = new JSONObject(); JSONArray shineProImages = new JSONArray(); InputStream imageStream = activitiService.generateStream(processInstanceId, true); @@ -436,7 +417,6 @@ public class ActivitiController extends BaseController { List taskSqu = activitiService.getTaskSqu(processInstanceId); - result.put("id", UUID.randomUUID().toString()); result.put("errorNo", 0); result.put("images", shineProImages); @@ -463,5 +443,4 @@ public class ActivitiController extends BaseController { return j; } - } diff --git a/len-activiti/src/main/java/com/len/controller/UserLeaveController.java b/len-activiti/src/main/java/com/len/controller/UserLeaveController.java index 25a92cd..cde019d 100644 --- a/len-activiti/src/main/java/com/len/controller/UserLeaveController.java +++ b/len-activiti/src/main/java/com/len/controller/UserLeaveController.java @@ -1,37 +1,28 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.controller; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.github.pagehelper.Page; -import com.github.pagehelper.PageHelper; -import com.len.base.BaseController; -import com.len.base.CurrentUser; -import com.len.core.shiro.Principal; -import com.len.entity.BaseTask; -import com.len.entity.LeaveOpinion; -import com.len.entity.SysRoleUser; -import com.len.entity.UserLeave; -import com.len.exception.LenException; -import com.len.service.RoleUserService; -import com.len.service.UserLeaveService; -import com.len.util.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.List; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.*; import org.activiti.engine.history.HistoricActivityInstance; @@ -52,24 +43,33 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import sun.misc.BASE64Encoder; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; -import java.util.List; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.len.base.BaseController; +import com.len.base.CurrentUser; +import com.len.core.shiro.Principal; +import com.len.entity.BaseTask; +import com.len.entity.LeaveOpinion; +import com.len.entity.SysRoleUser; +import com.len.entity.UserLeave; +import com.len.exception.LenException; +import com.len.service.RoleUserService; +import com.len.service.UserLeaveService; +import com.len.util.*; + +import sun.misc.BASE64Encoder; /** * @author zhuxiaomeng * @date 2018/1/21. * @email lenospmiller@gmail.com - *

- * 请假流程示例 + *

+ * 请假流程示例 */ @Controller @RequestMapping("/leave") @@ -98,16 +98,15 @@ public class UserLeaveController extends BaseController { @Autowired RoleUserService roleUserService; - + @Autowired + HistoryService historyService; private String leaveOpinionList = "leaveOpinionList"; - @GetMapping(value = "showMain") public String showMain(Model model) { return "/dashboard/dashboard"; } - @GetMapping(value = "showMain2") public String showMain2(Model model) { return "/dashboard/dashboard2"; @@ -129,10 +128,11 @@ public class UserLeaveController extends BaseController { tList = leaveService.selectListByPage(userLeave); for (UserLeave leave : tList) { ProcessInstance instance = runtimeService.createProcessInstanceQuery() - .processInstanceId(leave.getProcessInstanceId()).singleResult(); - //保证运行ing + .processInstanceId(leave.getProcessInstanceId()).singleResult(); + // 保证运行ing if (instance != null) { - Task task = this.taskService.createTaskQuery().processInstanceId(leave.getProcessInstanceId()).singleResult(); + Task task = this.taskService.createTaskQuery().processInstanceId(leave.getProcessInstanceId()) + .singleResult(); leave.setTaskName(task.getName()); } } @@ -151,9 +151,9 @@ public class UserLeaveController extends BaseController { */ @GetMapping("leaveDetail") public String leaveDetail(Model model, String processId) { - ProcessInstance instance = runtimeService.createProcessInstanceQuery() - .processInstanceId(processId).singleResult(); - //保证运行ing + ProcessInstance instance = + runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult(); + // 保证运行ing List leaveList = null; if (instance != null) { Task task = this.taskService.createTaskQuery().processInstanceId(processId).singleResult(); @@ -161,18 +161,17 @@ public class UserLeaveController extends BaseController { Object o = variables.get(leaveOpinionList); if (o != null) { /*获取历史审核信息*/ - leaveList = (List) o; + leaveList = (List)o; } } else { leaveList = new ArrayList<>(); - List list = historyService.createHistoricDetailQuery(). - processInstanceId(processId).list(); + List list = historyService.createHistoricDetailQuery().processInstanceId(processId).list(); HistoricVariableUpdate variable = null; for (HistoricDetail historicDetail : list) { - variable = (HistoricVariableUpdate) historicDetail; + variable = (HistoricVariableUpdate)historicDetail; if (leaveOpinionList.equals(variable.getVariableName())) { leaveList.clear(); - leaveList.addAll((List) variable.getValue()); + leaveList.addAll((List)variable.getValue()); } } } @@ -188,7 +187,7 @@ public class UserLeaveController extends BaseController { @GetMapping("updateLeave/{taskId}") public String updateLeave(Model model, @PathVariable String taskId) { Map variables = taskService.getVariables(taskId); - BaseTask baseTask = (BaseTask) variables.get("baseTask"); + BaseTask baseTask = (BaseTask)variables.get("baseTask"); UserLeave leave = leaveService.getById(baseTask.getId()); model.addAttribute("leave", leave); model.addAttribute("taskId", taskId); @@ -197,7 +196,8 @@ public class UserLeaveController extends BaseController { @PostMapping("updateLeave/updateLeave/{taskId}/{id}/{flag}") @ResponseBody - public LenResponse updateLeave(UserLeave leave, @PathVariable String taskId, @PathVariable String id, @PathVariable boolean flag) { + public LenResponse updateLeave(UserLeave leave, @PathVariable String taskId, @PathVariable String id, + @PathVariable boolean flag) { LenResponse j = new LenResponse(); try { UserLeave oldLeave = leaveService.getById(leave.getId()); @@ -222,7 +222,6 @@ public class UserLeaveController extends BaseController { return j; } - @PostMapping("addLeave") @ResponseBody public LenResponse addLeave(UserLeave userLeave) { @@ -234,7 +233,7 @@ public class UserLeaveController extends BaseController { long endTime = userLeave.getEndTime().getTime(); int days = 1; if (endTime != beginTime) { - days += (int) ((endTime - beginTime) / (1000 * 60 * 60 * 24)); + days += (int)((endTime - beginTime) / (1000 * 60 * 60 * 24)); } if (days <= 0) { return LenResponse.error("时间输入有误"); @@ -309,7 +308,7 @@ public class UserLeaveController extends BaseController { } map = taskService.getVariables(taskId); - BaseTask userLeave = (BaseTask) map.get("baseTask"); + BaseTask userLeave = (BaseTask)map.get("baseTask"); taskEntity = new com.len.entity.Task(task1); taskEntity.setUserName(userLeave.getUserName()); @@ -318,7 +317,7 @@ public class UserLeaveController extends BaseController { /*如果是自己*/ if (user.getId().equals(userLeave.getUserId())) { if (map.get("flag") != null) { - if (!(boolean) map.get("flag")) { + if (!(boolean)map.get("flag")) { objectMap.put("flag", true); } else { objectMap.put("flag", false); @@ -339,8 +338,8 @@ public class UserLeaveController extends BaseController { @GetMapping("agent/{id}") public String agent(Model model, @PathVariable("id") String taskId) { Map variables = taskService.getVariables(taskId); - BaseTask baseTask = (BaseTask) variables.get("baseTask"); -// UserLeave userLeave = leaveService.selectByPrimaryKey(baseTask.getId()); + BaseTask baseTask = (BaseTask)variables.get("baseTask"); + // UserLeave userLeave = leaveService.selectByPrimaryKey(baseTask.getId()); model.addAttribute("leaveUrl", baseTask.getUrlpath()); model.addAttribute("taskId", taskId); return "/act/task/task-agent-iframe"; @@ -359,38 +358,35 @@ public class UserLeaveController extends BaseController { Map map = new HashMap<>(); map.put("flag", op.isFlag()); - //判断节点是否已经拒绝过一次了 + // 判断节点是否已经拒绝过一次了 Object needend = variables.get("needend"); - if (needend != null && (boolean) needend && (!op.isFlag())) { - map.put("needfinish", -1); //结束 + if (needend != null && (boolean)needend && (!op.isFlag())) { + map.put("needfinish", -1); // 结束 } else { if (op.isFlag()) { - map.put("needfinish", 1);//通过下一个节点 + map.put("needfinish", 1);// 通过下一个节点 } else { - map.put("needfinish", 0);//不通过 + map.put("needfinish", 0);// 不通过 } } - //审批信息叠加 + // 审批信息叠加 List leaveList = new ArrayList<>(); Object o = variables.get(leaveOpinionList); if (o != null) { - leaveList = (List) o; + leaveList = (List)o; } leaveList.add(op); - UserLeave userLeave=(UserLeave)variables.get("baseTask"); - map.put("day",userLeave.getDays()); + UserLeave userLeave = (UserLeave)variables.get("baseTask"); + map.put("day", userLeave.getDays()); map.put(leaveOpinionList, leaveList); - j.setMsg("审核成功" + (op.isFlag() ? "[通过]" : "[未通过]")); + j.setMsg( + "审核成功" + (op.isFlag() ? "[通过]" : "[未通过]")); taskService.complete(op.getTaskId(), map); return j; } - @Autowired - HistoryService historyService; - /** - * 追踪图片成图 - * 增加历史流程 + * 追踪图片成图 增加历史流程 * * @param request * @param resp @@ -399,7 +395,7 @@ public class UserLeaveController extends BaseController { */ @GetMapping("getProcImage") public void getProcImage(HttpServletRequest request, HttpServletResponse resp, String processInstanceId) - throws IOException { + throws IOException { InputStream imageStream = generateStream(request, resp, processInstanceId, true); if (imageStream == null) { return; @@ -416,22 +412,22 @@ public class UserLeaveController extends BaseController { e.start(resp.getOutputStream()); BufferedImage current = ImageIO.read(imageStream); // 读入需要播放的jpg文件 - e.addFrame(current); //添加到帧中 + e.addFrame(current); // 添加到帧中 - e.setDelay(200); //设置播放的延迟时间 + e.setDelay(200); // 设置播放的延迟时间 BufferedImage nocurrent = ImageIO.read(imageNoCurrentStream); // 读入需要播放的jpg文件 - e.addFrame(nocurrent); //添加到帧中 + e.addFrame(nocurrent); // 添加到帧中 e.finish(); -// byte[] b = new byte[1024]; -// int len; -// while ((len = imageStream.read(b, 0, 1024)) != -1) { -// resp.getOutputStream().write(b, 0, len); -// } + // byte[] b = new byte[1024]; + // int len; + // while ((len = imageStream.read(b, 0, 1024)) != -1) { + // resp.getOutputStream().write(b, 0, len); + // } } - //只读图片页面 + // 只读图片页面 @GetMapping("shinePics/{processInstanceId}") public String shinePics(Model model, @PathVariable String processInstanceId) { model.addAttribute("processInstanceId", processInstanceId); @@ -441,7 +437,7 @@ public class UserLeaveController extends BaseController { @GetMapping("getShineProcImage") @ResponseBody public String getShineProcImage(HttpServletRequest request, HttpServletResponse resp, String processInstanceId) - throws IOException { + throws IOException { JSONObject result = new JSONObject(); JSONArray shineProImages = new JSONArray(); BASE64Encoder encoder = new BASE64Encoder(); @@ -465,11 +461,12 @@ public class UserLeaveController extends BaseController { return result.toJSONString(); } - - public InputStream generateStream(HttpServletRequest request, HttpServletResponse resp, String processInstanceId, boolean needCurrent) { - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + public InputStream generateStream(HttpServletRequest request, HttpServletResponse resp, String processInstanceId, + boolean needCurrent) { + ProcessInstance processInstance = + runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); HistoricProcessInstance historicProcessInstance = - historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); String processDefinitionId = null; List executedActivityIdList = new ArrayList(); List currentActivityIdList = new ArrayList<>(); @@ -482,8 +479,8 @@ public class UserLeaveController extends BaseController { } if (historicProcessInstance != null) { processDefinitionId = historicProcessInstance.getProcessDefinitionId(); - historicActivityInstanceList = - historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceId().asc().list(); + historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(processInstanceId).orderByHistoricActivityInstanceId().asc().list(); for (HistoricActivityInstance activityInstance : historicActivityInstanceList) { executedActivityIdList.add(activityInstance.getActivityId()); } @@ -493,24 +490,22 @@ public class UserLeaveController extends BaseController { return null; } - //高亮线路id集合 - ProcessDefinitionEntity definitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId); + // 高亮线路id集合 + ProcessDefinitionEntity definitionEntity = + (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinitionId); List highLightedFlows = getHighLightedFlows(definitionEntity, historicActivityInstanceList); BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); - //List activeActivityIds = runtimeService.getActiveActivityIds(processInstanceId); + // List activeActivityIds = runtimeService.getActiveActivityIds(processInstanceId); processEngineConfiguration = processEngine.getProcessEngineConfiguration(); - Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration); - HMProcessDiagramGenerator diagramGenerator = (HMProcessDiagramGenerator) processEngineConfiguration.getProcessDiagramGenerator(); - //List activeIds = this.runtimeService.getActiveActivityIds(processInstance.getId()); - - InputStream imageStream = diagramGenerator.generateDiagram( - bpmnModel, "png", - executedActivityIdList, highLightedFlows, - processEngine.getProcessEngineConfiguration().getActivityFontName(), - processEngine.getProcessEngineConfiguration().getLabelFontName(), - "宋体", - null, 1.0, currentActivityIdList); + Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl)processEngineConfiguration); + HMProcessDiagramGenerator diagramGenerator = + (HMProcessDiagramGenerator)processEngineConfiguration.getProcessDiagramGenerator(); + // List activeIds = this.runtimeService.getActiveActivityIds(processInstance.getId()); + + InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", executedActivityIdList, + highLightedFlows, processEngine.getProcessEngineConfiguration().getActivityFontName(), + processEngine.getProcessEngineConfiguration().getLabelFontName(), "宋体", null, 1.0, currentActivityIdList); return imageStream; } @@ -522,43 +517,35 @@ public class UserLeaveController extends BaseController { * @param historicActivityInstances * @return */ - private List getHighLightedFlows( - ProcessDefinitionEntity processDefinitionEntity, - List historicActivityInstances) { + private List getHighLightedFlows(ProcessDefinitionEntity processDefinitionEntity, + List historicActivityInstances) { List highFlows = new ArrayList();// 用以保存高亮的线flowId for (int i = 0; i < historicActivityInstances.size() - 1; i++) {// 对历史流程节点进行遍历 - ActivityImpl activityImpl = processDefinitionEntity - .findActivity(historicActivityInstances.get(i) - .getActivityId());// 得到节点定义的详细信息 + ActivityImpl activityImpl = + processDefinitionEntity.findActivity(historicActivityInstances.get(i).getActivityId());// 得到节点定义的详细信息 List sameStartTimeNodes = new ArrayList();// 用以保存后需开始时间相同的节点 - ActivityImpl sameActivityImpl1 = processDefinitionEntity - .findActivity(historicActivityInstances.get(i + 1) - .getActivityId()); + ActivityImpl sameActivityImpl1 = + processDefinitionEntity.findActivity(historicActivityInstances.get(i + 1).getActivityId()); // 将后面第一个节点放在时间相同节点的集合里 sameStartTimeNodes.add(sameActivityImpl1); for (int j = i + 1; j < historicActivityInstances.size() - 1; j++) { - HistoricActivityInstance activityImpl1 = historicActivityInstances - .get(j);// 后续第一个节点 - HistoricActivityInstance activityImpl2 = historicActivityInstances - .get(j + 1);// 后续第二个节点 - if (activityImpl1.getStartTime().equals( - activityImpl2.getStartTime())) { + HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j);// 后续第一个节点 + HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1);// 后续第二个节点 + if (activityImpl1.getStartTime().equals(activityImpl2.getStartTime())) { // 如果第一个节点和第二个节点开始时间相同保存 - ActivityImpl sameActivityImpl2 = processDefinitionEntity - .findActivity(activityImpl2.getActivityId()); + ActivityImpl sameActivityImpl2 = + processDefinitionEntity.findActivity(activityImpl2.getActivityId()); sameStartTimeNodes.add(sameActivityImpl2); } else { // 有不相同跳出循环 break; } } - List pvmTransitions = activityImpl - .getOutgoingTransitions();// 取出节点的所有出去的线 + List pvmTransitions = activityImpl.getOutgoingTransitions();// 取出节点的所有出去的线 for (PvmTransition pvmTransition : pvmTransitions) { // 对所有的线进行遍历 - ActivityImpl pvmActivityImpl = (ActivityImpl) pvmTransition - .getDestination(); + ActivityImpl pvmActivityImpl = (ActivityImpl)pvmTransition.getDestination(); // 如果取出的线的目标节点存在时间相同的节点里,保存该线的id,进行高亮显示 if (sameStartTimeNodes.contains(pvmActivityImpl)) { highFlows.add(pvmTransition.getId()); @@ -568,5 +555,4 @@ public class UserLeaveController extends BaseController { return highFlows; } - } diff --git a/len-activiti/src/main/java/com/len/entity/ActAssignee.java b/len-activiti/src/main/java/com/len/entity/ActAssignee.java index b841f36..03a1926 100644 --- a/len-activiti/src/main/java/com/len/entity/ActAssignee.java +++ b/len-activiti/src/main/java/com/len/entity/ActAssignee.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; - @TableName(value = "act_assignee") public class ActAssignee { @TableId(value = "id", type = IdType.UUID) @@ -41,6 +40,12 @@ public class ActAssignee { @TableField(value = "activti_name") private String activtiName; + public ActAssignee() {} + + public ActAssignee(String sid) { + this.sid = sid; + } + /** * @return id */ @@ -144,11 +149,4 @@ public class ActAssignee { public void setActivtiName(String activtiName) { this.activtiName = activtiName == null ? null : activtiName.trim(); } - - public ActAssignee() { - } - - public ActAssignee(String sid) { - this.sid = sid; - } } \ No newline at end of file diff --git a/len-activiti/src/main/java/com/len/entity/ActDeployment.java b/len-activiti/src/main/java/com/len/entity/ActDeployment.java index 39df8d3..d4e719f 100644 --- a/len-activiti/src/main/java/com/len/entity/ActDeployment.java +++ b/len-activiti/src/main/java/com/len/entity/ActDeployment.java @@ -1,49 +1,46 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.entity; import java.io.Serializable; import java.util.Date; + +import org.activiti.engine.repository.Deployment; + import lombok.Getter; import lombok.Setter; -import org.activiti.engine.repository.Deployment; /** * @author zhuxiaomeng * @date 2018/1/15. - * @email lenospmiller@gmail.com - * 流程部署表 + * @email lenospmiller@gmail.com 流程部署表 */ @Getter @Setter public class ActDeployment implements Serializable { - private String id; - private String name; - private Date deploymentTime; - private String category; - private String tenantId; + private String id; + private String name; + private Date deploymentTime; + private String category; + private String tenantId; - public ActDeployment() { - } + public ActDeployment() {} - public ActDeployment(Deployment deployment) { - this.id = deployment.getId(); - this.name = deployment.getName(); - this.deploymentTime = deployment.getDeploymentTime(); - this.category = deployment.getCategory(); - this.tenantId = deployment.getTenantId(); - } + public ActDeployment(Deployment deployment) { + this.id = deployment.getId(); + this.name = deployment.getName(); + this.deploymentTime = deployment.getDeploymentTime(); + this.category = deployment.getCategory(); + this.tenantId = deployment.getTenantId(); + } } diff --git a/len-activiti/src/main/java/com/len/entity/ActModel.java b/len-activiti/src/main/java/com/len/entity/ActModel.java index 479b4c5..9229a5b 100644 --- a/len-activiti/src/main/java/com/len/entity/ActModel.java +++ b/len-activiti/src/main/java/com/len/entity/ActModel.java @@ -1,64 +1,56 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.entity; import java.util.Date; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; import org.activiti.engine.repository.Model; +import lombok.Data; + /** * @author zhuxiaomeng * @date 2018/1/18. - * @email lenospmiller@gmail.com - * 模型列表 + * @email lenospmiller@gmail.com 模型列表 */ @Data public class ActModel { - private String id; - private String name; - private String key; - private String category; - private Date createTime; - private Date lastUpdateTime; - private Integer version; - private String metaInfo; - private String deploymentId; - private String tenantId; - private boolean hasEditorSource; - + private String id; + private String name; + private String key; + private String category; + private Date createTime; + private Date lastUpdateTime; + private Integer version; + private String metaInfo; + private String deploymentId; + private String tenantId; + private boolean hasEditorSource; - public ActModel() { - } + public ActModel() {} - public ActModel(Model model) { - this.id = model.getId(); - this.name = model.getName(); - this.key = model.getKey(); - this.category = model.getCategory(); - this.createTime = model.getCreateTime(); - this.lastUpdateTime = model.getLastUpdateTime(); - this.version = model.getVersion(); - this.metaInfo = model.getMetaInfo(); - this.deploymentId = model.getDeploymentId(); - this.tenantId = model.getTenantId(); - this.hasEditorSource = model.hasEditorSource(); - } + public ActModel(Model model) { + this.id = model.getId(); + this.name = model.getName(); + this.key = model.getKey(); + this.category = model.getCategory(); + this.createTime = model.getCreateTime(); + this.lastUpdateTime = model.getLastUpdateTime(); + this.version = model.getVersion(); + this.metaInfo = model.getMetaInfo(); + this.deploymentId = model.getDeploymentId(); + this.tenantId = model.getTenantId(); + this.hasEditorSource = model.hasEditorSource(); + } } diff --git a/len-activiti/src/main/java/com/len/entity/BaseTask.java b/len-activiti/src/main/java/com/len/entity/BaseTask.java index 76769ff..9ecc044 100644 --- a/len-activiti/src/main/java/com/len/entity/BaseTask.java +++ b/len-activiti/src/main/java/com/len/entity/BaseTask.java @@ -9,6 +9,19 @@ import java.util.Date; public abstract class BaseTask implements Serializable { protected String id; + protected String userId; + protected String userName; + protected String processInstanceId; + protected String status; + protected Date createDate; + protected String createBy; + protected Date updateDate; + protected String updateBy; + protected String reason; + // ***实时节点信息 + protected String taskName; + private String urlpath; + private Integer submittimes; /** * @return id @@ -24,38 +37,6 @@ public abstract class BaseTask implements Serializable { this.id = id == null ? null : id.trim(); } - - protected String userId; - - protected String userName; - - - protected String processInstanceId; - - protected String status; - - protected Date createDate; - - protected String createBy; - - protected Date updateDate; - - protected String updateBy; - - - protected String reason; - - - //***实时节点信息 - protected String taskName; - - - private String urlpath; - - - private Integer submittimes; - - /** * @return user_id */ @@ -84,7 +65,6 @@ public abstract class BaseTask implements Serializable { this.userName = userName == null ? null : userName.trim(); } - /** * @return reason */ diff --git a/len-activiti/src/main/java/com/len/entity/LeaveOpinion.java b/len-activiti/src/main/java/com/len/entity/LeaveOpinion.java index 454af09..4386b4c 100644 --- a/len-activiti/src/main/java/com/len/entity/LeaveOpinion.java +++ b/len-activiti/src/main/java/com/len/entity/LeaveOpinion.java @@ -1,22 +1,20 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.entity; import java.io.Serializable; import java.util.Date; + import lombok.Getter; import lombok.Setter; @@ -26,19 +24,19 @@ import lombok.Setter; */ @Getter @Setter -public class LeaveOpinion implements Serializable{ +public class LeaveOpinion implements Serializable { - //审批人id - private String opId; - //审批人姓名 - private String opName; - //审批意见 - private String opinion; - //审批时间 - private Date createTime; - //是否通过 - private boolean flag; - //流程id - private String taskId; + // 审批人id + private String opId; + // 审批人姓名 + private String opName; + // 审批意见 + private String opinion; + // 审批时间 + private Date createTime; + // 是否通过 + private boolean flag; + // 流程id + private String taskId; } diff --git a/len-activiti/src/main/java/com/len/entity/ProcessDefinition.java b/len-activiti/src/main/java/com/len/entity/ProcessDefinition.java index 00cdec5..a9d86ad 100644 --- a/len-activiti/src/main/java/com/len/entity/ProcessDefinition.java +++ b/len-activiti/src/main/java/com/len/entity/ProcessDefinition.java @@ -1,17 +1,14 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.entity; @@ -22,43 +19,42 @@ import lombok.ToString; /** * @author zhuxiaomeng * @date 2018/1/21. - * @email lenospmiller@gmail.com - * 流程定义实体 + * @email lenospmiller@gmail.com 流程定义实体 */ @Getter @Setter @ToString public class ProcessDefinition { - private String id; - private String category; - private String name; - private String key; - private String description; - private int version; - private String resourceName; - private String deploymentId; - private String diagramResourceName; - private boolean hasStartFormKey; - private boolean hasGraphicalNotation; - private boolean isSuspended; - private String tenantId; + private String id; + private String category; + private String name; + private String key; + private String description; + private int version; + private String resourceName; + private String deploymentId; + private String diagramResourceName; + private boolean hasStartFormKey; + private boolean hasGraphicalNotation; + private boolean isSuspended; + private String tenantId; - public ProcessDefinition() { - } - public ProcessDefinition(org.activiti.engine.repository.ProcessDefinition p) { - this.id=p.getId(); - this.category=p.getCategory(); - this.name=p.getName(); - this.key=p.getKey(); - this.description=p.getDescription(); - this.version=p.getVersion(); - this.resourceName=p.getResourceName(); - this.deploymentId=p.getDeploymentId(); - this.diagramResourceName=p.getDiagramResourceName(); - this.hasStartFormKey=p.hasStartFormKey(); - this.hasGraphicalNotation=p.hasGraphicalNotation(); - this.isSuspended=p.isSuspended(); - this.tenantId=p.getTenantId(); + public ProcessDefinition() {} - } + public ProcessDefinition(org.activiti.engine.repository.ProcessDefinition p) { + this.id = p.getId(); + this.category = p.getCategory(); + this.name = p.getName(); + this.key = p.getKey(); + this.description = p.getDescription(); + this.version = p.getVersion(); + this.resourceName = p.getResourceName(); + this.deploymentId = p.getDeploymentId(); + this.diagramResourceName = p.getDiagramResourceName(); + this.hasStartFormKey = p.hasStartFormKey(); + this.hasGraphicalNotation = p.hasGraphicalNotation(); + this.isSuspended = p.isSuspended(); + this.tenantId = p.getTenantId(); + + } } diff --git a/len-activiti/src/main/java/com/len/entity/Task.java b/len-activiti/src/main/java/com/len/entity/Task.java index 4bea8f9..ed9b5af 100644 --- a/len-activiti/src/main/java/com/len/entity/Task.java +++ b/len-activiti/src/main/java/com/len/entity/Task.java @@ -1,21 +1,19 @@ /** * Copyright 2018 lenos *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package com.len.entity; import java.util.Date; + import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -25,35 +23,36 @@ import lombok.ToString; * @date 2018/1/21. * @email lenospmiller@gmail.com * - * 流程任务 + * 流程任务 */ @Getter @Setter @ToString public class Task { - private String id; - private String name; - private Date createTime; - private String assignee; - private String processInstanceId;//流程实例id - private String processDefinitionId;//流程定义id - private String description; - private String category; + private String id; + private String name; + private Date createTime; + private String assignee; + private String processInstanceId;// 流程实例id + private String processDefinitionId;// 流程定义id + private String description; + private String category; + + private String userName; + private String reason; + private String urlpath; + + public Task() {} - private String userName; - private String reason; - private String urlpath; - public Task() { - } - public Task(org.activiti.engine.task.Task t) { - this.id=t.getId(); - this.name=t.getName(); - this.createTime=t.getCreateTime(); - this.assignee=t.getAssignee(); - this.processInstanceId=t.getProcessInstanceId(); - this.processDefinitionId=t.getProcessDefinitionId(); - this.description=t.getDescription(); - this.category=t.getCategory(); - } + public Task(org.activiti.engine.task.Task t) { + this.id = t.getId(); + this.name = t.getName(); + this.createTime = t.getCreateTime(); + this.assignee = t.getAssignee(); + this.processInstanceId = t.getProcessInstanceId(); + this.processDefinitionId = t.getProcessDefinitionId(); + this.description = t.getDescription(); + this.category = t.getCategory(); + } } diff --git a/len-activiti/src/main/java/com/len/entity/UserLeave.java b/len-activiti/src/main/java/com/len/entity/UserLeave.java index 276e40e..d58bf95 100644 --- a/len-activiti/src/main/java/com/len/entity/UserLeave.java +++ b/len-activiti/src/main/java/com/len/entity/UserLeave.java @@ -1,75 +1,63 @@ package com.len.entity; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - @TableName(value = "user_leave") public class UserLeave extends BaseTask { @TableId(value = "id", type = IdType.UUID) protected String id; - - /** - * @return id - */ - @Override - public String getId() { - return id; - } - - /** - * @param id - */ - @Override - public void setId(String id) { - this.id = id == null ? null : id.trim(); - } - private Integer days; - @TableField(value = "begin_time") private Date beginTime; - @TableField(value = "end_time") private Date endTime; - @TableField(value = "process_instance_Id") private String processInstanceId; - private String status; - @TableField(value = "create_date") private Date createDate; - @TableField(value = "create_by") private String createBy; - @TableField(value = "update_date") private Date updateDate; - @TableField(value = "update_by") private String updateBy; - - //***实时节点信息 + // ***实时节点信息 @TableField(exist = false) private String taskName; + // 请假单审核信息 + @TableField(exist = false) + private List opinionList = new ArrayList<>(); + /** + * @return id + */ + @Override + public String getId() { + return id; + } + /** + * @param id + */ + @Override + public void setId(String id) { + this.id = id == null ? null : id.trim(); + } - //请假单审核信息 - @TableField(exist = false) - private List opinionList=new ArrayList<>(); - - public void leaveOpAdd(LeaveOpinion leaveOpinion){ + public void leaveOpAdd(LeaveOpinion leaveOpinion) { this.opinionList.add(leaveOpinion); } - public void leaveOpAddAll(List leaveOpinionList){ + + public void leaveOpAddAll(List leaveOpinionList) { this.opinionList.addAll(leaveOpinionList); } @@ -81,8 +69,6 @@ public class UserLeave extends BaseTask { this.opinionList = opinionList; } - - /** * @return days */ @@ -97,23 +83,18 @@ public class UserLeave extends BaseTask { this.days = days; } - - public Date getBeginTime() { return beginTime; } - public void setBeginTime(Date beginTime) { this.beginTime = beginTime; } - public Date getEndTime() { return endTime; } - public void setEndTime(Date endTime) { this.endTime = endTime; } diff --git a/len-activiti/src/main/java/com/len/mapper/UserLeaveMapper.java b/len-activiti/src/main/java/com/len/mapper/UserLeaveMapper.java index a15dc9d..1c4674e 100644 --- a/len-activiti/src/main/java/com/len/mapper/UserLeaveMapper.java +++ b/len-activiti/src/main/java/com/len/mapper/UserLeaveMapper.java @@ -3,5 +3,4 @@ package com.len.mapper; import com.len.base.BaseMapper; import com.len.entity.UserLeave; -public interface UserLeaveMapper extends BaseMapper { -} \ No newline at end of file +public interface UserLeaveMapper extends BaseMapper {} \ No newline at end of file diff --git a/len-activiti/src/main/java/com/len/service/ActAssigneeService.java b/len-activiti/src/main/java/com/len/service/ActAssigneeService.java index 6ec20ce..fd25032 100644 --- a/len-activiti/src/main/java/com/len/service/ActAssigneeService.java +++ b/len-activiti/src/main/java/com/len/service/ActAssigneeService.java @@ -1,10 +1,11 @@ package com.len.service; -import com.len.base.BaseService; -import com.len.entity.ActAssignee; +import java.util.List; + import org.activiti.engine.impl.pvm.process.ActivityImpl; -import java.util.List; +import com.len.base.BaseService; +import com.len.entity.ActAssignee; /** * @author zhuxiaomeng @@ -12,10 +13,10 @@ import java.util.List; * @email lenospmiller@gmail.com */ public interface ActAssigneeService extends BaseService { - int deleteByNodeId(String nodeId); + int deleteByNodeId(String nodeId); - public List getActivityList(String deploymentId); + public List getActivityList(String deploymentId); - public List selectAllActivity(List activities); + public List selectAllActivity(List activities); } diff --git a/len-activiti/src/main/java/com/len/service/UserLeaveService.java b/len-activiti/src/main/java/com/len/service/UserLeaveService.java index cc174b4..551b7e8 100644 --- a/len-activiti/src/main/java/com/len/service/UserLeaveService.java +++ b/len-activiti/src/main/java/com/len/service/UserLeaveService.java @@ -1,10 +1,10 @@ package com.len.service; +import java.util.List; + import com.len.base.BaseService; import com.len.entity.UserLeave; -import java.util.List; - /** * @author zhuxiaomeng * @date 2018/1/21. diff --git a/len-activiti/src/main/java/com/len/service/impl/ActAssigneeServiceImpl.java b/len-activiti/src/main/java/com/len/service/impl/ActAssigneeServiceImpl.java index 6ba629a..a22d005 100644 --- a/len-activiti/src/main/java/com/len/service/impl/ActAssigneeServiceImpl.java +++ b/len-activiti/src/main/java/com/len/service/impl/ActAssigneeServiceImpl.java @@ -1,9 +1,9 @@ package com.len.service.impl; -import com.len.base.impl.BaseServiceImpl; -import com.len.entity.ActAssignee; -import com.len.mapper.ActAssigneeMapper; -import com.len.service.ActAssigneeService; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + import org.activiti.bpmn.converter.BpmnXMLConverter; import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.RepositoryService; @@ -14,9 +14,10 @@ import org.activiti.engine.impl.util.io.InputStreamSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; +import com.len.base.impl.BaseServiceImpl; +import com.len.entity.ActAssignee; +import com.len.mapper.ActAssigneeMapper; +import com.len.service.ActAssigneeService; /** * @author zhuxiaomeng @@ -24,8 +25,8 @@ import java.util.List; * @email lenospmiller@gmail.com */ @Service -public class ActAssigneeServiceImpl extends BaseServiceImpl implements - ActAssigneeService { +public class ActAssigneeServiceImpl extends BaseServiceImpl + implements ActAssigneeService { @Autowired ActAssigneeMapper actAssigneeMapper; @@ -40,11 +41,13 @@ public class ActAssigneeServiceImpl extends BaseServiceImpl getActivityList(String deploymentId) { - org.activiti.engine.repository.ProcessDefinition processDefinition = repositoryService - .createProcessDefinitionQuery().deploymentId(deploymentId).singleResult(); - ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService) + org.activiti.engine.repository.ProcessDefinition processDefinition = + repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult(); + ProcessDefinitionEntity processDefinitionEntity = + (ProcessDefinitionEntity)((RepositoryServiceImpl)repositoryService) .getDeployedProcessDefinition(processDefinition.getId()); - InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); + InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), + processDefinition.getResourceName()); BpmnModel bm = new BpmnXMLConverter().convertToBpmnModel(new InputStreamSource(inputStream), false, true); return selectAllActivity(processDefinitionEntity.getActivities()); diff --git a/len-activiti/src/main/java/com/len/service/impl/UserLeaveServiceImpl.java b/len-activiti/src/main/java/com/len/service/impl/UserLeaveServiceImpl.java index fdf6eda..6fcb087 100644 --- a/len-activiti/src/main/java/com/len/service/impl/UserLeaveServiceImpl.java +++ b/len-activiti/src/main/java/com/len/service/impl/UserLeaveServiceImpl.java @@ -1,13 +1,14 @@ package com.len.service.impl; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + import com.len.base.impl.BaseServiceImpl; import com.len.entity.UserLeave; import com.len.mapper.UserLeaveMapper; import com.len.service.UserLeaveService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; /** * @author zhuxiaomeng @@ -15,8 +16,7 @@ import java.util.List; * @email lenospmiller@gmail.com */ @Service -public class UserLeaveServiceImpl extends BaseServiceImpl implements - UserLeaveService { +public class UserLeaveServiceImpl extends BaseServiceImpl implements UserLeaveService { @Autowired UserLeaveMapper userLeaveMapper; diff --git a/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java b/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java index 62fef8a..0ad7a5f 100644 --- a/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java +++ b/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java @@ -1,17 +1,15 @@ package com.len.util; -import java.awt.Color; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; - + /** - * Class AnimatedGifEncoder - Encodes a GIF file consisting of one or more - * frames. + * Class AnimatedGifEncoder - Encodes a GIF file consisting of one or more frames. * *

  *  Example:
@@ -23,774 +21,727 @@ import java.io.OutputStream;
  *     e.finish();
  * 
* - * No copyright asserted on the source code of this class. May be used for any - * purpose, however, refer to the Unisys LZW patent for restrictions on use of - * the associated LZWEncoder class. Please forward any corrections to + * No copyright asserted on the source code of this class. May be used for any purpose, however, refer to the Unisys LZW + * patent for restrictions on use of the associated LZWEncoder class. Please forward any corrections to * kweiner@fmsware.com. * * @author Kevin Weiner, FM Software * @version 1.03 November 2003 * */ - + public class AnimatedGifEncoder { - - protected int width; // image size - - protected int height; - - protected Color transparent = null; // transparent color if given - - protected int transIndex; // transparent index in color table - - protected int repeat = -1; // no repeat - - protected int delay = 0; // frame delay (hundredths) - - protected boolean started = false; // ready to output frames - - protected OutputStream out; - - protected BufferedImage image; // current frame - - protected byte[] pixels; // BGR byte array from frame - - protected byte[] indexedPixels; // converted frame indexed to palette - - protected int colorDepth; // number of bit planes - - protected byte[] colorTab; // RGB palette - - protected boolean[] usedEntry = new boolean[256]; // active palette entries - - protected int palSize = 7; // color table size (bits-1) - - protected int dispose = -1; // disposal code (-1 = use default) - - protected boolean closeStream = false; // close stream when finished - - protected boolean firstFrame = true; - - protected boolean sizeSet = false; // if false, get size from first frame - - protected int sample = 10; // default sample interval for quantizer - - /** - * Sets the delay time between each frame, or changes it for subsequent frames - * (applies to last frame added). - * - * @param ms - * int delay time in milliseconds - */ - public void setDelay(int ms) { - delay = Math.round(ms / 10.0f); - } - - /** - * Sets the GIF frame disposal code for the last added frame and any - * subsequent frames. Default is 0 if no transparent color has been set, - * otherwise 2. - * - * @param code - * int disposal code. - */ - public void setDispose(int code) { - if (code >= 0) { - dispose = code; + + protected int width; // image size + + protected int height; + + protected Color transparent = null; // transparent color if given + + protected int transIndex; // transparent index in color table + + protected int repeat = -1; // no repeat + + protected int delay = 0; // frame delay (hundredths) + + protected boolean started = false; // ready to output frames + + protected OutputStream out; + + protected BufferedImage image; // current frame + + protected byte[] pixels; // BGR byte array from frame + + protected byte[] indexedPixels; // converted frame indexed to palette + + protected int colorDepth; // number of bit planes + + protected byte[] colorTab; // RGB palette + + protected boolean[] usedEntry = new boolean[256]; // active palette entries + + protected int palSize = 7; // color table size (bits-1) + + protected int dispose = -1; // disposal code (-1 = use default) + + protected boolean closeStream = false; // close stream when finished + + protected boolean firstFrame = true; + + protected boolean sizeSet = false; // if false, get size from first frame + + protected int sample = 10; // default sample interval for quantizer + + /** + * Sets the delay time between each frame, or changes it for subsequent frames (applies to last frame added). + * + * @param ms int delay time in milliseconds + */ + public void setDelay(int ms) { + delay = Math.round(ms / 10.0f); + } + + /** + * Sets the GIF frame disposal code for the last added frame and any subsequent frames. Default is 0 if no + * transparent color has been set, otherwise 2. + * + * @param code int disposal code. + */ + public void setDispose(int code) { + if (code >= 0) { + dispose = code; + } + } + + /** + * Sets the number of times the set of GIF frames should be played. Default is 1; 0 means play indefinitely. Must be + * invoked before the first image is added. + * + * @param iter int number of iterations. + * @return + */ + public void setRepeat(int iter) { + if (iter >= 0) { + repeat = iter; + } + } + + /** + * Sets the transparent color for the last added frame and any subsequent frames. Since all colors are subject to + * modification in the quantization process, the color in the final palette for each frame closest to the given + * color becomes the transparent color for that frame. May be set to null to indicate no transparent color. + * + * @param c Color to be treated as transparent on display. + */ + public void setTransparent(Color c) { + transparent = c; } - } - - /** - * Sets the number of times the set of GIF frames should be played. Default is - * 1; 0 means play indefinitely. Must be invoked before the first image is - * added. - * - * @param iter - * int number of iterations. - * @return - */ - public void setRepeat(int iter) { - if (iter >= 0) { - repeat = iter; + + /** + * Adds next GIF frame. The frame is not written immediately, but is actually deferred until the next frame is + * received so that timing data can be inserted. Invoking finish() flushes all frames. If + * setSize was not invoked, the size of the first image is used for all subsequent frames. + * + * @param im BufferedImage containing frame to write. + * @return true if successful. + */ + public boolean addFrame(BufferedImage im) { + if ((im == null) || !started) { + return false; + } + boolean ok = true; + try { + if (!sizeSet) { + // use first frame's size + setSize(im.getWidth(), im.getHeight()); + } + image = im; + getImagePixels(); // convert to correct format if necessary + analyzePixels(); // build color table & map pixels + if (firstFrame) { + writeLSD(); // logical screen descriptior + writePalette(); // global color table + if (repeat >= 0) { + // use NS app extension to indicate reps + writeNetscapeExt(); + } + } + writeGraphicCtrlExt(); // write graphic control extension + writeImageDesc(); // image descriptor + if (!firstFrame) { + writePalette(); // local color table + } + writePixels(); // encode and write pixel data + firstFrame = false; + } catch (IOException e) { + ok = false; + } + + return ok; } - } - - /** - * Sets the transparent color for the last added frame and any subsequent - * frames. Since all colors are subject to modification in the quantization - * process, the color in the final palette for each frame closest to the given - * color becomes the transparent color for that frame. May be set to null to - * indicate no transparent color. - * - * @param c - * Color to be treated as transparent on display. - */ - public void setTransparent(Color c) { - transparent = c; - } - - /** - * Adds next GIF frame. The frame is not written immediately, but is actually - * deferred until the next frame is received so that timing data can be - * inserted. Invoking finish() flushes all frames. If - * setSize was not invoked, the size of the first image is used - * for all subsequent frames. - * - * @param im - * BufferedImage containing frame to write. - * @return true if successful. - */ - public boolean addFrame(BufferedImage im) { - if ((im == null) || !started) { - return false; + + /** + * Flushes any pending data and closes output file. If writing to an OutputStream, the stream is not closed. + */ + public boolean finish() { + if (!started) + return false; + boolean ok = true; + started = false; + try { + out.write(0x3b); // gif trailer + out.flush(); + if (closeStream) { + out.close(); + } + } catch (IOException e) { + ok = false; + } + + // reset for subsequent use + transIndex = 0; + out = null; + image = null; + pixels = null; + indexedPixels = null; + colorTab = null; + closeStream = false; + firstFrame = true; + + return ok; } - boolean ok = true; - try { - if (!sizeSet) { - // use first frame's size - setSize(im.getWidth(), im.getHeight()); - } - image = im; - getImagePixels(); // convert to correct format if necessary - analyzePixels(); // build color table & map pixels - if (firstFrame) { - writeLSD(); // logical screen descriptior - writePalette(); // global color table - if (repeat >= 0) { - // use NS app extension to indicate reps - writeNetscapeExt(); + + /** + * Sets frame rate in frames per second. Equivalent to setDelay(1000/fps). + * + * @param fps float frame rate (frames per second) + */ + public void setFrameRate(float fps) { + if (fps != 0f) { + delay = Math.round(100f / fps); } - } - writeGraphicCtrlExt(); // write graphic control extension - writeImageDesc(); // image descriptor - if (!firstFrame) { - writePalette(); // local color table - } - writePixels(); // encode and write pixel data - firstFrame = false; - } catch (IOException e) { - ok = false; } - - return ok; - } - - /** - * Flushes any pending data and closes output file. If writing to an - * OutputStream, the stream is not closed. - */ - public boolean finish() { - if (!started) - return false; - boolean ok = true; - started = false; - try { - out.write(0x3b); // gif trailer - out.flush(); - if (closeStream) { - out.close(); - } - } catch (IOException e) { - ok = false; + + /** + * Sets quality of color quantization (conversion of images to the maximum 256 colors allowed by the GIF + * specification). Lower values (minimum = 1) produce better colors, but slow processing significantly. 10 is the + * default, and produces good color mapping at reasonable speeds. Values greater than 20 do not yield significant + * improvements in speed. + * + * @param quality int greater than 0. + * @return + */ + public void setQuality(int quality) { + if (quality < 1) + quality = 1; + sample = quality; } - - // reset for subsequent use - transIndex = 0; - out = null; - image = null; - pixels = null; - indexedPixels = null; - colorTab = null; - closeStream = false; - firstFrame = true; - - return ok; - } - - /** - * Sets frame rate in frames per second. Equivalent to - * setDelay(1000/fps). - * - * @param fps - * float frame rate (frames per second) - */ - public void setFrameRate(float fps) { - if (fps != 0f) { - delay = Math.round(100f / fps); + + /** + * Sets the GIF frame size. The default size is the size of the first frame added if this method is not invoked. + * + * @param w int frame width. + * @param h int frame width. + */ + public void setSize(int w, int h) { + if (started && !firstFrame) + return; + width = w; + height = h; + if (width < 1) + width = 320; + if (height < 1) + height = 240; + sizeSet = true; } - } - - /** - * Sets quality of color quantization (conversion of images to the maximum 256 - * colors allowed by the GIF specification). Lower values (minimum = 1) - * produce better colors, but slow processing significantly. 10 is the - * default, and produces good color mapping at reasonable speeds. Values - * greater than 20 do not yield significant improvements in speed. - * - * @param quality - * int greater than 0. - * @return - */ - public void setQuality(int quality) { - if (quality < 1) - quality = 1; - sample = quality; - } - - /** - * Sets the GIF frame size. The default size is the size of the first frame - * added if this method is not invoked. - * - * @param w - * int frame width. - * @param h - * int frame width. - */ - public void setSize(int w, int h) { - if (started && !firstFrame) - return; - width = w; - height = h; - if (width < 1) - width = 320; - if (height < 1) - height = 240; - sizeSet = true; - } - - /** - * Initiates GIF file creation on the given stream. The stream is not closed - * automatically. - * - * @param os - * OutputStream on which GIF images are written. - * @return false if initial write failed. - */ - public boolean start(OutputStream os) { - if (os == null) - return false; - boolean ok = true; - closeStream = false; - out = os; - try { - writeString("GIF89a"); // header - } catch (IOException e) { - ok = false; + + /** + * Initiates GIF file creation on the given stream. The stream is not closed automatically. + * + * @param os OutputStream on which GIF images are written. + * @return false if initial write failed. + */ + public boolean start(OutputStream os) { + if (os == null) + return false; + boolean ok = true; + closeStream = false; + out = os; + try { + writeString("GIF89a"); // header + } catch (IOException e) { + ok = false; + } + return started = ok; } - return started = ok; - } - - /** - * Initiates writing of a GIF file with the specified name. - * - * @param file - * String containing output file name. - * @return false if open or initial write failed. - */ - public boolean start(String file) { - boolean ok = true; - try { - out = new BufferedOutputStream(new FileOutputStream(file)); - ok = start(out); - closeStream = true; - } catch (IOException e) { - ok = false; + + /** + * Initiates writing of a GIF file with the specified name. + * + * @param file String containing output file name. + * @return false if open or initial write failed. + */ + public boolean start(String file) { + boolean ok = true; + try { + out = new BufferedOutputStream(new FileOutputStream(file)); + ok = start(out); + closeStream = true; + } catch (IOException e) { + ok = false; + } + return started = ok; } - return started = ok; - } - - /** - * Analyzes image colors and creates color map. - */ - protected void analyzePixels() { - int len = pixels.length; - int nPix = len / 3; - indexedPixels = new byte[nPix]; - NeuQuant nq = new NeuQuant(pixels, len, sample); - // initialize quantizer - colorTab = nq.process(); // create reduced palette - // convert map from BGR to RGB - for (int i = 0; i < colorTab.length; i += 3) { - byte temp = colorTab[i]; - colorTab[i] = colorTab[i + 2]; - colorTab[i + 2] = temp; - usedEntry[i / 3] = false; + + /** + * Analyzes image colors and creates color map. + */ + protected void analyzePixels() { + int len = pixels.length; + int nPix = len / 3; + indexedPixels = new byte[nPix]; + NeuQuant nq = new NeuQuant(pixels, len, sample); + // initialize quantizer + colorTab = nq.process(); // create reduced palette + // convert map from BGR to RGB + for (int i = 0; i < colorTab.length; i += 3) { + byte temp = colorTab[i]; + colorTab[i] = colorTab[i + 2]; + colorTab[i + 2] = temp; + usedEntry[i / 3] = false; + } + // map image pixels to new palette + int k = 0; + for (int i = 0; i < nPix; i++) { + int index = nq.map(pixels[k++] & 0xff, pixels[k++] & 0xff, pixels[k++] & 0xff); + usedEntry[index] = true; + indexedPixels[i] = (byte)index; + } + pixels = null; + colorDepth = 8; + palSize = 7; + // get closest match to transparent color if specified + if (transparent != null) { + transIndex = findClosest(transparent); + } + } + + /** + * Returns index of palette color closest to c + * + */ + protected int findClosest(Color c) { + if (colorTab == null) + return -1; + int r = c.getRed(); + int g = c.getGreen(); + int b = c.getBlue(); + int minpos = 0; + int dmin = 256 * 256 * 256; + int len = colorTab.length; + for (int i = 0; i < len;) { + int dr = r - (colorTab[i++] & 0xff); + int dg = g - (colorTab[i++] & 0xff); + int db = b - (colorTab[i] & 0xff); + int d = dr * dr + dg * dg + db * db; + int index = i / 3; + if (usedEntry[index] && (d < dmin)) { + dmin = d; + minpos = index; + } + i++; + } + return minpos; } - // map image pixels to new palette - int k = 0; - for (int i = 0; i < nPix; i++) { - int index = nq.map(pixels[k++] & 0xff, pixels[k++] & 0xff, pixels[k++] & 0xff); - usedEntry[index] = true; - indexedPixels[i] = (byte) index; + + /** + * Extracts image pixels into byte array "pixels" + */ + protected void getImagePixels() { + int w = image.getWidth(); + int h = image.getHeight(); + int type = image.getType(); + if ((w != width) || (h != height) || (type != BufferedImage.TYPE_3BYTE_BGR)) { + // create new image with right size/format + BufferedImage temp = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); + Graphics2D g = temp.createGraphics(); + g.drawImage(image, 0, 0, null); + image = temp; + } + pixels = ((DataBufferByte)image.getRaster().getDataBuffer()).getData(); } - pixels = null; - colorDepth = 8; - palSize = 7; - // get closest match to transparent color if specified - if (transparent != null) { - transIndex = findClosest(transparent); + + /** + * Writes Graphic Control Extension + */ + protected void writeGraphicCtrlExt() throws IOException { + out.write(0x21); // extension introducer + out.write(0xf9); // GCE label + out.write(4); // data block size + int transp, disp; + if (transparent == null) { + transp = 0; + disp = 0; // dispose = no action + } else { + transp = 1; + disp = 2; // force clear if using transparent color + } + if (dispose >= 0) { + disp = dispose & 7; // user override + } + disp <<= 2; + + // packed fields + out.write(0 | // 1:3 reserved + disp | // 4:6 disposal + 0 | // 7 user input - 0 = none + transp); // 8 transparency flag + + writeShort(delay); // delay x 1/100 sec + out.write(transIndex); // transparent color index + out.write(0); // block terminator } - } - - /** - * Returns index of palette color closest to c - * - */ - protected int findClosest(Color c) { - if (colorTab == null) - return -1; - int r = c.getRed(); - int g = c.getGreen(); - int b = c.getBlue(); - int minpos = 0; - int dmin = 256 * 256 * 256; - int len = colorTab.length; - for (int i = 0; i < len;) { - int dr = r - (colorTab[i++] & 0xff); - int dg = g - (colorTab[i++] & 0xff); - int db = b - (colorTab[i] & 0xff); - int d = dr * dr + dg * dg + db * db; - int index = i / 3; - if (usedEntry[index] && (d < dmin)) { - dmin = d; - minpos = index; - } - i++; + + /** + * Writes Image Descriptor + */ + protected void writeImageDesc() throws IOException { + out.write(0x2c); // image separator + writeShort(0); // image position x,y = 0,0 + writeShort(0); + writeShort(width); // image size + writeShort(height); + // packed fields + if (firstFrame) { + // no LCT - GCT is used for first (or only) frame + out.write(0); + } else { + // specify normal LCT + out.write(0x80 | // 1 local color table 1=yes + 0 | // 2 interlace - 0=no + 0 | // 3 sorted - 0=no + 0 | // 4-5 reserved + palSize); // 6-8 size of color table + } } - return minpos; - } - - /** - * Extracts image pixels into byte array "pixels" - */ - protected void getImagePixels() { - int w = image.getWidth(); - int h = image.getHeight(); - int type = image.getType(); - if ((w != width) || (h != height) || (type != BufferedImage.TYPE_3BYTE_BGR)) { - // create new image with right size/format - BufferedImage temp = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); - Graphics2D g = temp.createGraphics(); - g.drawImage(image, 0, 0, null); - image = temp; + + /** + * Writes Logical Screen Descriptor + */ + protected void writeLSD() throws IOException { + // logical screen size + writeShort(width); + writeShort(height); + // packed fields + out.write((0x80 | // 1 : global color table flag = 1 (gct used) + 0x70 | // 2-4 : color resolution = 7 + 0x00 | // 5 : gct sort flag = 0 + palSize)); // 6-8 : gct size + + out.write(0); // background color index + out.write(0); // pixel aspect ratio - assume 1:1 } - pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); - } - - /** - * Writes Graphic Control Extension - */ - protected void writeGraphicCtrlExt() throws IOException { - out.write(0x21); // extension introducer - out.write(0xf9); // GCE label - out.write(4); // data block size - int transp, disp; - if (transparent == null) { - transp = 0; - disp = 0; // dispose = no action - } else { - transp = 1; - disp = 2; // force clear if using transparent color + + /** + * Writes Netscape application extension to define repeat count. + */ + protected void writeNetscapeExt() throws IOException { + out.write(0x21); // extension introducer + out.write(0xff); // app extension label + out.write(11); // block size + writeString("NETSCAPE" + "2.0"); // app id + auth code + out.write(3); // sub-block size + out.write(1); // loop sub-block id + writeShort(repeat); // loop count (extra iterations, 0=repeat forever) + out.write(0); // block terminator } - if (dispose >= 0) { - disp = dispose & 7; // user override + + /** + * Writes color table + */ + protected void writePalette() throws IOException { + out.write(colorTab, 0, colorTab.length); + int n = (3 * 256) - colorTab.length; + for (int i = 0; i < n; i++) { + out.write(0); + } } - disp <<= 2; - - // packed fields - out.write(0 | // 1:3 reserved - disp | // 4:6 disposal - 0 | // 7 user input - 0 = none - transp); // 8 transparency flag - - writeShort(delay); // delay x 1/100 sec - out.write(transIndex); // transparent color index - out.write(0); // block terminator - } - - /** - * Writes Image Descriptor - */ - protected void writeImageDesc() throws IOException { - out.write(0x2c); // image separator - writeShort(0); // image position x,y = 0,0 - writeShort(0); - writeShort(width); // image size - writeShort(height); - // packed fields - if (firstFrame) { - // no LCT - GCT is used for first (or only) frame - out.write(0); - } else { - // specify normal LCT - out.write(0x80 | // 1 local color table 1=yes - 0 | // 2 interlace - 0=no - 0 | // 3 sorted - 0=no - 0 | // 4-5 reserved - palSize); // 6-8 size of color table + + /** + * Encodes and writes pixel data + */ + protected void writePixels() throws IOException { + LZWEncoder encoder = new LZWEncoder(width, height, indexedPixels, colorDepth); + encoder.encode(out); } - } - - /** - * Writes Logical Screen Descriptor - */ - protected void writeLSD() throws IOException { - // logical screen size - writeShort(width); - writeShort(height); - // packed fields - out.write((0x80 | // 1 : global color table flag = 1 (gct used) - 0x70 | // 2-4 : color resolution = 7 - 0x00 | // 5 : gct sort flag = 0 - palSize)); // 6-8 : gct size - - out.write(0); // background color index - out.write(0); // pixel aspect ratio - assume 1:1 - } - - /** - * Writes Netscape application extension to define repeat count. - */ - protected void writeNetscapeExt() throws IOException { - out.write(0x21); // extension introducer - out.write(0xff); // app extension label - out.write(11); // block size - writeString("NETSCAPE" + "2.0"); // app id + auth code - out.write(3); // sub-block size - out.write(1); // loop sub-block id - writeShort(repeat); // loop count (extra iterations, 0=repeat forever) - out.write(0); // block terminator - } - - /** - * Writes color table - */ - protected void writePalette() throws IOException { - out.write(colorTab, 0, colorTab.length); - int n = (3 * 256) - colorTab.length; - for (int i = 0; i < n; i++) { - out.write(0); + + /** + * Write 16-bit value to output stream, LSB first + */ + protected void writeShort(int value) throws IOException { + out.write(value & 0xff); + out.write((value >> 8) & 0xff); } - } - - /** - * Encodes and writes pixel data - */ - protected void writePixels() throws IOException { - LZWEncoder encoder = new LZWEncoder(width, height, indexedPixels, colorDepth); - encoder.encode(out); - } - - /** - * Write 16-bit value to output stream, LSB first - */ - protected void writeShort(int value) throws IOException { - out.write(value & 0xff); - out.write((value >> 8) & 0xff); - } - - /** - * Writes string to output stream - */ - protected void writeString(String s) throws IOException { - for (int i = 0; i < s.length(); i++) { - out.write((byte) s.charAt(i)); + + /** + * Writes string to output stream + */ + protected void writeString(String s) throws IOException { + for (int i = 0; i < s.length(); i++) { + out.write((byte)s.charAt(i)); + } } - } } - -// + +// // Adapted from Jef Poskanzer's Java port by way of J. M. G. Elliott. // K Weiner 12/00 - + class LZWEncoder { - - private static final int EOF = -1; - - private int imgW, imgH; - - private byte[] pixAry; - - private int initCodeSize; - - private int remaining; - - private int curPixel; - - // GIFCOMPR.C - GIF Image compression routines - // - // Lempel-Ziv compression based on 'compress'. GIF modifications by - // David Rowley (mgardi@watdcsu.waterloo.edu) - - // General DEFINEs - - static final int BITS = 12; - - static final int HSIZE = 5003; // 80% occupancy - - // GIF Image compression - modified 'compress' - // - // Based on: compress.c - File compression ala IEEE Computer, June 1984. - // - // By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) - // Jim McKie (decvax!mcvax!jim) - // Steve Davies (decvax!vax135!petsd!peora!srd) - // Ken Turkowski (decvax!decwrl!turtlevax!ken) - // James A. Woods (decvax!ihnp4!ames!jaw) - // Joe Orost (decvax!vax135!petsd!joe) - - int n_bits; // number of bits/code - - int maxbits = BITS; // user settable max # bits/code - - int maxcode; // maximum code, given n_bits - - int maxmaxcode = 1 << BITS; // should NEVER generate this code - - int[] htab = new int[HSIZE]; - - int[] codetab = new int[HSIZE]; - - int hsize = HSIZE; // for dynamic table sizing - - int free_ent = 0; // first unused entry - - // block compression parameters -- after all codes are used up, - // and compression rate changes, start over. - boolean clear_flg = false; - - // Algorithm: use open addressing double hashing (no chaining) on the - // prefix code / next character combination. We do a variant of Knuth's - // algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime - // secondary probe. Here, the modular division first probe is gives way - // to a faster exclusive-or manipulation. Also do block compression with - // an adaptive reset, whereby the code table is cleared when the compression - // ratio decreases, but after the table fills. The variable-length output - // codes are re-sized at this point, and a special CLEAR code is generated - // for the decompressor. Late addition: construct the table according to - // file size for noticeable speed improvement on small files. Please direct - // questions about this implementation to ames!jaw. - - int g_init_bits; - - int ClearCode; - - int EOFCode; - - // output - // - // Output the given code. - // Inputs: - // code: A n_bits-bit integer. If == -1, then EOF. This assumes - // that n_bits =< wordsize - 1. - // Outputs: - // Outputs code to the file. - // Assumptions: - // Chars are 8 bits long. - // Algorithm: - // Maintain a BITS character long buffer (so that 8 codes will - // fit in it exactly). Use the VAX insv instruction to insert each - // code in turn. When the buffer fills up empty it and start over. - - int cur_accum = 0; - - int cur_bits = 0; - - int masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, - 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; - - // Number of characters so far in this 'packet' - int a_count; - - // Define the storage for the packet accumulator - byte[] accum = new byte[256]; - - // ---------------------------------------------------------------------------- - LZWEncoder(int width, int height, byte[] pixels, int color_depth) { - imgW = width; - imgH = height; - pixAry = pixels; - initCodeSize = Math.max(2, color_depth); - } - - // Add a character to the end of the current packet, and if it is 254 - // characters, flush the packet to disk. - void char_out(byte c, OutputStream outs) throws IOException { - accum[a_count++] = c; - if (a_count >= 254) - flush_char(outs); - } - - // Clear out the hash table - - // table clear for block compress - void cl_block(OutputStream outs) throws IOException { - cl_hash(hsize); - free_ent = ClearCode + 2; - clear_flg = true; - - output(ClearCode, outs); - } - - // reset code table - void cl_hash(int hsize) { - for (int i = 0; i < hsize; ++i) - htab[i] = -1; - } - - void compress(int init_bits, OutputStream outs) throws IOException { - int fcode; - int i /* = 0 */; - int c; - int ent; - int disp; - int hsize_reg; - int hshift; - - // Set up the globals: g_init_bits - initial number of bits - g_init_bits = init_bits; - - // Set up the necessary values - clear_flg = false; - n_bits = g_init_bits; - maxcode = MAXCODE(n_bits); - - ClearCode = 1 << (init_bits - 1); - EOFCode = ClearCode + 1; - free_ent = ClearCode + 2; - - a_count = 0; // clear packet - - ent = nextPixel(); - - hshift = 0; - for (fcode = hsize; fcode < 65536; fcode *= 2) - ++hshift; - hshift = 8 - hshift; // set hash code range bound - - hsize_reg = hsize; - cl_hash(hsize_reg); // clear hash table - - output(ClearCode, outs); - - outer_loop: while ((c = nextPixel()) != EOF) { - fcode = (c << maxbits) + ent; - i = (c << hshift) ^ ent; // xor hashing - - if (htab[i] == fcode) { - ent = codetab[i]; - continue; - } else if (htab[i] >= 0) // non-empty slot - { - disp = hsize_reg - i; // secondary hash (after G. Knott) - if (i == 0) - disp = 1; - do { - if ((i -= disp) < 0) - i += hsize_reg; - - if (htab[i] == fcode) { - ent = codetab[i]; - continue outer_loop; - } - } while (htab[i] >= 0); - } - output(ent, outs); - ent = c; - if (free_ent < maxmaxcode) { - codetab[i] = free_ent++; // code -> hashtable - htab[i] = fcode; - } else - cl_block(outs); + + static final int BITS = 12; + static final int HSIZE = 5003; // 80% occupancy + private static final int EOF = -1; + int n_bits; // number of bits/code + int maxbits = BITS; // user settable max # bits/code + int maxcode; // maximum code, given n_bits + + // GIFCOMPR.C - GIF Image compression routines + // + // Lempel-Ziv compression based on 'compress'. GIF modifications by + // David Rowley (mgardi@watdcsu.waterloo.edu) + + // General DEFINEs + int maxmaxcode = 1 << BITS; // should NEVER generate this code + int[] htab = new int[HSIZE]; + + // GIF Image compression - modified 'compress' + // + // Based on: compress.c - File compression ala IEEE Computer, June 1984. + // + // By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) + // Jim McKie (decvax!mcvax!jim) + // Steve Davies (decvax!vax135!petsd!peora!srd) + // Ken Turkowski (decvax!decwrl!turtlevax!ken) + // James A. Woods (decvax!ihnp4!ames!jaw) + // Joe Orost (decvax!vax135!petsd!joe) + int[] codetab = new int[HSIZE]; + int hsize = HSIZE; // for dynamic table sizing + int free_ent = 0; // first unused entry + // block compression parameters -- after all codes are used up, + // and compression rate changes, start over. + boolean clear_flg = false; + int g_init_bits; + int ClearCode; + int EOFCode; + int cur_accum = 0; + int cur_bits = 0; + + // Algorithm: use open addressing double hashing (no chaining) on the + // prefix code / next character combination. We do a variant of Knuth's + // algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime + // secondary probe. Here, the modular division first probe is gives way + // to a faster exclusive-or manipulation. Also do block compression with + // an adaptive reset, whereby the code table is cleared when the compression + // ratio decreases, but after the table fills. The variable-length output + // codes are re-sized at this point, and a special CLEAR code is generated + // for the decompressor. Late addition: construct the table according to + // file size for noticeable speed improvement on small files. Please direct + // questions about this implementation to ames!jaw. + int masks[] = {0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, + 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF}; + // Number of characters so far in this 'packet' + int a_count; + // Define the storage for the packet accumulator + byte[] accum = new byte[256]; + + // output + // + // Output the given code. + // Inputs: + // code: A n_bits-bit integer. If == -1, then EOF. This assumes + // that n_bits =< wordsize - 1. + // Outputs: + // Outputs code to the file. + // Assumptions: + // Chars are 8 bits long. + // Algorithm: + // Maintain a BITS character long buffer (so that 8 codes will + // fit in it exactly). Use the VAX insv instruction to insert each + // code in turn. When the buffer fills up empty it and start over. + private int imgW, imgH; + private byte[] pixAry; + private int initCodeSize; + private int remaining; + private int curPixel; + + // ---------------------------------------------------------------------------- + LZWEncoder(int width, int height, byte[] pixels, int color_depth) { + imgW = width; + imgH = height; + pixAry = pixels; + initCodeSize = Math.max(2, color_depth); + } + + // Add a character to the end of the current packet, and if it is 254 + // characters, flush the packet to disk. + void char_out(byte c, OutputStream outs) throws IOException { + accum[a_count++] = c; + if (a_count >= 254) + flush_char(outs); } - // Put out the final code. - output(ent, outs); - output(EOFCode, outs); - } - - // ---------------------------------------------------------------------------- - void encode(OutputStream os) throws IOException { - os.write(initCodeSize); // write "initial code size" byte - - remaining = imgW * imgH; // reset navigation variables - curPixel = 0; - - compress(initCodeSize + 1, os); // compress and write the pixel data - - os.write(0); // write block terminator - } - - // Flush the packet to disk, and reset the accumulator - void flush_char(OutputStream outs) throws IOException { - if (a_count > 0) { - outs.write(a_count); - outs.write(accum, 0, a_count); - a_count = 0; + + // Clear out the hash table + + // table clear for block compress + void cl_block(OutputStream outs) throws IOException { + cl_hash(hsize); + free_ent = ClearCode + 2; + clear_flg = true; + + output(ClearCode, outs); } - } - - final int MAXCODE(int n_bits) { - return (1 << n_bits) - 1; - } - - // ---------------------------------------------------------------------------- - // Return the next pixel from the image - // ---------------------------------------------------------------------------- - private int nextPixel() { - if (remaining == 0) - return EOF; - - --remaining; - - byte pix = pixAry[curPixel++]; - - return pix & 0xff; - } - - void output(int code, OutputStream outs) throws IOException { - cur_accum &= masks[cur_bits]; - - if (cur_bits > 0) - cur_accum |= (code << cur_bits); - else - cur_accum = code; - - cur_bits += n_bits; - - while (cur_bits >= 8) { - char_out((byte) (cur_accum & 0xff), outs); - cur_accum >>= 8; - cur_bits -= 8; + + // reset code table + void cl_hash(int hsize) { + for (int i = 0; i < hsize; ++i) + htab[i] = -1; } - - // If the next entry is going to be too big for the code size, - // then increase it, if possible. - if (free_ent > maxcode || clear_flg) { - if (clear_flg) { - maxcode = MAXCODE(n_bits = g_init_bits); + + void compress(int init_bits, OutputStream outs) throws IOException { + int fcode; + int i /* = 0 */; + int c; + int ent; + int disp; + int hsize_reg; + int hshift; + + // Set up the globals: g_init_bits - initial number of bits + g_init_bits = init_bits; + + // Set up the necessary values clear_flg = false; - } else { - ++n_bits; - if (n_bits == maxbits) - maxcode = maxmaxcode; - else - maxcode = MAXCODE(n_bits); - } + n_bits = g_init_bits; + maxcode = MAXCODE(n_bits); + + ClearCode = 1 << (init_bits - 1); + EOFCode = ClearCode + 1; + free_ent = ClearCode + 2; + + a_count = 0; // clear packet + + ent = nextPixel(); + + hshift = 0; + for (fcode = hsize; fcode < 65536; fcode *= 2) + ++hshift; + hshift = 8 - hshift; // set hash code range bound + + hsize_reg = hsize; + cl_hash(hsize_reg); // clear hash table + + output(ClearCode, outs); + + outer_loop: + while ((c = nextPixel()) != EOF) { + fcode = (c << maxbits) + ent; + i = (c << hshift) ^ ent; // xor hashing + + if (htab[i] == fcode) { + ent = codetab[i]; + continue; + } else if (htab[i] >= 0) // non-empty slot + { + disp = hsize_reg - i; // secondary hash (after G. Knott) + if (i == 0) + disp = 1; + do { + if ((i -= disp) < 0) + i += hsize_reg; + + if (htab[i] == fcode) { + ent = codetab[i]; + continue outer_loop; + } + } while (htab[i] >= 0); + } + output(ent, outs); + ent = c; + if (free_ent < maxmaxcode) { + codetab[i] = free_ent++; // code -> hashtable + htab[i] = fcode; + } else + cl_block(outs); + } + // Put out the final code. + output(ent, outs); + output(EOFCode, outs); } - - if (code == EOFCode) { - // At EOF, write the rest of the buffer. - while (cur_bits > 0) { - char_out((byte) (cur_accum & 0xff), outs); - cur_accum >>= 8; - cur_bits -= 8; - } - - flush_char(outs); + + // ---------------------------------------------------------------------------- + void encode(OutputStream os) throws IOException { + os.write(initCodeSize); // write "initial code size" byte + + remaining = imgW * imgH; // reset navigation variables + curPixel = 0; + + compress(initCodeSize + 1, os); // compress and write the pixel data + + os.write(0); // write block terminator + } + + // Flush the packet to disk, and reset the accumulator + void flush_char(OutputStream outs) throws IOException { + if (a_count > 0) { + outs.write(a_count); + outs.write(accum, 0, a_count); + a_count = 0; + } + } + + final int MAXCODE(int n_bits) { + return (1 << n_bits) - 1; + } + + // ---------------------------------------------------------------------------- + // Return the next pixel from the image + // ---------------------------------------------------------------------------- + private int nextPixel() { + if (remaining == 0) + return EOF; + + --remaining; + + byte pix = pixAry[curPixel++]; + + return pix & 0xff; + } + + void output(int code, OutputStream outs) throws IOException { + cur_accum &= masks[cur_bits]; + + if (cur_bits > 0) + cur_accum |= (code << cur_bits); + else + cur_accum = code; + + cur_bits += n_bits; + + while (cur_bits >= 8) { + char_out((byte)(cur_accum & 0xff), outs); + cur_accum >>= 8; + cur_bits -= 8; + } + + // If the next entry is going to be too big for the code size, + // then increase it, if possible. + if (free_ent > maxcode || clear_flg) { + if (clear_flg) { + maxcode = MAXCODE(n_bits = g_init_bits); + clear_flg = false; + } else { + ++n_bits; + if (n_bits == maxbits) + maxcode = maxmaxcode; + else + maxcode = MAXCODE(n_bits); + } + } + + if (code == EOFCode) { + // At EOF, write the rest of the buffer. + while (cur_bits > 0) { + char_out((byte)(cur_accum & 0xff), outs); + cur_accum >>= 8; + cur_bits -= 8; + } + + flush_char(outs); + } } - } } - + /* * NeuQuant Neural-Net Quantization Algorithm * ------------------------------------------ @@ -811,484 +762,472 @@ class LZWEncoder { * receive copies from any such party to do so, with the only requirement being * that this copyright notice remain intact. */ - + // Ported to Java 12/00 K Weiner class NeuQuant { - - protected static final int netsize = 256; /* number of colours used */ - - /* four primes near 500 - assume no image has a length so large */ - /* that it is divisible by all four primes */ - protected static final int prime1 = 499; - - protected static final int prime2 = 491; - - protected static final int prime3 = 487; - - protected static final int prime4 = 503; - - protected static final int minpicturebytes = (3 * prime4); - - /* minimum size for input image */ - - /* - * Program Skeleton ---------------- [select samplefac in range 1..30] [read - * image from input file] pic = (unsigned char*) malloc(3*width*height); - * initnet(pic,3*width*height,samplefac); learn(); unbiasnet(); [write output - * image header, using writecolourmap(f)] inxbuild(); write output image using - * inxsearch(b,g,r) - */ - - /* - * Network Definitions ------------------- - */ - - protected static final int maxnetpos = (netsize - 1); - - protected static final int netbiasshift = 4; /* bias for colour values */ - - protected static final int ncycles = 100; /* no. of learning cycles */ - - /* defs for freq and bias */ - protected static final int intbiasshift = 16; /* bias for fractions */ - - protected static final int intbias = (((int) 1) << intbiasshift); - - protected static final int gammashift = 10; /* gamma = 1024 */ - - protected static final int gamma = (((int) 1) << gammashift); - - protected static final int betashift = 10; - - protected static final int beta = (intbias >> betashift); /* beta = 1/1024 */ - - protected static final int betagamma = (intbias << (gammashift - betashift)); - - /* defs for decreasing radius factor */ - protected static final int initrad = (netsize >> 3); /* - * for 256 cols, radius - * starts - */ - - protected static final int radiusbiasshift = 6; /* at 32.0 biased by 6 bits */ - - protected static final int radiusbias = (((int) 1) << radiusbiasshift); - - protected static final int initradius = (initrad * radiusbias); /* - * and - * decreases - * by a - */ - - protected static final int radiusdec = 30; /* factor of 1/30 each cycle */ - - /* defs for decreasing alpha factor */ - protected static final int alphabiasshift = 10; /* alpha starts at 1.0 */ - - protected static final int initalpha = (((int) 1) << alphabiasshift); - - protected int alphadec; /* biased by 10 bits */ - - /* radbias and alpharadbias used for radpower calculation */ - protected static final int radbiasshift = 8; - - protected static final int radbias = (((int) 1) << radbiasshift); - - protected static final int alpharadbshift = (alphabiasshift + radbiasshift); - - protected static final int alpharadbias = (((int) 1) << alpharadbshift); - - /* - * Types and Global Variables -------------------------- - */ - - protected byte[] thepicture; /* the input image itself */ - - protected int lengthcount; /* lengthcount = H*W*3 */ - - protected int samplefac; /* sampling factor 1..30 */ - - // typedef int pixel[4]; /* BGRc */ - protected int[][] network; /* the network itself - [netsize][4] */ - - protected int[] netindex = new int[256]; - - /* for network lookup - really 256 */ - - protected int[] bias = new int[netsize]; - - /* bias and freq arrays for learning */ - protected int[] freq = new int[netsize]; - - protected int[] radpower = new int[initrad]; - - /* radpower for precomputation */ - - /* - * Initialise network in range (0,0,0) to (255,255,255) and set parameters - * ----------------------------------------------------------------------- - */ - public NeuQuant(byte[] thepic, int len, int sample) { - - int i; - int[] p; - - thepicture = thepic; - lengthcount = len; - samplefac = sample; - - network = new int[netsize][]; - for (i = 0; i < netsize; i++) { - network[i] = new int[4]; - p = network[i]; - p[0] = p[1] = p[2] = (i << (netbiasshift + 8)) / netsize; - freq[i] = intbias / netsize; /* 1/netsize */ - bias[i] = 0; - } - } - - public byte[] colorMap() { - byte[] map = new byte[3 * netsize]; - int[] index = new int[netsize]; - for (int i = 0; i < netsize; i++) - index[network[i][3]] = i; - int k = 0; - for (int i = 0; i < netsize; i++) { - int j = index[i]; - map[k++] = (byte) (network[j][0]); - map[k++] = (byte) (network[j][1]); - map[k++] = (byte) (network[j][2]); + + protected static final int netsize = 256; /* number of colours used */ + + /* four primes near 500 - assume no image has a length so large */ + /* that it is divisible by all four primes */ + protected static final int prime1 = 499; + + protected static final int prime2 = 491; + + protected static final int prime3 = 487; + + protected static final int prime4 = 503; + + protected static final int minpicturebytes = (3 * prime4); + + /* minimum size for input image */ + + /* + * Program Skeleton ---------------- [select samplefac in range 1..30] [read + * image from input file] pic = (unsigned char*) malloc(3*width*height); + * initnet(pic,3*width*height,samplefac); learn(); unbiasnet(); [write output + * image header, using writecolourmap(f)] inxbuild(); write output image using + * inxsearch(b,g,r) + */ + + /* + * Network Definitions ------------------- + */ + + protected static final int maxnetpos = (netsize - 1); + + protected static final int netbiasshift = 4; /* bias for colour values */ + + protected static final int ncycles = 100; /* no. of learning cycles */ + + /* defs for freq and bias */ + protected static final int intbiasshift = 16; /* bias for fractions */ + + protected static final int intbias = (((int)1) << intbiasshift); + protected static final int beta = (intbias >> betashift); /* beta = 1/1024 */ + protected static final int betagamma = (intbias << (gammashift - betashift)); + protected static final int gammashift = 10; /* gamma = 1024 */ + protected static final int gamma = (((int)1) << gammashift); + protected static final int betashift = 10; + /* defs for decreasing radius factor */ + protected static final int initrad = (netsize >> 3); /* + * for 256 cols, radius + * starts + */ + + protected static final int radiusbiasshift = 6; /* at 32.0 biased by 6 bits */ + + protected static final int radiusbias = (((int)1) << radiusbiasshift); + + protected static final int initradius = (initrad * radiusbias); /* + * and + * decreases + * by a + */ + + protected static final int radiusdec = 30; /* factor of 1/30 each cycle */ + + /* defs for decreasing alpha factor */ + protected static final int alphabiasshift = 10; /* alpha starts at 1.0 */ + + protected static final int initalpha = (((int)1) << alphabiasshift); + /* radbias and alpharadbias used for radpower calculation */ + protected static final int radbiasshift = 8; + protected static final int radbias = (((int)1) << radbiasshift); + protected static final int alpharadbshift = (alphabiasshift + radbiasshift); + protected static final int alpharadbias = (((int)1) << alpharadbshift); + protected int alphadec; /* biased by 10 bits */ + + /* + * Types and Global Variables -------------------------- + */ + protected byte[] thepicture; /* the input image itself */ + + protected int lengthcount; /* lengthcount = H*W*3 */ + + protected int samplefac; /* sampling factor 1..30 */ + + // typedef int pixel[4]; /* BGRc */ + protected int[][] network; /* the network itself - [netsize][4] */ + + protected int[] netindex = new int[256]; + + /* for network lookup - really 256 */ + + protected int[] bias = new int[netsize]; + + /* bias and freq arrays for learning */ + protected int[] freq = new int[netsize]; + + protected int[] radpower = new int[initrad]; + + /* radpower for precomputation */ + + /* + * Initialise network in range (0,0,0) to (255,255,255) and set parameters + * ----------------------------------------------------------------------- + */ + public NeuQuant(byte[] thepic, int len, int sample) { + + int i; + int[] p; + + thepicture = thepic; + lengthcount = len; + samplefac = sample; + + network = new int[netsize][]; + for (i = 0; i < netsize; i++) { + network[i] = new int[4]; + p = network[i]; + p[0] = p[1] = p[2] = (i << (netbiasshift + 8)) / netsize; + freq[i] = intbias / netsize; /* 1/netsize */ + bias[i] = 0; + } } - return map; - } - - /* - * Insertion sort of network and building of netindex[0..255] (to do after - * unbias) - * ------------------------------------------------------------------------------- - */ - public void inxbuild() { - - int i, j, smallpos, smallval; - int[] p; - int[] q; - int previouscol, startpos; - - previouscol = 0; - startpos = 0; - for (i = 0; i < netsize; i++) { - p = network[i]; - smallpos = i; - smallval = p[1]; /* index on g */ - /* find smallest in i..netsize-1 */ - for (j = i + 1; j < netsize; j++) { - q = network[j]; - if (q[1] < smallval) { /* index on g */ - smallpos = j; - smallval = q[1]; /* index on g */ + + public byte[] colorMap() { + byte[] map = new byte[3 * netsize]; + int[] index = new int[netsize]; + for (int i = 0; i < netsize; i++) + index[network[i][3]] = i; + int k = 0; + for (int i = 0; i < netsize; i++) { + int j = index[i]; + map[k++] = (byte)(network[j][0]); + map[k++] = (byte)(network[j][1]); + map[k++] = (byte)(network[j][2]); } - } - q = network[smallpos]; - /* swap p (i) and q (smallpos) entries */ - if (i != smallpos) { - j = q[0]; - q[0] = p[0]; - p[0] = j; - j = q[1]; - q[1] = p[1]; - p[1] = j; - j = q[2]; - q[2] = p[2]; - p[2] = j; - j = q[3]; - q[3] = p[3]; - p[3] = j; - } - /* smallval entry is now in position i */ - if (smallval != previouscol) { - netindex[previouscol] = (startpos + i) >> 1; - for (j = previouscol + 1; j < smallval; j++) - netindex[j] = i; - previouscol = smallval; - startpos = i; - } + return map; } - netindex[previouscol] = (startpos + maxnetpos) >> 1; - for (j = previouscol + 1; j < 256; j++) - netindex[j] = maxnetpos; /* really 256 */ - } - - /* - * Main Learning Loop ------------------ - */ - public void learn() { - - int i, j, b, g, r; - int radius, rad, alpha, step, delta, samplepixels; - byte[] p; - int pix, lim; - - if (lengthcount < minpicturebytes) - samplefac = 1; - alphadec = 30 + ((samplefac - 1) / 3); - p = thepicture; - pix = 0; - lim = lengthcount; - samplepixels = lengthcount / (3 * samplefac); - delta = samplepixels / ncycles; - alpha = initalpha; - radius = initradius; - - rad = radius >> radiusbiasshift; - if (rad <= 1) - rad = 0; - for (i = 0; i < rad; i++) - radpower[i] = alpha * (((rad * rad - i * i) * radbias) / (rad * rad)); - - // fprintf(stderr,"beginning 1D learning: initial radius=%d\n", rad); - - if (lengthcount < minpicturebytes) - step = 3; - else if ((lengthcount % prime1) != 0) - step = 3 * prime1; - else { - if ((lengthcount % prime2) != 0) - step = 3 * prime2; - else { - if ((lengthcount % prime3) != 0) - step = 3 * prime3; - else - step = 3 * prime4; - } + + /* + * Insertion sort of network and building of netindex[0..255] (to do after + * unbias) + * ------------------------------------------------------------------------------- + */ + public void inxbuild() { + + int i, j, smallpos, smallval; + int[] p; + int[] q; + int previouscol, startpos; + + previouscol = 0; + startpos = 0; + for (i = 0; i < netsize; i++) { + p = network[i]; + smallpos = i; + smallval = p[1]; /* index on g */ + /* find smallest in i..netsize-1 */ + for (j = i + 1; j < netsize; j++) { + q = network[j]; + if (q[1] < smallval) { /* index on g */ + smallpos = j; + smallval = q[1]; /* index on g */ + } + } + q = network[smallpos]; + /* swap p (i) and q (smallpos) entries */ + if (i != smallpos) { + j = q[0]; + q[0] = p[0]; + p[0] = j; + j = q[1]; + q[1] = p[1]; + p[1] = j; + j = q[2]; + q[2] = p[2]; + p[2] = j; + j = q[3]; + q[3] = p[3]; + p[3] = j; + } + /* smallval entry is now in position i */ + if (smallval != previouscol) { + netindex[previouscol] = (startpos + i) >> 1; + for (j = previouscol + 1; j < smallval; j++) + netindex[j] = i; + previouscol = smallval; + startpos = i; + } + } + netindex[previouscol] = (startpos + maxnetpos) >> 1; + for (j = previouscol + 1; j < 256; j++) + netindex[j] = maxnetpos; /* really 256 */ } - - i = 0; - while (i < samplepixels) { - b = (p[pix + 0] & 0xff) << netbiasshift; - g = (p[pix + 1] & 0xff) << netbiasshift; - r = (p[pix + 2] & 0xff) << netbiasshift; - j = contest(b, g, r); - - altersingle(alpha, j, b, g, r); - if (rad != 0) - alterneigh(rad, j, b, g, r); /* alter neighbours */ - - pix += step; - if (pix >= lim) - pix -= lengthcount; - - i++; - if (delta == 0) - delta = 1; - if (i % delta == 0) { - alpha -= alpha / alphadec; - radius -= radius / radiusdec; + + /* + * Main Learning Loop ------------------ + */ + public void learn() { + + int i, j, b, g, r; + int radius, rad, alpha, step, delta, samplepixels; + byte[] p; + int pix, lim; + + if (lengthcount < minpicturebytes) + samplefac = 1; + alphadec = 30 + ((samplefac - 1) / 3); + p = thepicture; + pix = 0; + lim = lengthcount; + samplepixels = lengthcount / (3 * samplefac); + delta = samplepixels / ncycles; + alpha = initalpha; + radius = initradius; + rad = radius >> radiusbiasshift; if (rad <= 1) - rad = 0; - for (j = 0; j < rad; j++) - radpower[j] = alpha * (((rad * rad - j * j) * radbias) / (rad * rad)); - } - } - // fprintf(stderr,"finished 1D learning: final alpha=%f - // !\n",((float)alpha)/initalpha); - } - - /* - * Search for BGR values 0..255 (after net is unbiased) and return colour - * index - * ---------------------------------------------------------------------------- - */ - public int map(int b, int g, int r) { - - int i, j, dist, a, bestd; - int[] p; - int best; - - bestd = 1000; /* biggest possible dist is 256*3 */ - best = -1; - i = netindex[g]; /* index on g */ - j = i - 1; /* start at netindex[g] and work outwards */ - - while ((i < netsize) || (j >= 0)) { - if (i < netsize) { - p = network[i]; - dist = p[1] - g; /* inx key */ - if (dist >= bestd) - i = netsize; /* stop iter */ + rad = 0; + for (i = 0; i < rad; i++) + radpower[i] = alpha * (((rad * rad - i * i) * radbias) / (rad * rad)); + + // fprintf(stderr,"beginning 1D learning: initial radius=%d\n", rad); + + if (lengthcount < minpicturebytes) + step = 3; + else if ((lengthcount % prime1) != 0) + step = 3 * prime1; else { - i++; - if (dist < 0) - dist = -dist; - a = p[0] - b; - if (a < 0) - a = -a; - dist += a; - if (dist < bestd) { - a = p[2] - r; - if (a < 0) - a = -a; - dist += a; - if (dist < bestd) { - bestd = dist; - best = p[3]; + if ((lengthcount % prime2) != 0) + step = 3 * prime2; + else { + if ((lengthcount % prime3) != 0) + step = 3 * prime3; + else + step = 3 * prime4; } - } } - } - if (j >= 0) { - p = network[j]; - dist = g - p[1]; /* inx key - reverse dif */ - if (dist >= bestd) - j = -1; /* stop iter */ - else { - j--; - if (dist < 0) - dist = -dist; - a = p[0] - b; - if (a < 0) - a = -a; - dist += a; - if (dist < bestd) { - a = p[2] - r; - if (a < 0) - a = -a; - dist += a; - if (dist < bestd) { - bestd = dist; - best = p[3]; + + i = 0; + while (i < samplepixels) { + b = (p[pix + 0] & 0xff) << netbiasshift; + g = (p[pix + 1] & 0xff) << netbiasshift; + r = (p[pix + 2] & 0xff) << netbiasshift; + j = contest(b, g, r); + + altersingle(alpha, j, b, g, r); + if (rad != 0) + alterneigh(rad, j, b, g, r); /* alter neighbours */ + + pix += step; + if (pix >= lim) + pix -= lengthcount; + + i++; + if (delta == 0) + delta = 1; + if (i % delta == 0) { + alpha -= alpha / alphadec; + radius -= radius / radiusdec; + rad = radius >> radiusbiasshift; + if (rad <= 1) + rad = 0; + for (j = 0; j < rad; j++) + radpower[j] = alpha * (((rad * rad - j * j) * radbias) / (rad * rad)); } - } } - } + // fprintf(stderr,"finished 1D learning: final alpha=%f + // !\n",((float)alpha)/initalpha); } - return (best); - } - - public byte[] process() { - learn(); - unbiasnet(); - inxbuild(); - return colorMap(); - } - - /* - * Unbias network to give byte values 0..255 and record position i to prepare - * for sort - * ----------------------------------------------------------------------------------- - */ - public void unbiasnet() { - for (int i = 0; i < netsize; i++) { - network[i][0] >>= netbiasshift; - network[i][1] >>= netbiasshift; - network[i][2] >>= netbiasshift; - network[i][3] = i; /* record colour no */ + + /* + * Search for BGR values 0..255 (after net is unbiased) and return colour + * index + * ---------------------------------------------------------------------------- + */ + public int map(int b, int g, int r) { + + int i, j, dist, a, bestd; + int[] p; + int best; + + bestd = 1000; /* biggest possible dist is 256*3 */ + best = -1; + i = netindex[g]; /* index on g */ + j = i - 1; /* start at netindex[g] and work outwards */ + + while ((i < netsize) || (j >= 0)) { + if (i < netsize) { + p = network[i]; + dist = p[1] - g; /* inx key */ + if (dist >= bestd) + i = netsize; /* stop iter */ + else { + i++; + if (dist < 0) + dist = -dist; + a = p[0] - b; + if (a < 0) + a = -a; + dist += a; + if (dist < bestd) { + a = p[2] - r; + if (a < 0) + a = -a; + dist += a; + if (dist < bestd) { + bestd = dist; + best = p[3]; + } + } + } + } + if (j >= 0) { + p = network[j]; + dist = g - p[1]; /* inx key - reverse dif */ + if (dist >= bestd) + j = -1; /* stop iter */ + else { + j--; + if (dist < 0) + dist = -dist; + a = p[0] - b; + if (a < 0) + a = -a; + dist += a; + if (dist < bestd) { + a = p[2] - r; + if (a < 0) + a = -a; + dist += a; + if (dist < bestd) { + bestd = dist; + best = p[3]; + } + } + } + } + } + return (best); } - } - - /* - * Move adjacent neurons by precomputed alpha*(1-((i-j)^2/[r]^2)) in - * radpower[|i-j|] - * --------------------------------------------------------------------------------- - */ - protected void alterneigh(int rad, int i, int b, int g, int r) { - - int j, k, lo, hi, a, m; - int[] p; - - lo = i - rad; - if (lo < -1) - lo = -1; - hi = i + rad; - if (hi > netsize) - hi = netsize; - - j = i + 1; - k = i - 1; - m = 1; - while ((j < hi) || (k > lo)) { - a = radpower[m++]; - if (j < hi) { - p = network[j++]; - try { - p[0] -= (a * (p[0] - b)) / alpharadbias; - p[1] -= (a * (p[1] - g)) / alpharadbias; - p[2] -= (a * (p[2] - r)) / alpharadbias; - } catch (Exception e) { - } // prevents 1.3 miscompilation - } - if (k > lo) { - p = network[k--]; - try { - p[0] -= (a * (p[0] - b)) / alpharadbias; - p[1] -= (a * (p[1] - g)) / alpharadbias; - p[2] -= (a * (p[2] - r)) / alpharadbias; - } catch (Exception e) { + + public byte[] process() { + learn(); + unbiasnet(); + inxbuild(); + return colorMap(); + } + + /* + * Unbias network to give byte values 0..255 and record position i to prepare + * for sort + * ----------------------------------------------------------------------------------- + */ + public void unbiasnet() { + for (int i = 0; i < netsize; i++) { + network[i][0] >>= netbiasshift; + network[i][1] >>= netbiasshift; + network[i][2] >>= netbiasshift; + network[i][3] = i; /* record colour no */ } - } } - } - - /* - * Move neuron i towards biased (b,g,r) by factor alpha - * ---------------------------------------------------- - */ - protected void altersingle(int alpha, int i, int b, int g, int r) { - - /* alter hit neuron */ - int[] n = network[i]; - n[0] -= (alpha * (n[0] - b)) / initalpha; - n[1] -= (alpha * (n[1] - g)) / initalpha; - n[2] -= (alpha * (n[2] - r)) / initalpha; - } - - /* - * Search for biased BGR values ---------------------------- - */ - protected int contest(int b, int g, int r) { - - /* finds closest neuron (min dist) and updates freq */ - /* finds best neuron (min dist-bias) and returns position */ - /* for frequently chosen neurons, freq[i] is high and bias[i] is negative */ - /* bias[i] = gamma*((1/netsize)-freq[i]) */ - - int i, dist, a, biasdist, betafreq; - int bestpos, bestbiaspos, bestd, bestbiasd; - int[] n; - - bestd = ~(((int) 1) << 31); - bestbiasd = bestd; - bestpos = -1; - bestbiaspos = bestpos; - - for (i = 0; i < netsize; i++) { - n = network[i]; - dist = n[0] - b; - if (dist < 0) - dist = -dist; - a = n[1] - g; - if (a < 0) - a = -a; - dist += a; - a = n[2] - r; - if (a < 0) - a = -a; - dist += a; - if (dist < bestd) { - bestd = dist; - bestpos = i; - } - biasdist = dist - ((bias[i]) >> (intbiasshift - netbiasshift)); - if (biasdist < bestbiasd) { - bestbiasd = biasdist; - bestbiaspos = i; - } - betafreq = (freq[i] >> betashift); - freq[i] -= betafreq; - bias[i] += (betafreq << gammashift); + + /* + * Move adjacent neurons by precomputed alpha*(1-((i-j)^2/[r]^2)) in + * radpower[|i-j|] + * --------------------------------------------------------------------------------- + */ + protected void alterneigh(int rad, int i, int b, int g, int r) { + + int j, k, lo, hi, a, m; + int[] p; + + lo = i - rad; + if (lo < -1) + lo = -1; + hi = i + rad; + if (hi > netsize) + hi = netsize; + + j = i + 1; + k = i - 1; + m = 1; + while ((j < hi) || (k > lo)) { + a = radpower[m++]; + if (j < hi) { + p = network[j++]; + try { + p[0] -= (a * (p[0] - b)) / alpharadbias; + p[1] -= (a * (p[1] - g)) / alpharadbias; + p[2] -= (a * (p[2] - r)) / alpharadbias; + } catch (Exception e) { + } // prevents 1.3 miscompilation + } + if (k > lo) { + p = network[k--]; + try { + p[0] -= (a * (p[0] - b)) / alpharadbias; + p[1] -= (a * (p[1] - g)) / alpharadbias; + p[2] -= (a * (p[2] - r)) / alpharadbias; + } catch (Exception e) { + } + } + } + } + + /* + * Move neuron i towards biased (b,g,r) by factor alpha + * ---------------------------------------------------- + */ + protected void altersingle(int alpha, int i, int b, int g, int r) { + + /* alter hit neuron */ + int[] n = network[i]; + n[0] -= (alpha * (n[0] - b)) / initalpha; + n[1] -= (alpha * (n[1] - g)) / initalpha; + n[2] -= (alpha * (n[2] - r)) / initalpha; + } + + /* + * Search for biased BGR values ---------------------------- + */ + protected int contest(int b, int g, int r) { + + /* finds closest neuron (min dist) and updates freq */ + /* finds best neuron (min dist-bias) and returns position */ + /* for frequently chosen neurons, freq[i] is high and bias[i] is negative */ + /* bias[i] = gamma*((1/netsize)-freq[i]) */ + + int i, dist, a, biasdist, betafreq; + int bestpos, bestbiaspos, bestd, bestbiasd; + int[] n; + + bestd = ~(((int)1) << 31); + bestbiasd = bestd; + bestpos = -1; + bestbiaspos = bestpos; + + for (i = 0; i < netsize; i++) { + n = network[i]; + dist = n[0] - b; + if (dist < 0) + dist = -dist; + a = n[1] - g; + if (a < 0) + a = -a; + dist += a; + a = n[2] - r; + if (a < 0) + a = -a; + dist += a; + if (dist < bestd) { + bestd = dist; + bestpos = i; + } + biasdist = dist - ((bias[i]) >> (intbiasshift - netbiasshift)); + if (biasdist < bestbiasd) { + bestbiasd = biasdist; + bestbiaspos = i; + } + betafreq = (freq[i] >> betashift); + freq[i] -= betafreq; + bias[i] += (betafreq << gammashift); + } + freq[bestpos] += beta; + bias[bestpos] -= betagamma; + return (bestbiaspos); } - freq[bestpos] += beta; - bias[bestpos] -= betagamma; - return (bestbiaspos); - } } \ No newline at end of file diff --git a/len-activiti/src/main/java/com/len/util/AssigneeType.java b/len-activiti/src/main/java/com/len/util/AssigneeType.java index 4c25070..55431d9 100644 --- a/len-activiti/src/main/java/com/len/util/AssigneeType.java +++ b/len-activiti/src/main/java/com/len/util/AssigneeType.java @@ -5,10 +5,10 @@ package com.len.util; * @date 2018/1/24. * @email lenospmiller@gmail.com * - * 工作流节点绑定类型 + * 工作流节点绑定类型 */ public class AssigneeType { - public static final int USER_TYPE=1; - public static final int USER_S_TYPE=2; - public static final int GROUP_TYPE=3; + public static final int USER_TYPE = 1; + public static final int USER_S_TYPE = 2; + public static final int GROUP_TYPE = 3; } diff --git a/len-activiti/src/main/java/com/len/util/Base64Utils.java b/len-activiti/src/main/java/com/len/util/Base64Utils.java index 0787b47..b273227 100644 --- a/len-activiti/src/main/java/com/len/util/Base64Utils.java +++ b/len-activiti/src/main/java/com/len/util/Base64Utils.java @@ -1,14 +1,12 @@ package com.len.util; -import org.apache.log4j.Logger; -import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import org.apache.log4j.Logger; + +import sun.misc.BASE64Encoder; + /** * Created by user on 2018/7/12. */ @@ -22,10 +20,10 @@ public class Base64Utils { byte[] bytes = new byte[in.available()]; // 将文件中的内容读入到数组中 in.read(bytes); - strBase64 = encoder.encode(bytes); //将字节流数组转换为字符串 + strBase64 = encoder.encode(bytes); // 将字节流数组转换为字符串 in.close(); } catch (IOException ioe) { - logger.error("图片转64编码异常",ioe); + logger.error("图片转64编码异常", ioe); } return strBase64; } diff --git a/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java b/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java index a9227a5..c351445 100644 --- a/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java +++ b/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java @@ -3,6 +3,7 @@ package org.activiti; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; + import javax.servlet.ServletOutputStream; import javax.servlet.WriteListener; diff --git a/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java b/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java index 99133b8..2856f39 100644 --- a/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java +++ b/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java @@ -2,6 +2,7 @@ package org.activiti; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; + import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; @@ -28,21 +29,21 @@ public class GenericResponseWrapper extends HttpServletResponseWrapper { return new PrintWriter(getOutputStream(), true); } + public int getContentLength() { + return contentLength; + } + public void setContentLength(int length) { this.contentLength = length; super.setContentLength(length); } - public int getContentLength() { - return contentLength; + public String getContentType() { + return contentType; } public void setContentType(String type) { this.contentType = type; super.setContentType(type); } - - public String getContentType() { - return contentType; - } -} +} diff --git a/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java b/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java index cff0c49..e787a2c 100644 --- a/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java +++ b/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java @@ -4,30 +4,24 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Map; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; + +import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @WebFilter("/service/*") @Slf4j public class JsonpCallbackFilter implements Filter { - public void init(FilterConfig fConfig) throws ServletException { - } + public void init(FilterConfig fConfig) throws ServletException {} - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - HttpServletRequest httpRequest = (HttpServletRequest) request; - HttpServletResponse httpResponse = (HttpServletResponse) response; + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest httpRequest = (HttpServletRequest)request; + HttpServletResponse httpResponse = (HttpServletResponse)response; Map parms = httpRequest.getParameterMap(); @@ -41,7 +35,7 @@ public class JsonpCallbackFilter implements Filter { chain.doFilter(request, wrapper); - //handles the content-size truncation + // handles the content-size truncation ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); outputStream.write(new String(parms.get("callback")[0] + "(").getBytes()); outputStream.write(wrapper.getData()); @@ -60,6 +54,5 @@ public class JsonpCallbackFilter implements Filter { } } - public void destroy() { - } + public void destroy() {} } diff --git a/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java b/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java index 72121b3..f896c0a 100644 --- a/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java +++ b/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java @@ -1,14 +1,12 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.image; @@ -24,57 +22,61 @@ import org.activiti.bpmn.model.BpmnModel; * @author martin.grofcik * @author Tijs Rademakers */ -public interface HMProcessDiagramGenerator extends ProcessDiagramGenerator{ - - /** - * Generates a diagram of the given process definition, using the - * diagram interchange information of the process. - * @param bpmnModel bpmn model to get diagram for - * @param imageType type of the image to generate. - * @param highLightedActivities activities to highlight - * @param highLightedFlows flows to highlight - * @param activityFontName override the default activity font - * @param labelFontName override the default label font - * @param annotationFontName override the default annotation font - * @param customClassLoader provide a custom classloader for retrieving icon images - */ - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor); - - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor,List currentHighlightdActivities); - - /** - * Generates a diagram of the given process definition, using the - * diagram interchange information of the process. - * @param bpmnModel bpmn model to get diagram for - * @param imageType type of the image to generate. - * @param highLightedActivities activities to highlight - * @param highLightedFlows flows to highlight - */ - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows); - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, - List highLightedFlows, double scaleFactor); - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities); - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, double scaleFactor); - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader); - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, - String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor); - - public InputStream generatePngDiagram(BpmnModel bpmnModel); - - public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor); - - public InputStream generateJpgDiagram(BpmnModel bpmnModel); - - public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor); - - public BufferedImage generatePngImage(BpmnModel bpmnModel, double scaleFactor); +public interface HMProcessDiagramGenerator extends ProcessDiagramGenerator { + + /** + * Generates a diagram of the given process definition, using the diagram interchange information of the process. + * + * @param bpmnModel bpmn model to get diagram for + * @param imageType type of the image to generate. + * @param highLightedActivities activities to highlight + * @param highLightedFlows flows to highlight + * @param activityFontName override the default activity font + * @param labelFontName override the default label font + * @param annotationFontName override the default annotation font + * @param customClassLoader provide a custom classloader for retrieving icon images + */ + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, + ClassLoader customClassLoader, double scaleFactor); + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, + ClassLoader customClassLoader, double scaleFactor, List currentHighlightdActivities); + + /** + * Generates a diagram of the given process definition, using the diagram interchange information of the process. + * + * @param bpmnModel bpmn model to get diagram for + * @param imageType type of the image to generate. + * @param highLightedActivities activities to highlight + * @param highLightedFlows flows to highlight + */ + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows); + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, double scaleFactor); + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities); + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + double scaleFactor); + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, + String labelFontName, String annotationFontName, ClassLoader customClassLoader); + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, + String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor); + + public InputStream generatePngDiagram(BpmnModel bpmnModel); + + public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor); + + public InputStream generateJpgDiagram(BpmnModel bpmnModel); + + public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor); + + public BufferedImage generatePngImage(BpmnModel bpmnModel, double scaleFactor); } diff --git a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java index a97f60e..2d318bb 100644 --- a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java +++ b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java @@ -1,41 +1,22 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.image.impl; -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.Paint; -import java.awt.Point; -import java.awt.Polygon; -import java.awt.Rectangle; -import java.awt.RenderingHints; -import java.awt.Shape; -import java.awt.Stroke; +import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; -import java.awt.geom.AffineTransform; -import java.awt.geom.Ellipse2D; -import java.awt.geom.Line2D; -import java.awt.geom.Path2D; -import java.awt.geom.PathIterator; -import java.awt.geom.Rectangle2D; -import java.awt.geom.RoundRectangle2D; +import java.awt.geom.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -58,1294 +39,1343 @@ import org.slf4j.LoggerFactory; /** * Represents a canvas on which BPMN 2.0 constructs can be drawn. * - * Some of the icons used are licensed under a Creative Commons Attribution 2.5 - * License, see http://www.famfamfam.com/lab/icons/silk/ + * Some of the icons used are licensed under a Creative Commons Attribution 2.5 License, see + * http://www.famfamfam.com/lab/icons/silk/ * * @see org.activiti.engine.impl.bpmn.diagram.DefaultProcessDiagramGenerator * @author Joram Barrez */ public class DefaultProcessDiagramCanvas { - protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultProcessDiagramCanvas.class); - public enum SHAPE_TYPE {Rectangle, Rhombus, Ellipse} - - // Predefined sized - protected static final int ARROW_WIDTH = 5; - protected static final int CONDITIONAL_INDICATOR_WIDTH = 16; - protected static final int DEFAULT_INDICATOR_WIDTH = 10; - protected static final int MARKER_WIDTH = 12; - protected static final int FONT_SIZE = 11; - protected static final int FONT_SPACING = 2; - protected static final int TEXT_PADDING = 3; - protected static final int ANNOTATION_TEXT_PADDING = 7; - protected static final int LINE_HEIGHT = FONT_SIZE + FONT_SPACING; - - - // Colors - protected static Color TASK_BOX_COLOR = new Color(249, 249, 249); - protected static Color SUBPROCESS_BOX_COLOR = new Color(255, 255, 255); - protected static Color EVENT_COLOR = new Color(255, 255, 255); - protected static Color CONNECTION_COLOR = new Color(88, 88, 88); - protected static Color CONDITIONAL_INDICATOR_COLOR = new Color(255, 255, 255); - protected static Color HIGHLIGHT_COLOR = Color.GREEN; - protected static Color LABEL_COLOR = new Color(112, 146, 190); - protected static Color TASK_BORDER_COLOR = new Color(187, 187, 187); - protected static Color EVENT_BORDER_COLOR = new Color(88, 88, 88); - protected static Color SUBPROCESS_BORDER_COLOR = new Color(0, 0, 0); - - // Fonts - protected static Font LABEL_FONT = null; - protected static Font ANNOTATION_FONT = null; - - // Strokes - protected static Stroke THICK_TASK_BORDER_STROKE = new BasicStroke(3.0f); - protected static Stroke GATEWAY_TYPE_STROKE = new BasicStroke(3.0f); - protected static Stroke END_EVENT_STROKE = new BasicStroke(3.0f); - protected static Stroke MULTI_INSTANCE_STROKE = new BasicStroke(1.3f); - protected static Stroke EVENT_SUBPROCESS_STROKE = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 1.0f }, 0.0f); - protected static Stroke NON_INTERRUPTING_EVENT_STROKE = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 4.0f, 3.0f }, 0.0f); - protected static Stroke HIGHLIGHT_FLOW_STROKE = new BasicStroke(1.3f); - protected static Stroke ANNOTATION_STROKE = new BasicStroke(2.0f); - protected static Stroke ASSOCIATION_STROKE = new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 2.0f, 2.0f }, 0.0f); - - // icons - protected static int ICON_PADDING = 5; - protected static BufferedImage USERTASK_IMAGE; - protected static BufferedImage SCRIPTTASK_IMAGE; - protected static BufferedImage SERVICETASK_IMAGE; - protected static BufferedImage RECEIVETASK_IMAGE; - protected static BufferedImage SENDTASK_IMAGE; - protected static BufferedImage MANUALTASK_IMAGE; - protected static BufferedImage BUSINESS_RULE_TASK_IMAGE; - protected static BufferedImage SHELL_TASK_IMAGE; - protected static BufferedImage MULE_TASK_IMAGE; - protected static BufferedImage CAMEL_TASK_IMAGE; - - protected static BufferedImage TIMER_IMAGE; - protected static BufferedImage COMPENSATE_THROW_IMAGE; - protected static BufferedImage COMPENSATE_CATCH_IMAGE; - protected static BufferedImage ERROR_THROW_IMAGE; - protected static BufferedImage ERROR_CATCH_IMAGE; - protected static BufferedImage MESSAGE_THROW_IMAGE; - protected static BufferedImage MESSAGE_CATCH_IMAGE; - protected static BufferedImage SIGNAL_CATCH_IMAGE; - protected static BufferedImage SIGNAL_THROW_IMAGE; - - protected int canvasWidth = -1; - protected int canvasHeight = -1; - protected int minX = -1; - protected int minY = -1; - protected BufferedImage processDiagram; - protected Graphics2D g; - protected FontMetrics fontMetrics; - protected boolean closed; - protected ClassLoader customClassLoader; - protected String activityFontName = "Arial"; - protected String labelFontName = "Arial"; - protected String annotationFontName = "Arial"; - - /** - * Creates an empty canvas with given width and height. - * - * Allows to specify minimal boundaries on the left and upper side of the - * canvas. This is useful for diagrams that have white space there. - * Everything beneath these minimum values will be cropped. - * It's also possible to pass a specific font name and a class loader for the icon images. - * - */ - public DefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { - - this.canvasWidth = width; - this.canvasHeight = height; - this.minX = minX; - this.minY = minY; - if (activityFontName != null) { - this.activityFontName = activityFontName; - } - if (labelFontName != null) { - this.labelFontName = labelFontName; - } - if (annotationFontName != null) { - this.annotationFontName = annotationFontName; - } - this.customClassLoader = customClassLoader; - - initialize(imageType); - } - - /** - * Creates an empty canvas with given width and height. - * - * Allows to specify minimal boundaries on the left and upper side of the - * canvas. This is useful for diagrams that have white space there (eg - * Signavio). Everything beneath these minimum values will be cropped. - * - * @param minX - * Hint that will be used when generating the image. Parts that fall - * below minX on the horizontal scale will be cropped. - * @param minY - * Hint that will be used when generating the image. Parts that fall - * below minX on the horizontal scale will be cropped. - */ - public DefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) { - this.canvasWidth = width; - this.canvasHeight = height; - this.minX = minX; - this.minY = minY; - - initialize(imageType); - } - - public void initialize(String imageType) { - if ("png".equalsIgnoreCase(imageType)) { - this.processDiagram = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_ARGB); - } else { - this.processDiagram = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_RGB); - } - - this.g = processDiagram.createGraphics(); - if ("png".equalsIgnoreCase(imageType) == false) { - this.g.setBackground(new Color(255, 255, 255, 0)); - this.g.clearRect(0, 0, canvasWidth, canvasHeight); - } - - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g.setPaint(Color.black); - - Font font = new Font(activityFontName, Font.BOLD, FONT_SIZE); - g.setFont(font); - this.fontMetrics = g.getFontMetrics(); - - LABEL_FONT = new Font(labelFontName, Font.BOLD, 14); - ANNOTATION_FONT = new Font(annotationFontName, Font.PLAIN, FONT_SIZE); - - try { - USERTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/userTask.png", customClassLoader)); - SCRIPTTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/scriptTask.png", customClassLoader)); - SERVICETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/serviceTask.png", customClassLoader)); - RECEIVETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/receiveTask.png", customClassLoader)); - SENDTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/sendTask.png", customClassLoader)); - MANUALTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/manualTask.png", customClassLoader)); - BUSINESS_RULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/businessRuleTask.png", customClassLoader)); - SHELL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/shellTask.png", customClassLoader)); - CAMEL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/camelTask.png", customClassLoader)); - MULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/muleTask.png", customClassLoader)); - - TIMER_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/timer.png", customClassLoader)); - COMPENSATE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/compensate-throw.png", customClassLoader)); - COMPENSATE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/compensate.png", customClassLoader)); - ERROR_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/error-throw.png", customClassLoader)); - ERROR_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/error.png", customClassLoader)); - MESSAGE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/message-throw.png", customClassLoader)); - MESSAGE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/message.png", customClassLoader)); - SIGNAL_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/signal-throw.png", customClassLoader)); - SIGNAL_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/signal.png", customClassLoader)); - } catch (IOException e) { - LOGGER.warn("Could not load image for process diagram creation: {}", e.getMessage()); - } - } - - /** - * Generates an image of what currently is drawn on the canvas. - * - * Throws an {@link ActivitiException} when {@link #close()} is already - * called. - */ - public InputStream generateImage(String imageType) { - if (closed) { - throw new ActivitiImageException("ProcessDiagramGenerator already closed"); - } - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - try { - ImageIO.write(processDiagram, imageType, out); - - } catch (IOException e) { - throw new ActivitiImageException("Error while generating process image", e); - } finally { - try { - if (out != null) { - out.close(); + protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultProcessDiagramCanvas.class); + // Predefined sized + protected static final int ARROW_WIDTH = 5; + protected static final int CONDITIONAL_INDICATOR_WIDTH = 16; + protected static final int DEFAULT_INDICATOR_WIDTH = 10; + protected static final int MARKER_WIDTH = 12; + protected static final int FONT_SIZE = 11; + protected static final int FONT_SPACING = 2; + protected static final int TEXT_PADDING = 3; + protected static final int ANNOTATION_TEXT_PADDING = 7; + protected static final int LINE_HEIGHT = FONT_SIZE + FONT_SPACING; + // Colors + protected static Color TASK_BOX_COLOR = new Color(249, 249, 249); + protected static Color SUBPROCESS_BOX_COLOR = new Color(255, 255, 255); + protected static Color EVENT_COLOR = new Color(255, 255, 255); + protected static Color CONNECTION_COLOR = new Color(88, 88, 88); + protected static Color CONDITIONAL_INDICATOR_COLOR = new Color(255, 255, 255); + protected static Color HIGHLIGHT_COLOR = Color.GREEN; + protected static Color LABEL_COLOR = new Color(112, 146, 190); + protected static Color TASK_BORDER_COLOR = new Color(187, 187, 187); + protected static Color EVENT_BORDER_COLOR = new Color(88, 88, 88); + protected static Color SUBPROCESS_BORDER_COLOR = new Color(0, 0, 0); + // Fonts + protected static Font LABEL_FONT = null; + protected static Font ANNOTATION_FONT = null; + // Strokes + protected static Stroke THICK_TASK_BORDER_STROKE = new BasicStroke(3.0f); + protected static Stroke GATEWAY_TYPE_STROKE = new BasicStroke(3.0f); + protected static Stroke END_EVENT_STROKE = new BasicStroke(3.0f); + protected static Stroke MULTI_INSTANCE_STROKE = new BasicStroke(1.3f); + protected static Stroke EVENT_SUBPROCESS_STROKE = + new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {1.0f}, 0.0f); + protected static Stroke NON_INTERRUPTING_EVENT_STROKE = + new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {4.0f, 3.0f}, 0.0f); + protected static Stroke HIGHLIGHT_FLOW_STROKE = new BasicStroke(1.3f); + protected static Stroke ANNOTATION_STROKE = new BasicStroke(2.0f); + protected static Stroke ASSOCIATION_STROKE = + new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {2.0f, 2.0f}, 0.0f); + // icons + protected static int ICON_PADDING = 5; + protected static BufferedImage USERTASK_IMAGE; + protected static BufferedImage SCRIPTTASK_IMAGE; + protected static BufferedImage SERVICETASK_IMAGE; + protected static BufferedImage RECEIVETASK_IMAGE; + protected static BufferedImage SENDTASK_IMAGE; + protected static BufferedImage MANUALTASK_IMAGE; + protected static BufferedImage BUSINESS_RULE_TASK_IMAGE; + protected static BufferedImage SHELL_TASK_IMAGE; + protected static BufferedImage MULE_TASK_IMAGE; + protected static BufferedImage CAMEL_TASK_IMAGE; + protected static BufferedImage TIMER_IMAGE; + protected static BufferedImage COMPENSATE_THROW_IMAGE; + protected static BufferedImage COMPENSATE_CATCH_IMAGE; + protected static BufferedImage ERROR_THROW_IMAGE; + protected static BufferedImage ERROR_CATCH_IMAGE; + protected static BufferedImage MESSAGE_THROW_IMAGE; + protected static BufferedImage MESSAGE_CATCH_IMAGE; + protected static BufferedImage SIGNAL_CATCH_IMAGE; + protected static BufferedImage SIGNAL_THROW_IMAGE; + protected int canvasWidth = -1; + protected int canvasHeight = -1; + protected int minX = -1; + protected int minY = -1; + protected BufferedImage processDiagram; + protected Graphics2D g; + protected FontMetrics fontMetrics; + protected boolean closed; + protected ClassLoader customClassLoader; + protected String activityFontName = "Arial"; + protected String labelFontName = "Arial"; + protected String annotationFontName = "Arial"; + /** + * Creates an empty canvas with given width and height. + * + * Allows to specify minimal boundaries on the left and upper side of the canvas. This is useful for diagrams that + * have white space there. Everything beneath these minimum values will be cropped. It's also possible to pass a + * specific font name and a class loader for the icon images. + * + */ + public DefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, + String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { + + this.canvasWidth = width; + this.canvasHeight = height; + this.minX = minX; + this.minY = minY; + if (activityFontName != null) { + this.activityFontName = activityFontName; + } + if (labelFontName != null) { + this.labelFontName = labelFontName; + } + if (annotationFontName != null) { + this.annotationFontName = annotationFontName; + } + this.customClassLoader = customClassLoader; + + initialize(imageType); + } + + /** + * Creates an empty canvas with given width and height. + * + * Allows to specify minimal boundaries on the left and upper side of the canvas. This is useful for diagrams that + * have white space there (eg Signavio). Everything beneath these minimum values will be cropped. + * + * @param minX Hint that will be used when generating the image. Parts that fall below minX on the horizontal scale + * will be cropped. + * @param minY Hint that will be used when generating the image. Parts that fall below minX on the horizontal scale + * will be cropped. + */ + public DefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) { + this.canvasWidth = width; + this.canvasHeight = height; + this.minX = minX; + this.minY = minY; + + initialize(imageType); + } + + /** + * This method creates shape by type and coordinates. + * + * @param shapeType + * @param graphicInfo + * @return Shape + */ + private static Shape createShape(SHAPE_TYPE shapeType, GraphicInfo graphicInfo) { + if (SHAPE_TYPE.Rectangle.equals(shapeType)) { + // source is rectangle + return new Rectangle2D.Double(graphicInfo.getX(), graphicInfo.getY(), graphicInfo.getWidth(), + graphicInfo.getHeight()); + } else if (SHAPE_TYPE.Rhombus.equals(shapeType)) { + // source is rhombus + Path2D.Double rhombus = new Path2D.Double(); + rhombus.moveTo(graphicInfo.getX(), graphicInfo.getY() + graphicInfo.getHeight() / 2); + rhombus.lineTo(graphicInfo.getX() + graphicInfo.getWidth() / 2, + graphicInfo.getY() + graphicInfo.getHeight()); + rhombus.lineTo(graphicInfo.getX() + graphicInfo.getWidth(), + graphicInfo.getY() + graphicInfo.getHeight() / 2); + rhombus.lineTo(graphicInfo.getX() + graphicInfo.getWidth() / 2, graphicInfo.getY()); + rhombus.lineTo(graphicInfo.getX(), graphicInfo.getY() + graphicInfo.getHeight() / 2); + rhombus.closePath(); + return rhombus; + } else if (SHAPE_TYPE.Ellipse.equals(shapeType)) { + // source is ellipse + return new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), graphicInfo.getWidth(), + graphicInfo.getHeight()); + } else { + // unknown source element, just do not correct coordinates + } + return null; + } + + /** + * This method returns intersection point of shape border and line. + * + * @param shape + * @param line + * @return Point + */ + private static Point getIntersection(Shape shape, Line2D.Double line) { + if (shape instanceof Ellipse2D) { + return getEllipseIntersection(shape, line); + } else if (shape instanceof Rectangle2D || shape instanceof Path2D) { + return getShapeIntersection(shape, line); + } else { + // something strange + return null; + } + } + + /** + * This method calculates ellipse intersection with line + * + * @param shape Bounds of this shape used to calculate parameters of inscribed into this bounds ellipse. + * @param line + * @return Intersection point + */ + private static Point getEllipseIntersection(Shape shape, Line2D.Double line) { + double angle = Math.atan2(line.y2 - line.y1, line.x2 - line.x1); + double x = shape.getBounds2D().getWidth() / 2 * Math.cos(angle) + shape.getBounds2D().getCenterX(); + double y = shape.getBounds2D().getHeight() / 2 * Math.sin(angle) + shape.getBounds2D().getCenterY(); + Point p = new Point(); + p.setLocation(x, y); + return p; + } + + /** + * This method calculates shape intersection with line. + * + * @param shape + * @param line + * @return Intersection point + */ + private static Point getShapeIntersection(Shape shape, Line2D.Double line) { + PathIterator it = shape.getPathIterator(null); + double[] coords = new double[6]; + double[] pos = new double[2]; + Line2D.Double l = new Line2D.Double(); + while (!it.isDone()) { + int type = it.currentSegment(coords); + switch (type) { + case PathIterator.SEG_MOVETO: + pos[0] = coords[0]; + pos[1] = coords[1]; + break; + case PathIterator.SEG_LINETO: + l = new Line2D.Double(pos[0], pos[1], coords[0], coords[1]); + if (line.intersectsLine(l)) { + return getLinesIntersection(line, l); + } + pos[0] = coords[0]; + pos[1] = coords[1]; + break; + case PathIterator.SEG_CLOSE: + break; + default: + // whatever + } + it.next(); + } + return null; + } + + /** + * This method calculates intersections of two lines. + * + * @param a Line 1 + * @param b Line 2 + * @return Intersection point + */ + private static Point getLinesIntersection(Line2D a, Line2D b) { + double d = + (a.getX1() - a.getX2()) * (b.getY2() - b.getY1()) - (a.getY1() - a.getY2()) * (b.getX2() - b.getX1()); + double da = + (a.getX1() - b.getX1()) * (b.getY2() - b.getY1()) - (a.getY1() - b.getY1()) * (b.getX2() - b.getX1()); + // double db = (a.getX1()-a.getX2())*(a.getY1()-b.getY1()) - (a.getY1()-a.getY2())*(a.getX1()-b.getX1()); + double ta = da / d; + // double tb = db/d; + Point p = new Point(); + p.setLocation(a.getX1() + ta * (a.getX2() - a.getX1()), a.getY1() + ta * (a.getY2() - a.getY1())); + return p; + } + + public void initialize(String imageType) { + if ("png".equalsIgnoreCase(imageType)) { + this.processDiagram = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_ARGB); + } else { + this.processDiagram = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_RGB); + } + + this.g = processDiagram.createGraphics(); + if ("png".equalsIgnoreCase(imageType) == false) { + this.g.setBackground(new Color(255, 255, 255, 0)); + this.g.clearRect(0, 0, canvasWidth, canvasHeight); + } + + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setPaint(Color.black); + + Font font = new Font(activityFontName, Font.BOLD, FONT_SIZE); + g.setFont(font); + this.fontMetrics = g.getFontMetrics(); + + LABEL_FONT = new Font(labelFontName, Font.BOLD, 14); + ANNOTATION_FONT = new Font(annotationFontName, Font.PLAIN, FONT_SIZE); + + try { + USERTASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/userTask.png", customClassLoader)); + SCRIPTTASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/scriptTask.png", customClassLoader)); + SERVICETASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/serviceTask.png", customClassLoader)); + RECEIVETASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/receiveTask.png", customClassLoader)); + SENDTASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/sendTask.png", customClassLoader)); + MANUALTASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/manualTask.png", customClassLoader)); + BUSINESS_RULE_TASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/businessRuleTask.png", customClassLoader)); + SHELL_TASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/shellTask.png", customClassLoader)); + CAMEL_TASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/camelTask.png", customClassLoader)); + MULE_TASK_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/muleTask.png", customClassLoader)); + + TIMER_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/timer.png", customClassLoader)); + COMPENSATE_THROW_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/compensate-throw.png", customClassLoader)); + COMPENSATE_CATCH_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/compensate.png", customClassLoader)); + ERROR_THROW_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/error-throw.png", customClassLoader)); + ERROR_CATCH_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/error.png", customClassLoader)); + MESSAGE_THROW_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/message-throw.png", customClassLoader)); + MESSAGE_CATCH_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/message.png", customClassLoader)); + SIGNAL_THROW_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/signal-throw.png", customClassLoader)); + SIGNAL_CATCH_IMAGE = + ImageIO.read(ReflectUtil.getResource("org/activiti/icons/signal.png", customClassLoader)); + } catch (IOException e) { + LOGGER.warn("Could not load image for process diagram creation: {}", e.getMessage()); + } + } + + /** + * Generates an image of what currently is drawn on the canvas. + * + * Throws an {@link ActivitiException} when {@link #close()} is already called. + */ + public InputStream generateImage(String imageType) { + if (closed) { + throw new ActivitiImageException("ProcessDiagramGenerator already closed"); + } + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try { + ImageIO.write(processDiagram, imageType, out); + + } catch (IOException e) { + throw new ActivitiImageException("Error while generating process image", e); + } finally { + try { + if (out != null) { + out.close(); + } + } catch (IOException ignore) { + // Exception is silently ignored + } + } + return new ByteArrayInputStream(out.toByteArray()); + } + + /** + * Generates an image of what currently is drawn on the canvas. + * + * Throws an {@link ActivitiException} when {@link #close()} is already called. + */ + public BufferedImage generateBufferedImage(String imageType) { + if (closed) { + throw new ActivitiImageException("ProcessDiagramGenerator already closed"); + } + + // Try to remove white space + minX = (minX <= 5) ? 5 : minX; + minY = (minY <= 5) ? 5 : minY; + BufferedImage imageToSerialize = processDiagram; + if (minX >= 0 && minY >= 0) { + imageToSerialize = + processDiagram.getSubimage(minX - 5, minY - 5, canvasWidth - minX + 5, canvasHeight - minY + 5); + } + return imageToSerialize; + } + + /** + * Closes the canvas which dissallows further drawing and releases graphical resources. + */ + public void close() { + g.dispose(); + closed = true; + } + + public void drawNoneStartEvent(GraphicInfo graphicInfo) { + drawStartEvent(graphicInfo, null, 1.0); + } + + public void drawTimerStartEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawStartEvent(graphicInfo, TIMER_IMAGE, scaleFactor); + } + + public void drawSignalStartEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawStartEvent(graphicInfo, SIGNAL_CATCH_IMAGE, scaleFactor); + } + + public void drawMessageStartEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawStartEvent(graphicInfo, MESSAGE_CATCH_IMAGE, scaleFactor); + } + + public void drawStartEvent(GraphicInfo graphicInfo, BufferedImage image, double scaleFactor) { + Paint originalPaint = g.getPaint(); + g.setPaint(EVENT_COLOR); + // g.setPaint(new Color(36,202,88)); + Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), graphicInfo.getWidth(), + graphicInfo.getHeight()); + g.fill(circle); + g.setPaint(EVENT_BORDER_COLOR); + g.draw(circle); + g.setPaint(originalPaint); + if (image != null) { + // calculate coordinates to center image + int imageX = (int)Math + .round(graphicInfo.getX() + (graphicInfo.getWidth() / 2) - (image.getWidth() / 2 * scaleFactor)); + int imageY = (int)Math + .round(graphicInfo.getY() + (graphicInfo.getHeight() / 2) - (image.getHeight() / 2 * scaleFactor)); + g.drawImage(image, imageX, imageY, (int)(image.getWidth() / scaleFactor), + (int)(image.getHeight() / scaleFactor), null); + } + + } + + public void drawNoneEndEvent(GraphicInfo graphicInfo, double scaleFactor) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + g.setPaint(new Color(255, 255, 255)); + Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), graphicInfo.getWidth(), + graphicInfo.getHeight()); + g.fill(circle); + g.setPaint(EVENT_BORDER_COLOR); + if (scaleFactor == 1.0) { + g.setStroke(END_EVENT_STROKE); + } else { + g.setStroke(new BasicStroke(2.0f)); + } + g.draw(circle); + g.setStroke(originalStroke); + g.setPaint(originalPaint); + } + + public void drawErrorEndEvent(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawErrorEndEvent(graphicInfo, scaleFactor); + if (scaleFactor == 1.0) { + drawLabel(name, graphicInfo); + } + } + + public void drawErrorEndEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawNoneEndEvent(graphicInfo, scaleFactor); + g.drawImage(ERROR_THROW_IMAGE, (int)(graphicInfo.getX() + (graphicInfo.getWidth() / 4)), + (int)(graphicInfo.getY() + (graphicInfo.getHeight() / 4)), + (int)(ERROR_THROW_IMAGE.getWidth() / scaleFactor), (int)(ERROR_THROW_IMAGE.getHeight() / scaleFactor), + null); + } + + public void drawErrorStartEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawNoneStartEvent(graphicInfo); + g.drawImage(ERROR_CATCH_IMAGE, (int)(graphicInfo.getX() + (graphicInfo.getWidth() / 4)), + (int)(graphicInfo.getY() + (graphicInfo.getHeight() / 4)), + (int)(ERROR_CATCH_IMAGE.getWidth() / scaleFactor), (int)(ERROR_CATCH_IMAGE.getHeight() / scaleFactor), + null); + } + + public void drawCatchingEvent(GraphicInfo graphicInfo, boolean isInterrupting, BufferedImage image, + String eventType, double scaleFactor) { + + // event circles + Ellipse2D outerCircle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), graphicInfo.getWidth(), + graphicInfo.getHeight()); + int innerCircleSize = (int)(4 / scaleFactor); + if (innerCircleSize == 0) { + innerCircleSize = 1; + } + int innerCircleX = (int)graphicInfo.getX() + innerCircleSize; + int innerCircleY = (int)graphicInfo.getY() + innerCircleSize; + int innerCircleWidth = (int)graphicInfo.getWidth() - (2 * innerCircleSize); + int innerCircleHeight = (int)graphicInfo.getHeight() - (2 * innerCircleSize); + Ellipse2D innerCircle = new Ellipse2D.Double(innerCircleX, innerCircleY, innerCircleWidth, innerCircleHeight); + + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + g.setPaint(EVENT_COLOR); + g.fill(outerCircle); + + g.setPaint(EVENT_BORDER_COLOR); + if (isInterrupting == false) + g.setStroke(NON_INTERRUPTING_EVENT_STROKE); + g.draw(outerCircle); + g.setStroke(originalStroke); + g.setPaint(originalPaint); + g.draw(innerCircle); + + if (image != null) { + // calculate coordinates to center image + int imageX = + (int)(graphicInfo.getX() + (graphicInfo.getWidth() / 2) - (image.getWidth() / 2 * scaleFactor)); + int imageY = + (int)(graphicInfo.getY() + (graphicInfo.getHeight() / 2) - (image.getHeight() / 2 * scaleFactor)); + if (scaleFactor == 1.0 && "timer".equals(eventType)) { + // move image one pixel to center timer image + imageX++; + imageY++; + } + g.drawImage(image, imageX, imageY, (int)(image.getWidth() / scaleFactor), + (int)(image.getHeight() / scaleFactor), null); + } + } + + public void drawCatchingCompensateEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, + double scaleFactor) { + drawCatchingCompensateEvent(graphicInfo, isInterrupting, scaleFactor); + drawLabel(name, graphicInfo); + } + + public void drawCatchingCompensateEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { + drawCatchingEvent(graphicInfo, isInterrupting, COMPENSATE_CATCH_IMAGE, "compensate", scaleFactor); + } + + public void drawCatchingTimerEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, + double scaleFactor) { + drawCatchingTimerEvent(graphicInfo, isInterrupting, scaleFactor); + drawLabel(name, graphicInfo); + } + + public void drawCatchingTimerEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { + drawCatchingEvent(graphicInfo, isInterrupting, TIMER_IMAGE, "timer", scaleFactor); + } + + public void drawCatchingErrorEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, + double scaleFactor) { + drawCatchingErrorEvent(graphicInfo, isInterrupting, scaleFactor); + drawLabel(name, graphicInfo); + } + + public void drawCatchingErrorEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { + drawCatchingEvent(graphicInfo, isInterrupting, ERROR_CATCH_IMAGE, "error", scaleFactor); + } + + public void drawCatchingSignalEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, + double scaleFactor) { + drawCatchingSignalEvent(graphicInfo, isInterrupting, scaleFactor); + drawLabel(name, graphicInfo); + } + + public void drawCatchingSignalEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { + drawCatchingEvent(graphicInfo, isInterrupting, SIGNAL_CATCH_IMAGE, "signal", scaleFactor); + } + + public void drawCatchingMessageEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { + drawCatchingEvent(graphicInfo, isInterrupting, MESSAGE_CATCH_IMAGE, "message", scaleFactor); + } + + public void drawCatchingMessageEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, + double scaleFactor) { + drawCatchingEvent(graphicInfo, isInterrupting, MESSAGE_CATCH_IMAGE, "message", scaleFactor); + drawLabel(name, graphicInfo); + } + + public void drawThrowingCompensateEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawCatchingEvent(graphicInfo, true, COMPENSATE_THROW_IMAGE, "compensate", scaleFactor); + } + + public void drawThrowingSignalEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawCatchingEvent(graphicInfo, true, SIGNAL_THROW_IMAGE, "signal", scaleFactor); + } + + public void drawThrowingNoneEvent(GraphicInfo graphicInfo, double scaleFactor) { + drawCatchingEvent(graphicInfo, true, null, "none", scaleFactor); + } + + public void drawSequenceflow(int srcX, int srcY, int targetX, int targetY, boolean conditional, + double scaleFactor) { + drawSequenceflow(srcX, srcY, targetX, targetY, conditional, false, scaleFactor); + } + + public void drawSequenceflow(int srcX, int srcY, int targetX, int targetY, boolean conditional, boolean highLighted, + double scaleFactor) { + Paint originalPaint = g.getPaint(); + if (highLighted) + g.setPaint(HIGHLIGHT_COLOR); + + Line2D.Double line = new Line2D.Double(srcX, srcY, targetX, targetY); + g.draw(line); + drawArrowHead(line, scaleFactor); + + if (conditional) { + drawConditionalSequenceFlowIndicator(line, scaleFactor); } - } catch(IOException ignore) { - // Exception is silently ignored - } - } - return new ByteArrayInputStream(out.toByteArray()); - } - - /** - * Generates an image of what currently is drawn on the canvas. - * - * Throws an {@link ActivitiException} when {@link #close()} is already - * called. - */ - public BufferedImage generateBufferedImage(String imageType) { - if (closed) { - throw new ActivitiImageException("ProcessDiagramGenerator already closed"); - } - - // Try to remove white space - minX = (minX <= 5) ? 5 : minX; - minY = (minY <= 5) ? 5 : minY; - BufferedImage imageToSerialize = processDiagram; - if (minX >= 0 && minY >= 0) { - imageToSerialize = processDiagram.getSubimage(minX - 5, minY - 5, canvasWidth - minX + 5, canvasHeight - minY + 5); - } - return imageToSerialize; - } - - /** - * Closes the canvas which dissallows further drawing and releases graphical - * resources. - */ - public void close() { - g.dispose(); - closed = true; - } - - public void drawNoneStartEvent(GraphicInfo graphicInfo) { - drawStartEvent(graphicInfo, null, 1.0); - } - - public void drawTimerStartEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawStartEvent(graphicInfo, TIMER_IMAGE, scaleFactor); - } - - public void drawSignalStartEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawStartEvent(graphicInfo, SIGNAL_CATCH_IMAGE, scaleFactor); - } - - public void drawMessageStartEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawStartEvent(graphicInfo, MESSAGE_CATCH_IMAGE, scaleFactor); - } - - public void drawStartEvent(GraphicInfo graphicInfo, BufferedImage image, double scaleFactor) { - Paint originalPaint = g.getPaint(); - g.setPaint(EVENT_COLOR); -// g.setPaint(new Color(36,202,88)); - Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), - graphicInfo.getWidth(), graphicInfo.getHeight()); - g.fill(circle); - g.setPaint(EVENT_BORDER_COLOR); - g.draw(circle); - g.setPaint(originalPaint); - if (image != null) { - // calculate coordinates to center image - int imageX = (int) Math.round(graphicInfo.getX() + (graphicInfo.getWidth() / 2) - (image.getWidth() / 2 * scaleFactor)); - int imageY = (int) Math.round(graphicInfo.getY() + (graphicInfo.getHeight() / 2) - (image.getHeight() / 2 * scaleFactor)); - g.drawImage(image, imageX, imageY, - (int) (image.getWidth() / scaleFactor), (int) (image.getHeight() / scaleFactor), null); - } - - } - - public void drawNoneEndEvent(GraphicInfo graphicInfo, double scaleFactor) { - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); - g.setPaint(new Color(255,255,255)); - Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), - graphicInfo.getWidth(), graphicInfo.getHeight()); - g.fill(circle); - g.setPaint(EVENT_BORDER_COLOR); - if (scaleFactor == 1.0) { - g.setStroke(END_EVENT_STROKE); - } else { - g.setStroke(new BasicStroke(2.0f)); - } - g.draw(circle); - g.setStroke(originalStroke); - g.setPaint(originalPaint); - } - - public void drawErrorEndEvent(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawErrorEndEvent(graphicInfo, scaleFactor); - if (scaleFactor == 1.0) { - drawLabel(name, graphicInfo); - } - } - - public void drawErrorEndEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawNoneEndEvent(graphicInfo, scaleFactor); - g.drawImage(ERROR_THROW_IMAGE, (int) (graphicInfo.getX() + (graphicInfo.getWidth() / 4)), - (int) (graphicInfo.getY() + (graphicInfo.getHeight() / 4)), - (int) (ERROR_THROW_IMAGE.getWidth() / scaleFactor), - (int) (ERROR_THROW_IMAGE.getHeight() / scaleFactor), null); - } - - public void drawErrorStartEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawNoneStartEvent(graphicInfo); - g.drawImage(ERROR_CATCH_IMAGE, (int) (graphicInfo.getX() + (graphicInfo.getWidth() / 4)), - (int) (graphicInfo.getY() + (graphicInfo.getHeight() / 4)), - (int) (ERROR_CATCH_IMAGE.getWidth() / scaleFactor), - (int) (ERROR_CATCH_IMAGE.getHeight() / scaleFactor), null); - } - - public void drawCatchingEvent(GraphicInfo graphicInfo, boolean isInterrupting, - BufferedImage image, String eventType, double scaleFactor) { - - // event circles - Ellipse2D outerCircle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), - graphicInfo.getWidth(), graphicInfo.getHeight()); - int innerCircleSize = (int) (4 / scaleFactor); - if (innerCircleSize == 0) { - innerCircleSize = 1; - } - int innerCircleX = (int) graphicInfo.getX() + innerCircleSize; - int innerCircleY = (int) graphicInfo.getY() + innerCircleSize; - int innerCircleWidth = (int) graphicInfo.getWidth() - (2 * innerCircleSize); - int innerCircleHeight = (int) graphicInfo.getHeight() - (2 * innerCircleSize); - Ellipse2D innerCircle = new Ellipse2D.Double(innerCircleX, innerCircleY, innerCircleWidth, innerCircleHeight); - - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); - g.setPaint(EVENT_COLOR); - g.fill(outerCircle); - - g.setPaint(EVENT_BORDER_COLOR); - if (isInterrupting == false) - g.setStroke(NON_INTERRUPTING_EVENT_STROKE); - g.draw(outerCircle); - g.setStroke(originalStroke); - g.setPaint(originalPaint); - g.draw(innerCircle); - - if (image != null) { - // calculate coordinates to center image - int imageX = (int) (graphicInfo.getX() + (graphicInfo.getWidth() / 2) - (image.getWidth() / 2 * scaleFactor)); - int imageY = (int) (graphicInfo.getY() + (graphicInfo.getHeight() / 2) - (image.getHeight() / 2 * scaleFactor)); - if (scaleFactor == 1.0 && "timer".equals(eventType)) { - // move image one pixel to center timer image - imageX++; - imageY++; - } - g.drawImage(image, imageX, imageY, (int) (image.getWidth() / scaleFactor), - (int) (image.getHeight() / scaleFactor), null); - } - } - - public void drawCatchingCompensateEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingCompensateEvent(graphicInfo, isInterrupting, scaleFactor); - drawLabel(name, graphicInfo); - } - - public void drawCatchingCompensateEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingEvent(graphicInfo, isInterrupting, COMPENSATE_CATCH_IMAGE, "compensate", scaleFactor); - } - - public void drawCatchingTimerEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingTimerEvent(graphicInfo, isInterrupting, scaleFactor); - drawLabel(name, graphicInfo); - } - - public void drawCatchingTimerEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingEvent(graphicInfo, isInterrupting, TIMER_IMAGE, "timer", scaleFactor); - } - - public void drawCatchingErrorEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingErrorEvent(graphicInfo, isInterrupting, scaleFactor); - drawLabel(name, graphicInfo); - } - - public void drawCatchingErrorEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingEvent(graphicInfo, isInterrupting, ERROR_CATCH_IMAGE, "error", scaleFactor); - } - - public void drawCatchingSignalEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingSignalEvent(graphicInfo, isInterrupting, scaleFactor); - drawLabel(name, graphicInfo); - } - - public void drawCatchingSignalEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingEvent(graphicInfo, isInterrupting, SIGNAL_CATCH_IMAGE, "signal", scaleFactor); - } - - public void drawCatchingMessageEvent(GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingEvent(graphicInfo, isInterrupting, MESSAGE_CATCH_IMAGE, "message", scaleFactor); - } - - public void drawCatchingMessageEvent(String name, GraphicInfo graphicInfo, boolean isInterrupting, double scaleFactor) { - drawCatchingEvent(graphicInfo, isInterrupting, MESSAGE_CATCH_IMAGE, "message", scaleFactor); - drawLabel(name, graphicInfo); - } - - public void drawThrowingCompensateEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawCatchingEvent(graphicInfo, true, COMPENSATE_THROW_IMAGE, "compensate", scaleFactor); - } - - public void drawThrowingSignalEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawCatchingEvent(graphicInfo, true, SIGNAL_THROW_IMAGE, "signal", scaleFactor); - } - - public void drawThrowingNoneEvent(GraphicInfo graphicInfo, double scaleFactor) { - drawCatchingEvent(graphicInfo, true, null, "none", scaleFactor); - } - - public void drawSequenceflow(int srcX, int srcY, int targetX, int targetY, boolean conditional, double scaleFactor) { - drawSequenceflow(srcX, srcY, targetX, targetY, conditional, false, scaleFactor); - } - - public void drawSequenceflow(int srcX, int srcY, int targetX, int targetY, boolean conditional, boolean highLighted, double scaleFactor) { - Paint originalPaint = g.getPaint(); - if (highLighted) - g.setPaint(HIGHLIGHT_COLOR); - - Line2D.Double line = new Line2D.Double(srcX, srcY, targetX, targetY); - g.draw(line); - drawArrowHead(line, scaleFactor); - - if (conditional) { - drawConditionalSequenceFlowIndicator(line, scaleFactor); - } - - if (highLighted) - g.setPaint(originalPaint); - } - - public void drawAssociation(int[] xPoints, int[] yPoints, AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { - boolean conditional = false, isDefault = false; - drawConnection(xPoints, yPoints, conditional, isDefault, "association", associationDirection, highLighted, scaleFactor); - } - - public void drawSequenceflow(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, boolean highLighted, double scaleFactor) { - drawConnection(xPoints, yPoints, conditional, isDefault, "sequenceFlow", AssociationDirection.ONE, highLighted, scaleFactor); - } - - public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, - AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); + if (highLighted) + g.setPaint(originalPaint); + } - g.setPaint(CONNECTION_COLOR); - if (connectionType.equals("association")) { - g.setStroke(ASSOCIATION_STROKE); - } else if (highLighted) { - g.setPaint(HIGHLIGHT_COLOR); - g.setStroke(HIGHLIGHT_FLOW_STROKE); + public void drawAssociation(int[] xPoints, int[] yPoints, AssociationDirection associationDirection, + boolean highLighted, double scaleFactor) { + boolean conditional = false, isDefault = false; + drawConnection(xPoints, yPoints, conditional, isDefault, "association", associationDirection, highLighted, + scaleFactor); } - for (int i=1; i 1.0) + return; + int horizontal = (int)(CONDITIONAL_INDICATOR_WIDTH * 0.7); + int halfOfHorizontal = horizontal / 2; + int halfOfVertical = CONDITIONAL_INDICATOR_WIDTH / 2; + + Polygon conditionalIndicator = new Polygon(); + conditionalIndicator.addPoint(0, 0); + conditionalIndicator.addPoint(-halfOfHorizontal, halfOfVertical); + conditionalIndicator.addPoint(0, CONDITIONAL_INDICATOR_WIDTH); + conditionalIndicator.addPoint(halfOfHorizontal, halfOfVertical); + + AffineTransform transformation = new AffineTransform(); + transformation.setToIdentity(); + double angle = Math.atan2(line.y2 - line.y1, line.x2 - line.x1); + transformation.translate(line.x1, line.y1); + transformation.rotate((angle - Math.PI / 2d)); + + AffineTransform originalTransformation = g.getTransform(); + g.setTransform(transformation); + g.draw(conditionalIndicator); + + Paint originalPaint = g.getPaint(); + g.setPaint(CONDITIONAL_INDICATOR_COLOR); + g.fill(conditionalIndicator); + + g.setPaint(originalPaint); + g.setTransform(originalTransformation); + } - public void drawSequenceflowWithoutArrow(int srcX, int srcY, int targetX, int targetY, boolean conditional, boolean highLighted, double scaleFactor) { - Paint originalPaint = g.getPaint(); - if (highLighted) - g.setPaint(HIGHLIGHT_COLOR); - - Line2D.Double line = new Line2D.Double(srcX, srcY, targetX, targetY); - g.draw(line); + public void drawTask(BufferedImage icon, String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(name, graphicInfo); + g.drawImage(icon, (int)(graphicInfo.getX() + ICON_PADDING / scaleFactor), + (int)(graphicInfo.getY() + ICON_PADDING / scaleFactor), (int)(icon.getWidth() / scaleFactor), + (int)(icon.getHeight() / scaleFactor), null); + } - if (conditional) { - drawConditionalSequenceFlowIndicator(line, scaleFactor); - } - - if (highLighted) - g.setPaint(originalPaint); - } - - public void drawArrowHead(Line2D.Double line, double scaleFactor) { - int doubleArrowWidth = (int) (2 * ARROW_WIDTH / scaleFactor); - if (doubleArrowWidth == 0) { - doubleArrowWidth = 2; - } - Polygon arrowHead = new Polygon(); - arrowHead.addPoint(0, 0); - int arrowHeadPoint = (int) (-ARROW_WIDTH / scaleFactor); - if (arrowHeadPoint == 0) { - arrowHeadPoint = -1; - } - arrowHead.addPoint(arrowHeadPoint, -doubleArrowWidth); - arrowHeadPoint = (int) (ARROW_WIDTH / scaleFactor); - if (arrowHeadPoint == 0) { - arrowHeadPoint = 1; - } - arrowHead.addPoint(arrowHeadPoint, -doubleArrowWidth); + public void drawTask(String name, GraphicInfo graphicInfo) { + drawTask(name, graphicInfo, false); + } - AffineTransform transformation = new AffineTransform(); - transformation.setToIdentity(); - double angle = Math.atan2(line.y2 - line.y1, line.x2 - line.x1); - transformation.translate(line.x2, line.y2); - transformation.rotate((angle - Math.PI / 2d)); - - AffineTransform originalTransformation = g.getTransform(); - g.setTransform(transformation); - g.fill(arrowHead); - g.setTransform(originalTransformation); - } - - public void drawDefaultSequenceFlowIndicator(Line2D.Double line, double scaleFactor) { - double length = DEFAULT_INDICATOR_WIDTH / scaleFactor, halfOfLength = length/2, f = 8; - Line2D.Double defaultIndicator = new Line2D.Double(-halfOfLength, 0, halfOfLength, 0); - - double angle = Math.atan2(line.y2 - line.y1, line.x2 - line.x1); - double dx = f * Math.cos(angle), dy = f * Math.sin(angle), - x1 = line.x1 + dx, y1 = line.y1 + dy; - - AffineTransform transformation = new AffineTransform(); - transformation.setToIdentity(); - transformation.translate(x1, y1); - transformation.rotate((angle - 3 * Math.PI / 4)); - - AffineTransform originalTransformation = g.getTransform(); - g.setTransform(transformation); - g.draw(defaultIndicator); - - g.setTransform(originalTransformation); - } - - public void drawConditionalSequenceFlowIndicator(Line2D.Double line, double scaleFactor) { - if (scaleFactor > 1.0) return; - int horizontal = (int) (CONDITIONAL_INDICATOR_WIDTH * 0.7); - int halfOfHorizontal = horizontal / 2; - int halfOfVertical = CONDITIONAL_INDICATOR_WIDTH / 2; - - Polygon conditionalIndicator = new Polygon(); - conditionalIndicator.addPoint(0, 0); - conditionalIndicator.addPoint(-halfOfHorizontal, halfOfVertical); - conditionalIndicator.addPoint(0, CONDITIONAL_INDICATOR_WIDTH); - conditionalIndicator.addPoint(halfOfHorizontal, halfOfVertical); - - AffineTransform transformation = new AffineTransform(); - transformation.setToIdentity(); - double angle = Math.atan2(line.y2 - line.y1, line.x2 - line.x1); - transformation.translate(line.x1, line.y1); - transformation.rotate((angle - Math.PI / 2d)); - - AffineTransform originalTransformation = g.getTransform(); - g.setTransform(transformation); - g.draw(conditionalIndicator); - - Paint originalPaint = g.getPaint(); - g.setPaint(CONDITIONAL_INDICATOR_COLOR); - g.fill(conditionalIndicator); - - g.setPaint(originalPaint); - g.setTransform(originalTransformation); - } - - public void drawTask(BufferedImage icon, String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(name, graphicInfo); - g.drawImage(icon, (int) (graphicInfo.getX() + ICON_PADDING / scaleFactor), - (int) (graphicInfo.getY() + ICON_PADDING / scaleFactor), - (int) (icon.getWidth() / scaleFactor), (int) (icon.getHeight() / scaleFactor), null); - } - - public void drawTask(String name, GraphicInfo graphicInfo) { - drawTask(name, graphicInfo, false); - } - - public void drawPoolOrLane(String name, GraphicInfo graphicInfo) { - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - g.drawRect(x, y, width, height); - - // Add the name as text, vertical - if(name != null && name.length() > 0) { - // Include some padding - int availableTextSpace = height - 6; - - // Create rotation for derived font - AffineTransform transformation = new AffineTransform(); - transformation.setToIdentity(); - transformation.rotate(270 * Math.PI/180); - - Font currentFont = g.getFont(); - Font theDerivedFont = currentFont.deriveFont(transformation); - g.setFont(theDerivedFont); - - String truncated = fitTextToWidth(name, availableTextSpace); - int realWidth = fontMetrics.stringWidth(truncated); - - g.drawString(truncated, x + 2 + fontMetrics.getHeight(), 3 + y + availableTextSpace - (availableTextSpace - realWidth) / 2); - g.setFont(currentFont); - } - } - - protected void drawTask(String name, GraphicInfo graphicInfo, boolean thickBorder) { - Paint originalPaint = g.getPaint(); - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - - // Create a new gradient paint for every task box, gradient depends on x and y and is not relative -// g.setPaint(TASK_BOX_COLOR); - g.setPaint(new Color(144,238,144)); - int arcR = 6; - if (thickBorder) - arcR = 3; - - // shape - RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, arcR, arcR); - g.fill(rect); - g.setPaint(TASK_BORDER_COLOR); - - if (thickBorder) { - Stroke originalStroke = g.getStroke(); - g.setStroke(THICK_TASK_BORDER_STROKE); - g.draw(rect); - g.setStroke(originalStroke); - } else { - g.draw(rect); - } - - g.setPaint(originalPaint); - // text - if (name != null && name.length() > 0) { - int boxWidth = width - (2 * TEXT_PADDING); - int boxHeight = height - 16 - ICON_PADDING - ICON_PADDING - MARKER_WIDTH - 2 - 2; - int boxX = x + width/2 - boxWidth/2; - int boxY = y + height/2 - boxHeight/2 + ICON_PADDING + ICON_PADDING - 2 - 2; - - drawMultilineCentredText(name, boxX, boxY, boxWidth, boxHeight); - } - } - - protected void drawMultilineCentredText(String text, int x, int y, int boxWidth, int boxHeight) { - drawMultilineText(text, x, y, boxWidth, boxHeight, true); - } - - protected void drawMultilineAnnotationText(String text, int x, int y, int boxWidth, int boxHeight) { - drawMultilineText(text, x, y, boxWidth, boxHeight, false); - } - - protected void drawMultilineText(String text, int x, int y, int boxWidth, int boxHeight, boolean centered) { - // Create an attributed string based in input text - AttributedString attributedString = new AttributedString(text); - attributedString.addAttribute(TextAttribute.FONT, g.getFont()); - attributedString.addAttribute(TextAttribute.FOREGROUND, Color.black); - - AttributedCharacterIterator characterIterator = attributedString.getIterator(); - - int currentHeight = 0; - // Prepare a list of lines of text we'll be drawing - List layouts = new ArrayList(); - String lastLine = null; - - LineBreakMeasurer measurer = new LineBreakMeasurer(characterIterator, g.getFontRenderContext()); - - TextLayout layout = null; - while (measurer.getPosition() < characterIterator.getEndIndex() && currentHeight <= boxHeight) { - - int previousPosition = measurer.getPosition(); - - // Request next layout - layout = measurer.nextLayout(boxWidth); - - int height = ((Float)(layout.getDescent() + layout.getAscent() + layout.getLeading())).intValue(); - - if(currentHeight + height > boxHeight) { - // The line we're about to add should NOT be added anymore, append three dots to previous one instead - // to indicate more text is truncated - if (!layouts.isEmpty()) { - layouts.remove(layouts.size() - 1); - - if(lastLine.length() >= 4) { - lastLine = lastLine.substring(0, lastLine.length() - 4) + "..."; - } - layouts.add(new TextLayout(lastLine, g.getFont(), g.getFontRenderContext())); + public void drawPoolOrLane(String name, GraphicInfo graphicInfo) { + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + g.drawRect(x, y, width, height); + + // Add the name as text, vertical + if (name != null && name.length() > 0) { + // Include some padding + int availableTextSpace = height - 6; + + // Create rotation for derived font + AffineTransform transformation = new AffineTransform(); + transformation.setToIdentity(); + transformation.rotate(270 * Math.PI / 180); + + Font currentFont = g.getFont(); + Font theDerivedFont = currentFont.deriveFont(transformation); + g.setFont(theDerivedFont); + + String truncated = fitTextToWidth(name, availableTextSpace); + int realWidth = fontMetrics.stringWidth(truncated); + + g.drawString(truncated, x + 2 + fontMetrics.getHeight(), + 3 + y + availableTextSpace - (availableTextSpace - realWidth) / 2); + g.setFont(currentFont); } - break; - } else { - layouts.add(layout); - lastLine = text.substring(previousPosition, measurer.getPosition()); - currentHeight += height; - } } + protected void drawTask(String name, GraphicInfo graphicInfo, boolean thickBorder) { + Paint originalPaint = g.getPaint(); + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + + // Create a new gradient paint for every task box, gradient depends on x and y and is not relative + // g.setPaint(TASK_BOX_COLOR); + g.setPaint(new Color(144, 238, 144)); + int arcR = 6; + if (thickBorder) + arcR = 3; + + // shape + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, arcR, arcR); + g.fill(rect); + g.setPaint(TASK_BORDER_COLOR); + + if (thickBorder) { + Stroke originalStroke = g.getStroke(); + g.setStroke(THICK_TASK_BORDER_STROKE); + g.draw(rect); + g.setStroke(originalStroke); + } else { + g.draw(rect); + } + + g.setPaint(originalPaint); + // text + if (name != null && name.length() > 0) { + int boxWidth = width - (2 * TEXT_PADDING); + int boxHeight = height - 16 - ICON_PADDING - ICON_PADDING - MARKER_WIDTH - 2 - 2; + int boxX = x + width / 2 - boxWidth / 2; + int boxY = y + height / 2 - boxHeight / 2 + ICON_PADDING + ICON_PADDING - 2 - 2; + + drawMultilineCentredText(name, boxX, boxY, boxWidth, boxHeight); + } + } + + protected void drawMultilineCentredText(String text, int x, int y, int boxWidth, int boxHeight) { + drawMultilineText(text, x, y, boxWidth, boxHeight, true); + } + + protected void drawMultilineAnnotationText(String text, int x, int y, int boxWidth, int boxHeight) { + drawMultilineText(text, x, y, boxWidth, boxHeight, false); + } + + protected void drawMultilineText(String text, int x, int y, int boxWidth, int boxHeight, boolean centered) { + // Create an attributed string based in input text + AttributedString attributedString = new AttributedString(text); + attributedString.addAttribute(TextAttribute.FONT, g.getFont()); + attributedString.addAttribute(TextAttribute.FOREGROUND, Color.black); + + AttributedCharacterIterator characterIterator = attributedString.getIterator(); + + int currentHeight = 0; + // Prepare a list of lines of text we'll be drawing + List layouts = new ArrayList(); + String lastLine = null; + + LineBreakMeasurer measurer = new LineBreakMeasurer(characterIterator, g.getFontRenderContext()); + + TextLayout layout = null; + while (measurer.getPosition() < characterIterator.getEndIndex() && currentHeight <= boxHeight) { + + int previousPosition = measurer.getPosition(); + + // Request next layout + layout = measurer.nextLayout(boxWidth); - int currentY = y + (centered ? ((boxHeight - currentHeight) /2) : 0); - int currentX = 0; + int height = ((Float)(layout.getDescent() + layout.getAscent() + layout.getLeading())).intValue(); - // Actually draw the lines - for(TextLayout textLayout : layouts) { + if (currentHeight + height > boxHeight) { + // The line we're about to add should NOT be added anymore, append three dots to previous one instead + // to indicate more text is truncated + if (!layouts.isEmpty()) { + layouts.remove(layouts.size() - 1); - currentY += textLayout.getAscent(); - currentX = x + (centered ? ((boxWidth - ((Double)textLayout.getBounds().getWidth()).intValue()) /2) : 0); + if (lastLine.length() >= 4) { + lastLine = lastLine.substring(0, lastLine.length() - 4) + "..."; + } + layouts.add(new TextLayout(lastLine, g.getFont(), g.getFontRenderContext())); + } + break; + } else { + layouts.add(layout); + lastLine = text.substring(previousPosition, measurer.getPosition()); + currentHeight += height; + } + } + + int currentY = y + (centered ? ((boxHeight - currentHeight) / 2) : 0); + int currentX = 0; + + // Actually draw the lines + for (TextLayout textLayout : layouts) { + + currentY += textLayout.getAscent(); + currentX = x + (centered ? ((boxWidth - ((Double)textLayout.getBounds().getWidth()).intValue()) / 2) : 0); + + textLayout.draw(g, currentX, currentY); + currentY += textLayout.getDescent() + textLayout.getLeading(); + } + + } + + protected String fitTextToWidth(String original, int width) { + String text = original; + + // remove length for "..." + int maxWidth = width - 10; + + while (fontMetrics.stringWidth(text + "...") > maxWidth && text.length() > 0) { + text = text.substring(0, text.length() - 1); + } + + if (!text.equals(original)) { + text = text + "..."; + } + + return text; + } - textLayout.draw(g, currentX, currentY); - currentY += textLayout.getDescent() + textLayout.getLeading(); + public void drawUserTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(USERTASK_IMAGE, name, graphicInfo, scaleFactor); } - } + public void drawScriptTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(SCRIPTTASK_IMAGE, name, graphicInfo, scaleFactor); + } + public void drawServiceTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(SERVICETASK_IMAGE, name, graphicInfo, scaleFactor); + } - protected String fitTextToWidth(String original, int width) { - String text = original; + public void drawReceiveTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(RECEIVETASK_IMAGE, name, graphicInfo, scaleFactor); + } - // remove length for "..." - int maxWidth = width - 10; + public void drawSendTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(SENDTASK_IMAGE, name, graphicInfo, scaleFactor); + } - while (fontMetrics.stringWidth(text + "...") > maxWidth && text.length() > 0) { - text = text.substring(0, text.length() - 1); + public void drawManualTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(MANUALTASK_IMAGE, name, graphicInfo, scaleFactor); } - if (!text.equals(original)) { - text = text + "..."; + public void drawBusinessRuleTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(BUSINESS_RULE_TASK_IMAGE, name, graphicInfo, scaleFactor); } - return text; - } + public void drawCamelTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(CAMEL_TASK_IMAGE, name, graphicInfo, scaleFactor); + } - public void drawUserTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(USERTASK_IMAGE, name, graphicInfo, scaleFactor); - } + public void drawMuleTask(String name, GraphicInfo graphicInfo, double scaleFactor) { + drawTask(MULE_TASK_IMAGE, name, graphicInfo, scaleFactor); + } - public void drawScriptTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(SCRIPTTASK_IMAGE, name, graphicInfo, scaleFactor); - } + public void drawExpandedSubProcess(String name, GraphicInfo graphicInfo, Boolean isTriggeredByEvent, + double scaleFactor) { + RoundRectangle2D rect = new RoundRectangle2D.Double(graphicInfo.getX(), graphicInfo.getY(), + graphicInfo.getWidth(), graphicInfo.getHeight(), 8, 8); + + // Use different stroke (dashed) + if (isTriggeredByEvent) { + Stroke originalStroke = g.getStroke(); + g.setStroke(EVENT_SUBPROCESS_STROKE); + g.draw(rect); + g.setStroke(originalStroke); + } else { + Paint originalPaint = g.getPaint(); + g.setPaint(SUBPROCESS_BOX_COLOR); + g.fill(rect); + g.setPaint(SUBPROCESS_BORDER_COLOR); + g.draw(rect); + g.setPaint(originalPaint); + } - public void drawServiceTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(SERVICETASK_IMAGE, name, graphicInfo, scaleFactor); - } + if (scaleFactor == 1.0 && name != null && !name.isEmpty()) { + String text = fitTextToWidth(name, (int)graphicInfo.getWidth()); + g.drawString(text, (int)graphicInfo.getX() + 10, (int)graphicInfo.getY() + 15); + } + } - public void drawReceiveTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(RECEIVETASK_IMAGE, name, graphicInfo, scaleFactor); - } + public void drawCollapsedSubProcess(String name, GraphicInfo graphicInfo, Boolean isTriggeredByEvent) { + drawCollapsedTask(name, graphicInfo, false); + } - public void drawSendTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(SENDTASK_IMAGE, name, graphicInfo, scaleFactor); - } + public void drawCollapsedCallActivity(String name, GraphicInfo graphicInfo) { + drawCollapsedTask(name, graphicInfo, true); + } - public void drawManualTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(MANUALTASK_IMAGE, name, graphicInfo, scaleFactor); - } + protected void drawCollapsedTask(String name, GraphicInfo graphicInfo, boolean thickBorder) { + // The collapsed marker is now visualized separately + drawTask(name, graphicInfo, thickBorder); + } - public void drawBusinessRuleTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(BUSINESS_RULE_TASK_IMAGE, name, graphicInfo, scaleFactor); - } + public void drawCollapsedMarker(int x, int y, int width, int height) { + // rectangle + int rectangleWidth = MARKER_WIDTH; + int rectangleHeight = MARKER_WIDTH; + Rectangle rect = new Rectangle(x + (width - rectangleWidth) / 2, y + height - rectangleHeight - 3, + rectangleWidth, rectangleHeight); + g.draw(rect); + + // plus inside rectangle + Line2D.Double line = + new Line2D.Double(rect.getCenterX(), rect.getY() + 2, rect.getCenterX(), rect.getMaxY() - 2); + g.draw(line); + line = new Line2D.Double(rect.getMinX() + 2, rect.getCenterY(), rect.getMaxX() - 2, rect.getCenterY()); + g.draw(line); + } - public void drawCamelTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(CAMEL_TASK_IMAGE, name, graphicInfo, scaleFactor); - } + public void drawActivityMarkers(int x, int y, int width, int height, boolean multiInstanceSequential, + boolean multiInstanceParallel, boolean collapsed) { + if (collapsed) { + if (!multiInstanceSequential && !multiInstanceParallel) { + drawCollapsedMarker(x, y, width, height); + } else { + drawCollapsedMarker(x - MARKER_WIDTH / 2 - 2, y, width, height); + if (multiInstanceSequential) { + drawMultiInstanceMarker(true, x + MARKER_WIDTH / 2 + 2, y, width, height); + } else { + drawMultiInstanceMarker(false, x + MARKER_WIDTH / 2 + 2, y, width, height); + } + } + } else { + if (multiInstanceSequential) { + drawMultiInstanceMarker(true, x, y, width, height); + } else if (multiInstanceParallel) { + drawMultiInstanceMarker(false, x, y, width, height); + } + } + } - public void drawMuleTask(String name, GraphicInfo graphicInfo, double scaleFactor) { - drawTask(MULE_TASK_IMAGE, name, graphicInfo, scaleFactor); - } + public void drawGateway(GraphicInfo graphicInfo) { + Polygon rhombus = new Polygon(); + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + + rhombus.addPoint(x, y + (height / 2)); + rhombus.addPoint(x + (width / 2), y + height); + rhombus.addPoint(x + width, y + (height / 2)); + rhombus.addPoint(x + (width / 2), y); + g.draw(rhombus); + } - public void drawExpandedSubProcess(String name, GraphicInfo graphicInfo, Boolean isTriggeredByEvent, double scaleFactor) { - RoundRectangle2D rect = new RoundRectangle2D.Double(graphicInfo.getX(), graphicInfo.getY(), - graphicInfo.getWidth(), graphicInfo.getHeight(), 8, 8); + public void drawParallelGateway(GraphicInfo graphicInfo, double scaleFactor) { + // rhombus + drawGateway(graphicInfo); + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + + if (scaleFactor == 1.0) { + // plus inside rhombus + Stroke orginalStroke = g.getStroke(); + g.setStroke(GATEWAY_TYPE_STROKE); + Line2D.Double line = new Line2D.Double(x + 10, y + height / 2, x + width - 10, y + height / 2); // horizontal + g.draw(line); + line = new Line2D.Double(x + width / 2, y + height - 10, x + width / 2, y + 10); // vertical + g.draw(line); + g.setStroke(orginalStroke); + } + } - // Use different stroke (dashed) - if (isTriggeredByEvent) { - Stroke originalStroke = g.getStroke(); - g.setStroke(EVENT_SUBPROCESS_STROKE); - g.draw(rect); - g.setStroke(originalStroke); - } else { - Paint originalPaint = g.getPaint(); - g.setPaint(SUBPROCESS_BOX_COLOR); - g.fill(rect); - g.setPaint(SUBPROCESS_BORDER_COLOR); - g.draw(rect); - g.setPaint(originalPaint); + public void drawExclusiveGateway(GraphicInfo graphicInfo, double scaleFactor) { + // rhombus + drawGateway(graphicInfo); + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + + int quarterWidth = width / 4; + int quarterHeight = height / 4; + + if (scaleFactor == 1.0) { + // X inside rhombus + Stroke orginalStroke = g.getStroke(); + g.setStroke(GATEWAY_TYPE_STROKE); + Line2D.Double line = new Line2D.Double(x + quarterWidth + 3, y + quarterHeight + 3, + x + 3 * quarterWidth - 3, y + 3 * quarterHeight - 3); + g.draw(line); + line = new Line2D.Double(x + quarterWidth + 3, y + 3 * quarterHeight - 3, x + 3 * quarterWidth - 3, + y + quarterHeight + 3); + g.draw(line); + g.setStroke(orginalStroke); + } } - if (scaleFactor == 1.0 && name != null && !name.isEmpty()) { - String text = fitTextToWidth(name, (int) graphicInfo.getWidth()); - g.drawString(text, (int) graphicInfo.getX() + 10, (int) graphicInfo.getY() + 15); + public void drawInclusiveGateway(GraphicInfo graphicInfo, double scaleFactor) { + // rhombus + drawGateway(graphicInfo); + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + + int diameter = width / 2; + + if (scaleFactor == 1.0) { + // circle inside rhombus + Stroke orginalStroke = g.getStroke(); + g.setStroke(GATEWAY_TYPE_STROKE); + Ellipse2D.Double circle = + new Ellipse2D.Double(((width - diameter) / 2) + x, ((height - diameter) / 2) + y, diameter, diameter); + g.draw(circle); + g.setStroke(orginalStroke); + } } - } - public void drawCollapsedSubProcess(String name, GraphicInfo graphicInfo, Boolean isTriggeredByEvent) { - drawCollapsedTask(name, graphicInfo, false); - } + public void drawEventBasedGateway(GraphicInfo graphicInfo, double scaleFactor) { + // rhombus + drawGateway(graphicInfo); + + if (scaleFactor == 1.0) { + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + + double scale = .6; + + GraphicInfo eventInfo = new GraphicInfo(); + eventInfo.setX(x + width * (1 - scale) / 2); + eventInfo.setY(y + height * (1 - scale) / 2); + eventInfo.setWidth(width * scale); + eventInfo.setHeight(height * scale); + drawCatchingEvent(eventInfo, true, null, "eventGateway", scaleFactor); - public void drawCollapsedCallActivity(String name, GraphicInfo graphicInfo) { - drawCollapsedTask(name, graphicInfo, true); - } + double r = width / 6.; - protected void drawCollapsedTask(String name, GraphicInfo graphicInfo, boolean thickBorder) { - // The collapsed marker is now visualized separately - drawTask(name, graphicInfo, thickBorder); - } + // create pentagon (coords with respect to center) + int topX = (int)(.95 * r); // top right corner + int topY = (int)(-.31 * r); + int bottomX = (int)(.59 * r); // bottom right corner + int bottomY = (int)(.81 * r); - public void drawCollapsedMarker(int x, int y, int width, int height) { - // rectangle - int rectangleWidth = MARKER_WIDTH; - int rectangleHeight = MARKER_WIDTH; - Rectangle rect = new Rectangle(x + (width - rectangleWidth) / 2, y + height - rectangleHeight - 3, rectangleWidth, rectangleHeight); - g.draw(rect); - - // plus inside rectangle - Line2D.Double line = new Line2D.Double(rect.getCenterX(), rect.getY() + 2, rect.getCenterX(), rect.getMaxY() - 2); - g.draw(line); - line = new Line2D.Double(rect.getMinX() + 2, rect.getCenterY(), rect.getMaxX() - 2, rect.getCenterY()); - g.draw(line); - } - - public void drawActivityMarkers(int x, int y, int width, int height, boolean multiInstanceSequential, boolean multiInstanceParallel, boolean collapsed) { - if (collapsed) { - if (!multiInstanceSequential && !multiInstanceParallel) { - drawCollapsedMarker(x, y, width, height); - } else { - drawCollapsedMarker(x - MARKER_WIDTH / 2 - 2, y, width, height); - if (multiInstanceSequential) { - drawMultiInstanceMarker(true, x + MARKER_WIDTH / 2 + 2, y, width, height); + int[] xPoints = new int[] {0, topX, bottomX, -bottomX, -topX}; + int[] yPoints = new int[] {-(int)r, topY, bottomY, bottomY, topY}; + Polygon pentagon = new Polygon(xPoints, yPoints, 5); + pentagon.translate(x + width / 2, y + width / 2); + + // draw + g.drawPolygon(pentagon); + } + } + + public void drawMultiInstanceMarker(boolean sequential, int x, int y, int width, int height) { + int rectangleWidth = MARKER_WIDTH; + int rectangleHeight = MARKER_WIDTH; + int lineX = x + (width - rectangleWidth) / 2; + int lineY = y + height - rectangleHeight - 3; + + Stroke orginalStroke = g.getStroke(); + g.setStroke(MULTI_INSTANCE_STROKE); + + if (sequential) { + g.draw(new Line2D.Double(lineX, lineY, lineX + rectangleWidth, lineY)); + g.draw(new Line2D.Double(lineX, lineY + rectangleHeight / 2, lineX + rectangleWidth, + lineY + rectangleHeight / 2)); + g.draw(new Line2D.Double(lineX, lineY + rectangleHeight, lineX + rectangleWidth, lineY + rectangleHeight)); } else { - drawMultiInstanceMarker(false, x + MARKER_WIDTH / 2 + 2, y, width, height); + g.draw(new Line2D.Double(lineX, lineY, lineX, lineY + rectangleHeight)); + g.draw(new Line2D.Double(lineX + rectangleWidth / 2, lineY, lineX + rectangleWidth / 2, + lineY + rectangleHeight)); + g.draw(new Line2D.Double(lineX + rectangleWidth, lineY, lineX + rectangleWidth, lineY + rectangleHeight)); } - } - } else { - if (multiInstanceSequential) { - drawMultiInstanceMarker(true, x, y, width, height); - } else if (multiInstanceParallel) { - drawMultiInstanceMarker(false, x, y, width, height); - } - } - } - - public void drawGateway(GraphicInfo graphicInfo) { - Polygon rhombus = new Polygon(); - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - - rhombus.addPoint(x, y + (height / 2)); - rhombus.addPoint(x + (width / 2), y + height); - rhombus.addPoint(x + width, y + (height / 2)); - rhombus.addPoint(x + (width / 2), y); - g.draw(rhombus); - } - - public void drawParallelGateway(GraphicInfo graphicInfo, double scaleFactor) { - // rhombus - drawGateway(graphicInfo); - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - - if (scaleFactor == 1.0) { - // plus inside rhombus - Stroke orginalStroke = g.getStroke(); - g.setStroke(GATEWAY_TYPE_STROKE); - Line2D.Double line = new Line2D.Double(x + 10, y + height / 2, x + width - 10, y + height / 2); // horizontal - g.draw(line); - line = new Line2D.Double(x + width / 2, y + height - 10, x + width / 2, y + 10); // vertical - g.draw(line); - g.setStroke(orginalStroke); - } - } - - public void drawExclusiveGateway(GraphicInfo graphicInfo, double scaleFactor) { - // rhombus - drawGateway(graphicInfo); - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - - int quarterWidth = width / 4; - int quarterHeight = height / 4; - - if (scaleFactor == 1.0) { - // X inside rhombus - Stroke orginalStroke = g.getStroke(); - g.setStroke(GATEWAY_TYPE_STROKE); - Line2D.Double line = new Line2D.Double(x + quarterWidth + 3, y + quarterHeight + 3, x + 3 * quarterWidth - 3, y + 3 * quarterHeight - 3); - g.draw(line); - line = new Line2D.Double(x + quarterWidth + 3, y + 3 * quarterHeight - 3, x + 3 * quarterWidth - 3, y + quarterHeight + 3); - g.draw(line); - g.setStroke(orginalStroke); - } - } - - public void drawInclusiveGateway(GraphicInfo graphicInfo, double scaleFactor) { - // rhombus - drawGateway(graphicInfo); - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - - int diameter = width / 2; - - if (scaleFactor == 1.0) { - // circle inside rhombus - Stroke orginalStroke = g.getStroke(); - g.setStroke(GATEWAY_TYPE_STROKE); - Ellipse2D.Double circle = new Ellipse2D.Double(((width - diameter) / 2) + x, ((height - diameter) / 2) + y, diameter, diameter); - g.draw(circle); - g.setStroke(orginalStroke); - } - } - - public void drawEventBasedGateway(GraphicInfo graphicInfo, double scaleFactor) { - // rhombus - drawGateway(graphicInfo); - - if (scaleFactor == 1.0) { - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - - double scale = .6; - - GraphicInfo eventInfo = new GraphicInfo(); - eventInfo.setX(x + width*(1-scale)/2); - eventInfo.setY(y + height*(1-scale)/2); - eventInfo.setWidth(width*scale); - eventInfo.setHeight(height*scale); - drawCatchingEvent(eventInfo, true, null, "eventGateway", scaleFactor); - - double r = width / 6.; - - // create pentagon (coords with respect to center) - int topX = (int)(.95 * r); // top right corner - int topY = (int)(-.31 * r); - int bottomX = (int)(.59 * r); // bottom right corner - int bottomY = (int)(.81 * r); - - int[] xPoints = new int[]{ 0, topX, bottomX, -bottomX, -topX }; - int[] yPoints = new int[]{ -(int)r, topY, bottomY, bottomY, topY }; - Polygon pentagon = new Polygon(xPoints, yPoints, 5); - pentagon.translate(x+width/2, y+width/2); - - // draw - g.drawPolygon(pentagon); - } - } - - public void drawMultiInstanceMarker(boolean sequential, int x, int y, int width, int height) { - int rectangleWidth = MARKER_WIDTH; - int rectangleHeight = MARKER_WIDTH; - int lineX = x + (width - rectangleWidth) / 2; - int lineY = y + height - rectangleHeight - 3; - - Stroke orginalStroke = g.getStroke(); - g.setStroke(MULTI_INSTANCE_STROKE); - - if (sequential) { - g.draw(new Line2D.Double(lineX, lineY, lineX + rectangleWidth, lineY)); - g.draw(new Line2D.Double(lineX, lineY + rectangleHeight / 2, lineX + rectangleWidth, lineY + rectangleHeight / 2)); - g.draw(new Line2D.Double(lineX, lineY + rectangleHeight, lineX + rectangleWidth, lineY + rectangleHeight)); - } else { - g.draw(new Line2D.Double(lineX, lineY, lineX, lineY + rectangleHeight)); - g.draw(new Line2D.Double(lineX + rectangleWidth / 2, lineY, lineX + rectangleWidth / 2, lineY + rectangleHeight)); - g.draw(new Line2D.Double(lineX + rectangleWidth, lineY, lineX + rectangleWidth, lineY + rectangleHeight)); - } - - g.setStroke(orginalStroke); - } - - public void drawHighLight(int x, int y, int width, int height) { - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); - - g.setPaint(HIGHLIGHT_COLOR); -// g.setPaint(Color.GREEN); - g.setStroke(THICK_TASK_BORDER_STROKE); - - RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); - g.draw(rect); - - g.setPaint(originalPaint); - g.setStroke(originalStroke); - } - - - public void drawHighLight(int x, int y, int width, int height,Color color) { - Paint originalPaint = g.getPaint(); - Stroke originalStroke = g.getStroke(); - - g.setPaint(color); -// g.setPaint(Color.GREEN); - g.setStroke(THICK_TASK_BORDER_STROKE); - - RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); - g.draw(rect); - - g.setPaint(originalPaint); - g.setStroke(originalStroke); - } - - public void drawTextAnnotation(String text, GraphicInfo graphicInfo) { - int x = (int) graphicInfo.getX(); - int y = (int) graphicInfo.getY(); - int width = (int) graphicInfo.getWidth(); - int height = (int) graphicInfo.getHeight(); - - Font originalFont = g.getFont(); - Stroke originalStroke = g.getStroke(); - - g.setFont(ANNOTATION_FONT); - - Path2D path = new Path2D.Double(); - x += .5; - int lineLength = 18; - path.moveTo(x + lineLength, y); - path.lineTo(x, y); - path.lineTo(x, y + height); - path.lineTo(x + lineLength, y + height); - - path.lineTo(x + lineLength, y + height -1); - path.lineTo(x + 1, y + height -1); - path.lineTo(x + 1, y + 1); - path.lineTo(x + lineLength, y + 1); - path.closePath(); - - g.draw(path); - - int boxWidth = width - (2 * ANNOTATION_TEXT_PADDING); - int boxHeight = height - (2 * ANNOTATION_TEXT_PADDING); - int boxX = x + width/2 - boxWidth/2; - int boxY = y + height/2 - boxHeight/2; - - if (text != null && text.isEmpty() == false) { - drawMultilineAnnotationText(text, boxX, boxY, boxWidth, boxHeight); - } - - // restore originals - g.setFont(originalFont); - g.setStroke(originalStroke); - } - - public void drawLabel(String text, GraphicInfo graphicInfo){ - drawLabel(text, graphicInfo, true); - } - public void drawLabel(String text, GraphicInfo graphicInfo, boolean centered){ - float interline = 1.0f; - - // text - if (text != null && text.length()>0) { - Paint originalPaint = g.getPaint(); - Font originalFont = g.getFont(); - - g.setPaint(LABEL_COLOR); - g.setFont(LABEL_FONT); - - int wrapWidth = 100; - int textY = (int) graphicInfo.getY(); - - // TODO: use drawMultilineText() - AttributedString as = new AttributedString(text); - as.addAttribute(TextAttribute.FOREGROUND, g.getPaint()); - as.addAttribute(TextAttribute.FONT, g.getFont()); - AttributedCharacterIterator aci = as.getIterator(); - FontRenderContext frc = new FontRenderContext(null, true, false); - LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc); - - while (lbm.getPosition() < text.length()) { - TextLayout tl = lbm.nextLayout(wrapWidth); - textY += tl.getAscent(); - Rectangle2D bb = tl.getBounds(); - double tX = graphicInfo.getX(); - if (centered) { - tX += (int) (graphicInfo.getWidth() / 2 - bb.getWidth() / 2); - } - tl.draw(g, (float) tX, textY); - textY += tl.getDescent() + tl.getLeading() + (interline - 1.0f) * tl.getAscent(); - } - - // restore originals - g.setFont(originalFont); - g.setPaint(originalPaint); - } - } - - /** - * This method makes coordinates of connection flow better. - * @param sourceShapeType - * @param targetShapeType - * @param sourceGraphicInfo - * @param targetGraphicInfo - * @param graphicInfoList - * - */ - public List connectionPerfectionizer(SHAPE_TYPE sourceShapeType, SHAPE_TYPE targetShapeType, GraphicInfo sourceGraphicInfo, GraphicInfo targetGraphicInfo, List graphicInfoList) { - Shape shapeFirst = createShape(sourceShapeType, sourceGraphicInfo); - Shape shapeLast = createShape(targetShapeType, targetGraphicInfo); - - if (graphicInfoList != null && graphicInfoList.size() > 0) { - GraphicInfo graphicInfoFirst = graphicInfoList.get(0); - GraphicInfo graphicInfoLast = graphicInfoList.get(graphicInfoList.size()-1); - if (shapeFirst != null) { - graphicInfoFirst.setX(shapeFirst.getBounds2D().getCenterX()); - graphicInfoFirst.setY(shapeFirst.getBounds2D().getCenterY()); - } - if (shapeLast != null) { - graphicInfoLast.setX(shapeLast.getBounds2D().getCenterX()); - graphicInfoLast.setY(shapeLast.getBounds2D().getCenterY()); - } - - Point p = null; - - if (shapeFirst != null) { - Line2D.Double lineFirst = new Line2D.Double(graphicInfoFirst.getX(), graphicInfoFirst.getY(), graphicInfoList.get(1).getX(), graphicInfoList.get(1).getY()); - p = getIntersection(shapeFirst, lineFirst); - if (p != null) { - graphicInfoFirst.setX(p.getX()); - graphicInfoFirst.setY(p.getY()); + + g.setStroke(orginalStroke); + } + + public void drawHighLight(int x, int y, int width, int height) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(HIGHLIGHT_COLOR); + // g.setPaint(Color.GREEN); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + public void drawHighLight(int x, int y, int width, int height, Color color) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(color); + // g.setPaint(Color.GREEN); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + public void drawTextAnnotation(String text, GraphicInfo graphicInfo) { + int x = (int)graphicInfo.getX(); + int y = (int)graphicInfo.getY(); + int width = (int)graphicInfo.getWidth(); + int height = (int)graphicInfo.getHeight(); + + Font originalFont = g.getFont(); + Stroke originalStroke = g.getStroke(); + + g.setFont(ANNOTATION_FONT); + + Path2D path = new Path2D.Double(); + x += .5; + int lineLength = 18; + path.moveTo(x + lineLength, y); + path.lineTo(x, y); + path.lineTo(x, y + height); + path.lineTo(x + lineLength, y + height); + + path.lineTo(x + lineLength, y + height - 1); + path.lineTo(x + 1, y + height - 1); + path.lineTo(x + 1, y + 1); + path.lineTo(x + lineLength, y + 1); + path.closePath(); + + g.draw(path); + + int boxWidth = width - (2 * ANNOTATION_TEXT_PADDING); + int boxHeight = height - (2 * ANNOTATION_TEXT_PADDING); + int boxX = x + width / 2 - boxWidth / 2; + int boxY = y + height / 2 - boxHeight / 2; + + if (text != null && text.isEmpty() == false) { + drawMultilineAnnotationText(text, boxX, boxY, boxWidth, boxHeight); } - } - - if (shapeLast != null) { - Line2D.Double lineLast = new Line2D.Double(graphicInfoLast.getX(), graphicInfoLast.getY(), graphicInfoList.get(graphicInfoList.size()-2).getX(), graphicInfoList.get(graphicInfoList.size()-2).getY()); - p = getIntersection(shapeLast, lineLast); - if (p != null) { - graphicInfoLast.setX(p.getX()); - graphicInfoLast.setY(p.getY()); + + // restore originals + g.setFont(originalFont); + g.setStroke(originalStroke); + } + + public void drawLabel(String text, GraphicInfo graphicInfo) { + drawLabel(text, graphicInfo, true); + } + + public void drawLabel(String text, GraphicInfo graphicInfo, boolean centered) { + float interline = 1.0f; + + // text + if (text != null && text.length() > 0) { + Paint originalPaint = g.getPaint(); + Font originalFont = g.getFont(); + + g.setPaint(LABEL_COLOR); + g.setFont(LABEL_FONT); + + int wrapWidth = 100; + int textY = (int)graphicInfo.getY(); + + // TODO: use drawMultilineText() + AttributedString as = new AttributedString(text); + as.addAttribute(TextAttribute.FOREGROUND, g.getPaint()); + as.addAttribute(TextAttribute.FONT, g.getFont()); + AttributedCharacterIterator aci = as.getIterator(); + FontRenderContext frc = new FontRenderContext(null, true, false); + LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc); + + while (lbm.getPosition() < text.length()) { + TextLayout tl = lbm.nextLayout(wrapWidth); + textY += tl.getAscent(); + Rectangle2D bb = tl.getBounds(); + double tX = graphicInfo.getX(); + if (centered) { + tX += (int)(graphicInfo.getWidth() / 2 - bb.getWidth() / 2); + } + tl.draw(g, (float)tX, textY); + textY += tl.getDescent() + tl.getLeading() + (interline - 1.0f) * tl.getAscent(); + } + + // restore originals + g.setFont(originalFont); + g.setPaint(originalPaint); } - } - } - - return graphicInfoList; - } - - /** - * This method creates shape by type and coordinates. - * @param shapeType - * @param graphicInfo - * @return Shape - */ - private static Shape createShape(SHAPE_TYPE shapeType, GraphicInfo graphicInfo) { - if (SHAPE_TYPE.Rectangle.equals(shapeType)) { - // source is rectangle - return new Rectangle2D.Double(graphicInfo.getX(), graphicInfo.getY(), graphicInfo.getWidth(), graphicInfo.getHeight()); - } else if (SHAPE_TYPE.Rhombus.equals(shapeType)) { - // source is rhombus - Path2D.Double rhombus = new Path2D.Double(); - rhombus.moveTo(graphicInfo.getX(), graphicInfo.getY() + graphicInfo.getHeight() / 2); - rhombus.lineTo(graphicInfo.getX() + graphicInfo.getWidth() / 2, graphicInfo.getY() + graphicInfo.getHeight()); - rhombus.lineTo(graphicInfo.getX() + graphicInfo.getWidth(), graphicInfo.getY() + graphicInfo.getHeight() / 2); - rhombus.lineTo(graphicInfo.getX() + graphicInfo.getWidth() / 2, graphicInfo.getY()); - rhombus.lineTo(graphicInfo.getX(), graphicInfo.getY() + graphicInfo.getHeight() / 2); - rhombus.closePath(); - return rhombus; - } else if (SHAPE_TYPE.Ellipse.equals(shapeType)) { - // source is ellipse - return new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), graphicInfo.getWidth(), graphicInfo.getHeight()); - } else { - // unknown source element, just do not correct coordinates - } - return null; - } - - /** - * This method returns intersection point of shape border and line. - * - * @param shape - * @param line - * @return Point - */ - private static Point getIntersection(Shape shape, Line2D.Double line) { - if (shape instanceof Ellipse2D) { - return getEllipseIntersection(shape, line); - } else if (shape instanceof Rectangle2D || shape instanceof Path2D) { - return getShapeIntersection(shape, line); - } else { - // something strange - return null; - } - } + } /** - * This method calculates ellipse intersection with line - * @param shape - * Bounds of this shape used to calculate parameters of inscribed into this bounds ellipse. - * @param line - * @return Intersection point + * This method makes coordinates of connection flow better. + * + * @param sourceShapeType + * @param targetShapeType + * @param sourceGraphicInfo + * @param targetGraphicInfo + * @param graphicInfoList + * */ - private static Point getEllipseIntersection(Shape shape, Line2D.Double line) { - double angle = Math.atan2(line.y2 - line.y1, line.x2 - line.x1); - double x = shape.getBounds2D().getWidth()/2 * Math.cos(angle) + shape.getBounds2D().getCenterX(); - double y = shape.getBounds2D().getHeight()/2 * Math.sin(angle) + shape.getBounds2D().getCenterY(); - Point p = new Point(); - p.setLocation(x, y); - return p; - } - - /** - * This method calculates shape intersection with line. - * - * @param shape - * @param line - * @return Intersection point - */ - private static Point getShapeIntersection(Shape shape, Line2D.Double line) { - PathIterator it = shape.getPathIterator(null); - double[] coords = new double[6]; - double[] pos = new double[2]; - Line2D.Double l = new Line2D.Double(); - while (!it.isDone()) { - int type = it.currentSegment(coords); - switch (type) { - case PathIterator.SEG_MOVETO: - pos[0] = coords[0]; - pos[1] = coords[1]; - break; - case PathIterator.SEG_LINETO: - l = new Line2D.Double(pos[0], pos[1], coords[0], coords[1]); - if (line.intersectsLine(l)) { - return getLinesIntersection(line, l); + public List connectionPerfectionizer(SHAPE_TYPE sourceShapeType, SHAPE_TYPE targetShapeType, + GraphicInfo sourceGraphicInfo, GraphicInfo targetGraphicInfo, List graphicInfoList) { + Shape shapeFirst = createShape(sourceShapeType, sourceGraphicInfo); + Shape shapeLast = createShape(targetShapeType, targetGraphicInfo); + + if (graphicInfoList != null && graphicInfoList.size() > 0) { + GraphicInfo graphicInfoFirst = graphicInfoList.get(0); + GraphicInfo graphicInfoLast = graphicInfoList.get(graphicInfoList.size() - 1); + if (shapeFirst != null) { + graphicInfoFirst.setX(shapeFirst.getBounds2D().getCenterX()); + graphicInfoFirst.setY(shapeFirst.getBounds2D().getCenterY()); + } + if (shapeLast != null) { + graphicInfoLast.setX(shapeLast.getBounds2D().getCenterX()); + graphicInfoLast.setY(shapeLast.getBounds2D().getCenterY()); + } + + Point p = null; + + if (shapeFirst != null) { + Line2D.Double lineFirst = new Line2D.Double(graphicInfoFirst.getX(), graphicInfoFirst.getY(), + graphicInfoList.get(1).getX(), graphicInfoList.get(1).getY()); + p = getIntersection(shapeFirst, lineFirst); + if (p != null) { + graphicInfoFirst.setX(p.getX()); + graphicInfoFirst.setY(p.getY()); + } + } + + if (shapeLast != null) { + Line2D.Double lineLast = new Line2D.Double(graphicInfoLast.getX(), graphicInfoLast.getY(), + graphicInfoList.get(graphicInfoList.size() - 2).getX(), + graphicInfoList.get(graphicInfoList.size() - 2).getY()); + p = getIntersection(shapeLast, lineLast); + if (p != null) { + graphicInfoLast.setX(p.getX()); + graphicInfoLast.setY(p.getY()); + } + } } - pos[0] = coords[0]; - pos[1] = coords[1]; - break; - case PathIterator.SEG_CLOSE: - break; - default: - // whatever - } - it.next(); - } - return null; - } - - /** - * This method calculates intersections of two lines. - * @param a Line 1 - * @param b Line 2 - * @return Intersection point - */ - private static Point getLinesIntersection(Line2D a, Line2D b) { - double d = (a.getX1()-a.getX2())*(b.getY2()-b.getY1()) - (a.getY1()-a.getY2())*(b.getX2()-b.getX1()); - double da = (a.getX1()-b.getX1())*(b.getY2()-b.getY1()) - (a.getY1()-b.getY1())*(b.getX2()-b.getX1()); - // double db = (a.getX1()-a.getX2())*(a.getY1()-b.getY1()) - (a.getY1()-a.getY2())*(a.getX1()-b.getX1()); - double ta = da/d; - // double tb = db/d; - Point p = new Point(); - p.setLocation(a.getX1()+ta*(a.getX2()-a.getX1()), a.getY1()+ta*(a.getY2()-a.getY1())); - return p; - } + + return graphicInfoList; + } + + public enum SHAPE_TYPE { + Rectangle, Rhombus, Ellipse + } } diff --git a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java index c4a72ab..9ffbcec 100644 --- a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java +++ b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java @@ -1,14 +1,12 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.image.impl; @@ -16,1149 +14,1135 @@ package org.activiti.image.impl; import java.awt.*; import java.awt.image.BufferedImage; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; +import java.util.*; import java.util.List; -import java.util.Map; - -import org.activiti.bpmn.model.Activity; -import org.activiti.bpmn.model.Artifact; -import org.activiti.bpmn.model.Association; -import org.activiti.bpmn.model.AssociationDirection; -import org.activiti.bpmn.model.BaseElement; -import org.activiti.bpmn.model.BoundaryEvent; -import org.activiti.bpmn.model.BpmnModel; -import org.activiti.bpmn.model.BusinessRuleTask; -import org.activiti.bpmn.model.CallActivity; -import org.activiti.bpmn.model.CompensateEventDefinition; -import org.activiti.bpmn.model.EndEvent; -import org.activiti.bpmn.model.ErrorEventDefinition; + +import org.activiti.bpmn.model.*; import org.activiti.bpmn.model.Event; -import org.activiti.bpmn.model.EventDefinition; -import org.activiti.bpmn.model.EventGateway; -import org.activiti.bpmn.model.EventSubProcess; -import org.activiti.bpmn.model.ExclusiveGateway; -import org.activiti.bpmn.model.FlowElement; -import org.activiti.bpmn.model.FlowElementsContainer; -import org.activiti.bpmn.model.FlowNode; -import org.activiti.bpmn.model.Gateway; -import org.activiti.bpmn.model.GraphicInfo; -import org.activiti.bpmn.model.InclusiveGateway; -import org.activiti.bpmn.model.IntermediateCatchEvent; -import org.activiti.bpmn.model.Lane; -import org.activiti.bpmn.model.ManualTask; -import org.activiti.bpmn.model.MessageEventDefinition; -import org.activiti.bpmn.model.MultiInstanceLoopCharacteristics; -import org.activiti.bpmn.model.ParallelGateway; -import org.activiti.bpmn.model.Pool; import org.activiti.bpmn.model.Process; -import org.activiti.bpmn.model.ReceiveTask; -import org.activiti.bpmn.model.ScriptTask; -import org.activiti.bpmn.model.SendTask; -import org.activiti.bpmn.model.SequenceFlow; -import org.activiti.bpmn.model.ServiceTask; -import org.activiti.bpmn.model.SignalEventDefinition; -import org.activiti.bpmn.model.StartEvent; -import org.activiti.bpmn.model.SubProcess; -import org.activiti.bpmn.model.Task; -import org.activiti.bpmn.model.TextAnnotation; -import org.activiti.bpmn.model.ThrowEvent; -import org.activiti.bpmn.model.TimerEventDefinition; -import org.activiti.bpmn.model.UserTask; import org.activiti.image.HMProcessDiagramGenerator; -import org.activiti.image.ProcessDiagramGenerator; /** - * Class to generate an image based the diagram interchange information in a - * BPMN 2.0 process. + * Class to generate an image based the diagram interchange information in a BPMN 2.0 process. * * @author Joram Barrez * @author Tijs Rademakers */ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator { - protected Map, ActivityDrawInstruction> activityDrawInstructions = new HashMap, ActivityDrawInstruction>(); - protected Map, ArtifactDrawInstruction> artifactDrawInstructions = new HashMap, ArtifactDrawInstruction>(); - - public DefaultProcessDiagramGenerator() { - this(1.0); - } - - // The instructions on how to draw a certain construct is - // created statically and stored in a map for performance. - public DefaultProcessDiagramGenerator(final double scaleFactor) { - // start event - activityDrawInstructions.put(StartEvent.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - StartEvent startEvent = (StartEvent) flowNode; - if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { - EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); - if (eventDefinition instanceof TimerEventDefinition) { - processDiagramCanvas.drawTimerStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof ErrorEventDefinition) { - processDiagramCanvas.drawErrorStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof SignalEventDefinition) { - processDiagramCanvas.drawSignalStartEvent(graphicInfo, scaleFactor); - } else if (eventDefinition instanceof MessageEventDefinition) { - processDiagramCanvas.drawMessageStartEvent(graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawNoneStartEvent(graphicInfo); - } + protected Map, ActivityDrawInstruction> activityDrawInstructions = + new HashMap, ActivityDrawInstruction>(); + protected Map, ArtifactDrawInstruction> artifactDrawInstructions = + new HashMap, ArtifactDrawInstruction>(); + + public DefaultProcessDiagramGenerator() { + this(1.0); + } + + // The instructions on how to draw a certain construct is + // created statically and stored in a map for performance. + public DefaultProcessDiagramGenerator(final double scaleFactor) { + // start event + activityDrawInstructions.put(StartEvent.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + StartEvent startEvent = (StartEvent)flowNode; + if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { + EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); + if (eventDefinition instanceof TimerEventDefinition) { + processDiagramCanvas.drawTimerStartEvent(graphicInfo, scaleFactor); + } else if (eventDefinition instanceof ErrorEventDefinition) { + processDiagramCanvas.drawErrorStartEvent(graphicInfo, scaleFactor); + } else if (eventDefinition instanceof SignalEventDefinition) { + processDiagramCanvas.drawSignalStartEvent(graphicInfo, scaleFactor); + } else if (eventDefinition instanceof MessageEventDefinition) { + processDiagramCanvas.drawMessageStartEvent(graphicInfo, scaleFactor); + } else { + processDiagramCanvas.drawNoneStartEvent(graphicInfo); + } + } else { + processDiagramCanvas.drawNoneStartEvent(graphicInfo); + } + } + }); + + // signal catch + activityDrawInstructions.put(IntermediateCatchEvent.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent)flowNode; + if (intermediateCatchEvent.getEventDefinitions() != null + && !intermediateCatchEvent.getEventDefinitions().isEmpty()) { + if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { + processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, true, + scaleFactor); + } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { + processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, true, scaleFactor); + } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { + processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, true, + scaleFactor); + } + } + } + }); + + // signal throw + activityDrawInstructions.put(ThrowEvent.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + ThrowEvent throwEvent = (ThrowEvent)flowNode; + if (throwEvent.getEventDefinitions() != null && !throwEvent.getEventDefinitions().isEmpty()) { + if (throwEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { + processDiagramCanvas.drawThrowingSignalEvent(graphicInfo, scaleFactor); + } else if (throwEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { + processDiagramCanvas.drawThrowingCompensateEvent(graphicInfo, scaleFactor); + } else { + processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); + } + } else { + processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); + } + } + }); + + // end event + activityDrawInstructions.put(EndEvent.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + EndEvent endEvent = (EndEvent)flowNode; + if (endEvent.getEventDefinitions() != null && !endEvent.getEventDefinitions().isEmpty()) { + if (endEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { + processDiagramCanvas.drawErrorEndEvent(flowNode.getName(), graphicInfo, scaleFactor); + } else { + processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); + } + } else { + processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); + } + } + }); + + // task + activityDrawInstructions.put(Task.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawTask(flowNode.getName(), graphicInfo); + } + }); + + // user task + activityDrawInstructions.put(UserTask.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawUserTask(flowNode.getName(), graphicInfo, scaleFactor); + } + }); + + // script task + activityDrawInstructions.put(ScriptTask.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawScriptTask(flowNode.getName(), graphicInfo, scaleFactor); + } + }); + + // service task + activityDrawInstructions.put(ServiceTask.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + ServiceTask serviceTask = (ServiceTask)flowNode; + if ("camel".equalsIgnoreCase(serviceTask.getType())) { + processDiagramCanvas.drawCamelTask(serviceTask.getName(), graphicInfo, scaleFactor); + } else if ("mule".equalsIgnoreCase(serviceTask.getType())) { + processDiagramCanvas.drawMuleTask(serviceTask.getName(), graphicInfo, scaleFactor); + } else { + processDiagramCanvas.drawServiceTask(serviceTask.getName(), graphicInfo, scaleFactor); + } + } + }); + + // receive task + activityDrawInstructions.put(ReceiveTask.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawReceiveTask(flowNode.getName(), graphicInfo, scaleFactor); + } + }); + + // send task + activityDrawInstructions.put(SendTask.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawSendTask(flowNode.getName(), graphicInfo, scaleFactor); + } + }); + + // manual task + activityDrawInstructions.put(ManualTask.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawManualTask(flowNode.getName(), graphicInfo, scaleFactor); + } + }); + + // businessRuleTask task + activityDrawInstructions.put(BusinessRuleTask.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawBusinessRuleTask(flowNode.getName(), graphicInfo, scaleFactor); + } + }); + + // exclusive gateway + activityDrawInstructions.put(ExclusiveGateway.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawExclusiveGateway(graphicInfo, scaleFactor); + } + }); + + // inclusive gateway + activityDrawInstructions.put(InclusiveGateway.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawInclusiveGateway(graphicInfo, scaleFactor); + } + }); + + // parallel gateway + activityDrawInstructions.put(ParallelGateway.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawParallelGateway(graphicInfo, scaleFactor); + } + }); + + // event based gateway + activityDrawInstructions.put(EventGateway.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawEventBasedGateway(graphicInfo, scaleFactor); + } + }); + + // Boundary timer + activityDrawInstructions.put(BoundaryEvent.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + BoundaryEvent boundaryEvent = (BoundaryEvent)flowNode; + if (boundaryEvent.getEventDefinitions() != null && !boundaryEvent.getEventDefinitions().isEmpty()) { + if (boundaryEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { + + processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, + boundaryEvent.isCancelActivity(), scaleFactor); + + } else if (boundaryEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { + + processDiagramCanvas.drawCatchingErrorEvent(graphicInfo, boundaryEvent.isCancelActivity(), + scaleFactor); + + } else if (boundaryEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { + processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, + boundaryEvent.isCancelActivity(), scaleFactor); + + } else if (boundaryEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { + processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, + boundaryEvent.isCancelActivity(), scaleFactor); + + } else if (boundaryEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { + processDiagramCanvas.drawCatchingCompensateEvent(graphicInfo, boundaryEvent.isCancelActivity(), + scaleFactor); + } + } + + } + }); + + // subprocess + activityDrawInstructions.put(SubProcess.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { + processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, false); + } else { + processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); + } + } + }); + + // Event subprocess + activityDrawInstructions.put(EventSubProcess.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { + processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, true); + } else { + processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, true, scaleFactor); + } + } + }); + + // call activity + activityDrawInstructions.put(CallActivity.class, new ActivityDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + processDiagramCanvas.drawCollapsedCallActivity(flowNode.getName(), graphicInfo); + } + }); + + // text annotation + artifactDrawInstructions.put(TextAnnotation.class, new ArtifactDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); + TextAnnotation textAnnotation = (TextAnnotation)artifact; + processDiagramCanvas.drawTextAnnotation(textAnnotation.getText(), graphicInfo); + } + }); + + // association + artifactDrawInstructions.put(Association.class, new ArtifactDrawInstruction() { + + public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { + Association association = (Association)artifact; + String sourceRef = association.getSourceRef(); + String targetRef = association.getTargetRef(); + + // source and target can be instance of FlowElement or Artifact + BaseElement sourceElement = bpmnModel.getFlowElement(sourceRef); + BaseElement targetElement = bpmnModel.getFlowElement(targetRef); + if (sourceElement == null) { + sourceElement = bpmnModel.getArtifact(sourceRef); + } + if (targetElement == null) { + targetElement = bpmnModel.getArtifact(targetRef); + } + List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); + graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, + targetElement, graphicInfoList); + int xPoints[] = new int[graphicInfoList.size()]; + int yPoints[] = new int[graphicInfoList.size()]; + for (int i = 1; i < graphicInfoList.size(); i++) { + GraphicInfo graphicInfo = graphicInfoList.get(i); + GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); + + if (i == 1) { + xPoints[0] = (int)previousGraphicInfo.getX(); + yPoints[0] = (int)previousGraphicInfo.getY(); + } + xPoints[i] = (int)graphicInfo.getX(); + yPoints[i] = (int)graphicInfo.getY(); + } + + AssociationDirection associationDirection = association.getAssociationDirection(); + processDiagramCanvas.drawAssociation(xPoints, yPoints, associationDirection, false, scaleFactor); + } + }); + } + + /** + * This method makes coordinates of connection flow better. + * + * @param processDiagramCanvas + * @param bpmnModel + * @param sourceElement + * @param targetElement + * @param graphicInfoList + * @return + */ + protected static List connectionPerfectionizer(DefaultProcessDiagramCanvas processDiagramCanvas, + BpmnModel bpmnModel, BaseElement sourceElement, BaseElement targetElement, List graphicInfoList) { + GraphicInfo sourceGraphicInfo = bpmnModel.getGraphicInfo(sourceElement.getId()); + GraphicInfo targetGraphicInfo = bpmnModel.getGraphicInfo(targetElement.getId()); + + DefaultProcessDiagramCanvas.SHAPE_TYPE sourceShapeType = getShapeType(sourceElement); + DefaultProcessDiagramCanvas.SHAPE_TYPE targetShapeType = getShapeType(targetElement); + + return processDiagramCanvas.connectionPerfectionizer(sourceShapeType, targetShapeType, sourceGraphicInfo, + targetGraphicInfo, graphicInfoList); + } + + /** + * This method returns shape type of base element.
+ * Each element can be presented as rectangle, rhombus, or ellipse. + * + * @param baseElement + * @return DefaultProcessDiagramCanvas.SHAPE_TYPE + */ + protected static DefaultProcessDiagramCanvas.SHAPE_TYPE getShapeType(BaseElement baseElement) { + if (baseElement instanceof Task || baseElement instanceof Activity || baseElement instanceof TextAnnotation) { + return DefaultProcessDiagramCanvas.SHAPE_TYPE.Rectangle; + } else if (baseElement instanceof Gateway) { + return DefaultProcessDiagramCanvas.SHAPE_TYPE.Rhombus; + } else if (baseElement instanceof Event) { + return DefaultProcessDiagramCanvas.SHAPE_TYPE.Ellipse; } else { - processDiagramCanvas.drawNoneStartEvent(graphicInfo); - } - } - }); - - // signal catch - activityDrawInstructions.put(IntermediateCatchEvent.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) flowNode; - if (intermediateCatchEvent.getEventDefinitions() != null && !intermediateCatchEvent.getEventDefinitions() - .isEmpty()) { - if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { - processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, true, scaleFactor); - } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { - processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, true, scaleFactor); - } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { - processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, true, scaleFactor); - } + // unknown source element, just do not correct coordinates } - } - }); - - // signal throw - activityDrawInstructions.put(ThrowEvent.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - ThrowEvent throwEvent = (ThrowEvent) flowNode; - if (throwEvent.getEventDefinitions() != null && !throwEvent.getEventDefinitions().isEmpty()) { - if (throwEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { - processDiagramCanvas.drawThrowingSignalEvent(graphicInfo, scaleFactor); - } else if (throwEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { - processDiagramCanvas.drawThrowingCompensateEvent(graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); - } - } else { - processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); + return null; + } + + protected static GraphicInfo getLineCenter(List graphicInfoList) { + GraphicInfo gi = new GraphicInfo(); + + int xPoints[] = new int[graphicInfoList.size()]; + int yPoints[] = new int[graphicInfoList.size()]; + + double length = 0; + double[] lengths = new double[graphicInfoList.size()]; + lengths[0] = 0; + double m; + for (int i = 1; i < graphicInfoList.size(); i++) { + GraphicInfo graphicInfo = graphicInfoList.get(i); + GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); + + if (i == 1) { + xPoints[0] = (int)previousGraphicInfo.getX(); + yPoints[0] = (int)previousGraphicInfo.getY(); + } + xPoints[i] = (int)graphicInfo.getX(); + yPoints[i] = (int)graphicInfo.getY(); + + length += Math.sqrt(Math.pow((int)graphicInfo.getX() - (int)previousGraphicInfo.getX(), 2) + + Math.pow((int)graphicInfo.getY() - (int)previousGraphicInfo.getY(), 2)); + lengths[i] = length; } - } - }); - - // end event - activityDrawInstructions.put(EndEvent.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - EndEvent endEvent = (EndEvent) flowNode; - if (endEvent.getEventDefinitions() != null && !endEvent.getEventDefinitions().isEmpty()) { - if (endEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { - processDiagramCanvas.drawErrorEndEvent(flowNode.getName(), graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); - } - } else { - processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); + m = length / 2; + int p1 = 0, p2 = 1; + for (int i = 1; i < lengths.length; i++) { + double len = lengths[i]; + p1 = i - 1; + p2 = i; + if (len > m) { + break; + } } - } - }); - - // task - activityDrawInstructions.put(Task.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawTask(flowNode.getName(), graphicInfo); - } - }); - - // user task - activityDrawInstructions.put(UserTask.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawUserTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // script task - activityDrawInstructions.put(ScriptTask.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawScriptTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // service task - activityDrawInstructions.put(ServiceTask.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - ServiceTask serviceTask = (ServiceTask) flowNode; - if ("camel".equalsIgnoreCase(serviceTask.getType())) { - processDiagramCanvas.drawCamelTask(serviceTask.getName(), graphicInfo, scaleFactor); - } else if ("mule".equalsIgnoreCase(serviceTask.getType())) { - processDiagramCanvas.drawMuleTask(serviceTask.getName(), graphicInfo, scaleFactor); - } else { - processDiagramCanvas.drawServiceTask(serviceTask.getName(), graphicInfo, scaleFactor); + + GraphicInfo graphicInfo1 = graphicInfoList.get(p1); + GraphicInfo graphicInfo2 = graphicInfoList.get(p2); + + double AB = (int)graphicInfo2.getX() - (int)graphicInfo1.getX(); + double OA = (int)graphicInfo2.getY() - (int)graphicInfo1.getY(); + double OB = lengths[p2] - lengths[p1]; + double ob = m - lengths[p1]; + double ab = AB * ob / OB; + double oa = OA * ob / OB; + + double mx = graphicInfo1.getX() + ab; + double my = graphicInfo1.getY() + oa; + + gi.setX(mx); + gi.setY(my); + return gi; + } + + private static void drawHighLight(DefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { + processDiagramCanvas.drawHighLight((int)graphicInfo.getX(), (int)graphicInfo.getY(), + (int)graphicInfo.getWidth(), (int)graphicInfo.getHeight()); + + } + + private static void drawColorHighLight(DefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo, + Color color) { + processDiagramCanvas.drawHighLight((int)graphicInfo.getX(), (int)graphicInfo.getY(), + (int)graphicInfo.getWidth(), (int)graphicInfo.getHeight(), color); + + } + + protected static DefaultProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType, + String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { + + // We need to calculate maximum values to know how big the image will be in its entirety + double minX = Double.MAX_VALUE; + double maxX = 0; + double minY = Double.MAX_VALUE; + double maxY = 0; + + for (Pool pool : bpmnModel.getPools()) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); + minX = graphicInfo.getX(); + maxX = graphicInfo.getX() + graphicInfo.getWidth(); + minY = graphicInfo.getY(); + maxY = graphicInfo.getY() + graphicInfo.getHeight(); } - } - }); - - // receive task - activityDrawInstructions.put(ReceiveTask.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawReceiveTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // send task - activityDrawInstructions.put(SendTask.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawSendTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // manual task - activityDrawInstructions.put(ManualTask.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawManualTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // businessRuleTask task - activityDrawInstructions.put(BusinessRuleTask.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawBusinessRuleTask(flowNode.getName(), graphicInfo, scaleFactor); - } - }); - - // exclusive gateway - activityDrawInstructions.put(ExclusiveGateway.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawExclusiveGateway(graphicInfo, scaleFactor); - } - }); - - // inclusive gateway - activityDrawInstructions.put(InclusiveGateway.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawInclusiveGateway(graphicInfo, scaleFactor); - } - }); - - // parallel gateway - activityDrawInstructions.put(ParallelGateway.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawParallelGateway(graphicInfo, scaleFactor); - } - }); - - // event based gateway - activityDrawInstructions.put(EventGateway.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawEventBasedGateway(graphicInfo, scaleFactor); - } - }); - - - // Boundary timer - activityDrawInstructions.put(BoundaryEvent.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - BoundaryEvent boundaryEvent = (BoundaryEvent) flowNode; - if (boundaryEvent.getEventDefinitions() != null && !boundaryEvent.getEventDefinitions().isEmpty()) { - if (boundaryEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { - - processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (boundaryEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { - - processDiagramCanvas.drawCatchingErrorEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (boundaryEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { - processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (boundaryEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { - processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - - } else if (boundaryEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { - processDiagramCanvas.drawCatchingCompensateEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); - } + + List flowNodes = gatherAllFlowNodes(bpmnModel); + for (FlowNode flowNode : flowNodes) { + + GraphicInfo flowNodeGraphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + + // width + if (flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth() > maxX) { + maxX = flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth(); + } + if (flowNodeGraphicInfo.getX() < minX) { + minX = flowNodeGraphicInfo.getX(); + } + // height + if (flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight() > maxY) { + maxY = flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight(); + } + if (flowNodeGraphicInfo.getY() < minY) { + minY = flowNodeGraphicInfo.getY(); + } + + for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { + List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); + if (graphicInfoList != null) { + for (GraphicInfo graphicInfo : graphicInfoList) { + // width + if (graphicInfo.getX() > maxX) { + maxX = graphicInfo.getX(); + } + if (graphicInfo.getX() < minX) { + minX = graphicInfo.getX(); + } + // height + if (graphicInfo.getY() > maxY) { + maxY = graphicInfo.getY(); + } + if (graphicInfo.getY() < minY) { + minY = graphicInfo.getY(); + } + } + } + } } - - } - }); - // subprocess - activityDrawInstructions.put(SubProcess.class, new ActivityDrawInstruction() { + List artifacts = gatherAllArtifacts(bpmnModel); + for (Artifact artifact : artifacts) { + + GraphicInfo artifactGraphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); + + if (artifactGraphicInfo != null) { + // width + if (artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth() > maxX) { + maxX = artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth(); + } + if (artifactGraphicInfo.getX() < minX) { + minX = artifactGraphicInfo.getX(); + } + // height + if (artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight() > maxY) { + maxY = artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight(); + } + if (artifactGraphicInfo.getY() < minY) { + minY = artifactGraphicInfo.getY(); + } + } - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, false); - } else { - processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); + List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); + if (graphicInfoList != null) { + for (GraphicInfo graphicInfo : graphicInfoList) { + // width + if (graphicInfo.getX() > maxX) { + maxX = graphicInfo.getX(); + } + if (graphicInfo.getX() < minX) { + minX = graphicInfo.getX(); + } + // height + if (graphicInfo.getY() > maxY) { + maxY = graphicInfo.getY(); + } + if (graphicInfo.getY() < minY) { + minY = graphicInfo.getY(); + } + } + } } - } - }); - - // Event subprocess - activityDrawInstructions.put(EventSubProcess.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { - processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, true); - } else { - processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, true, scaleFactor); + + int nrOfLanes = 0; + for (Process process : bpmnModel.getProcesses()) { + for (Lane l : process.getLanes()) { + + nrOfLanes++; + + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(l.getId()); + // // width + if (graphicInfo.getX() + graphicInfo.getWidth() > maxX) { + maxX = graphicInfo.getX() + graphicInfo.getWidth(); + } + if (graphicInfo.getX() < minX) { + minX = graphicInfo.getX(); + } + // height + if (graphicInfo.getY() + graphicInfo.getHeight() > maxY) { + maxY = graphicInfo.getY() + graphicInfo.getHeight(); + } + if (graphicInfo.getY() < minY) { + minY = graphicInfo.getY(); + } + } } - } - }); - - // call activity - activityDrawInstructions.put(CallActivity.class, new ActivityDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - processDiagramCanvas.drawCollapsedCallActivity(flowNode.getName(), graphicInfo); - } - }); - - // text annotation - artifactDrawInstructions.put(TextAnnotation.class, new ArtifactDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); - TextAnnotation textAnnotation = (TextAnnotation) artifact; - processDiagramCanvas.drawTextAnnotation(textAnnotation.getText(), graphicInfo); - } - }); - - // association - artifactDrawInstructions.put(Association.class, new ArtifactDrawInstruction() { - - public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { - Association association = (Association) artifact; - String sourceRef = association.getSourceRef(); - String targetRef = association.getTargetRef(); - - // source and target can be instance of FlowElement or Artifact - BaseElement sourceElement = bpmnModel.getFlowElement(sourceRef); - BaseElement targetElement = bpmnModel.getFlowElement(targetRef); - if (sourceElement == null) { - sourceElement = bpmnModel.getArtifact(sourceRef); + + // Special case, see https://activiti.atlassian.net/browse/ACT-1431 + if (flowNodes.isEmpty() && bpmnModel.getPools().isEmpty() && nrOfLanes == 0) { + // Nothing to show + minX = 0; + minY = 0; } - if (targetElement == null) { - targetElement = bpmnModel.getArtifact(targetRef); + + return new DefaultProcessDiagramCanvas((int)maxX + 10, (int)maxY + 10, (int)minX, (int)minY, imageType, + activityFontName, labelFontName, annotationFontName, customClassLoader); + } + + protected static List gatherAllArtifacts(BpmnModel bpmnModel) { + List artifacts = new ArrayList(); + for (Process process : bpmnModel.getProcesses()) { + artifacts.addAll(process.getArtifacts()); } - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); - graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int xPoints[]= new int[graphicInfoList.size()]; - int yPoints[]= new int[graphicInfoList.size()]; - for (int i=1; i gatherAllFlowNodes(BpmnModel bpmnModel) { + List flowNodes = new ArrayList(); + for (Process process : bpmnModel.getProcesses()) { + flowNodes.addAll(gatherAllFlowNodes(process)); + } + return flowNodes; + } + + protected static List gatherAllFlowNodes(FlowElementsContainer flowElementsContainer) { + List flowNodes = new ArrayList(); + for (FlowElement flowElement : flowElementsContainer.getFlowElements()) { + if (flowElement instanceof FlowNode) { + flowNodes.add((FlowNode)flowElement); + } + if (flowElement instanceof FlowElementsContainer) { + flowNodes.addAll(gatherAllFlowNodes((FlowElementsContainer)flowElement)); } - xPoints[i] = (int) graphicInfo.getX(); - yPoints[i] = (int) graphicInfo.getY(); } + return flowNodes; + } + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, + ClassLoader customClassLoader, double scaleFactor) { - AssociationDirection associationDirection = association.getAssociationDirection(); - processDiagramCanvas.drawAssociation(xPoints, yPoints, associationDirection, false, scaleFactor); - } - }); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { - - return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, - activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor).generateImage(imageType); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, - List highLightedCurrentActivities) { - - return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, - activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor,highLightedCurrentActivities).generateImage(imageType); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, 1.0); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, - List highLightedActivities, List highLightedFlows, double scaleFactor) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, scaleFactor); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList()); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, double scaleFactor) { - return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList(), scaleFactor); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { - return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), - activityFontName, labelFontName, annotationFontName, customClassLoader, 1.0); - } - - public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, - String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { - - return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), - activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor); - } - - public InputStream generatePngDiagram(BpmnModel bpmnModel) { - return generatePngDiagram(bpmnModel, 1.0); - } - - public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor) { - return generateDiagram(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), scaleFactor); - } - - public InputStream generateJpgDiagram(BpmnModel bpmnModel) { - return generateJpgDiagram(bpmnModel, 1.0); - } - - public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor) { - return generateDiagram(bpmnModel, "jpg", Collections.emptyList(), Collections.emptyList()); - } - - public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { - - return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, - activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor).generateBufferedImage(imageType); - } - - public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, - List highLightedActivities, List highLightedFlows, double scaleFactor) { - - return generateImage(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, scaleFactor); - } - - public BufferedImage generatePngImage(BpmnModel bpmnModel, double scaleFactor) { - return generateImage(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), scaleFactor); - } - - protected DefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, - List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { - - prepareBpmnModel(bpmnModel); - - DefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); - - // Draw pool shape, if process is participant in collaboration - for (Pool pool : bpmnModel.getPools()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); - processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo); + return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, + labelFontName, annotationFontName, customClassLoader, scaleFactor).generateImage(imageType); } - - // Draw lanes - for (Process process : bpmnModel.getProcesses()) { - for (Lane lane : process.getLanes()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(lane.getId()); - processDiagramCanvas.drawPoolOrLane(lane.getName(), graphicInfo); - } + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, + ClassLoader customClassLoader, double scaleFactor, List highLightedCurrentActivities) { + + return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, + labelFontName, annotationFontName, customClassLoader, scaleFactor, highLightedCurrentActivities) + .generateImage(imageType); } - - // Draw activities and their sequence-flows - for (Process process: bpmnModel.getProcesses()) { - for (FlowNode flowNode : process.findFlowElementsOfType(FlowNode.class)) { - drawActivity(processDiagramCanvas, bpmnModel, flowNode, highLightedActivities, highLightedFlows, scaleFactor); - } + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows) { + return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, + 1.0); } - - // Draw artifacts - for (Process process : bpmnModel.getProcesses()) { - - for (Artifact artifact : process.getArtifacts()) { - drawArtifact(processDiagramCanvas, bpmnModel, artifact); - } - - List subProcesses = process.findFlowElementsOfType(SubProcess.class, true); - if (subProcesses != null) { - for (SubProcess subProcess : subProcesses) { - for (Artifact subProcessArtifact : subProcess.getArtifacts()) { - drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact); - } - } - } + + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, double scaleFactor) { + return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, + scaleFactor); } - - return processDiagramCanvas; - } + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities) { + return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList()); + } - protected DefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, - List highLightedActivities, List highLightedFlows, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, - List highCurrentLightedActivities) { + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, + double scaleFactor) { + return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList(), + scaleFactor); + } - prepareBpmnModel(bpmnModel); + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, + String labelFontName, String annotationFontName, ClassLoader customClassLoader) { + return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), + activityFontName, labelFontName, annotationFontName, customClassLoader, 1.0); + } - DefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); + public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, + String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { - // Draw pool shape, if process is participant in collaboration - for (Pool pool : bpmnModel.getPools()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); - processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo); + return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), + activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor); } - // Draw lanes - for (Process process : bpmnModel.getProcesses()) { - for (Lane lane : process.getLanes()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(lane.getId()); - processDiagramCanvas.drawPoolOrLane(lane.getName(), graphicInfo); - } + public InputStream generatePngDiagram(BpmnModel bpmnModel) { + return generatePngDiagram(bpmnModel, 1.0); } - // Draw activities and their sequence-flows - for (Process process: bpmnModel.getProcesses()) { - for (FlowNode flowNode : process.findFlowElementsOfType(FlowNode.class)) { - drawActivity(processDiagramCanvas, bpmnModel, flowNode, highLightedActivities, highLightedFlows, scaleFactor,highCurrentLightedActivities); - } + public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor) { + return generateDiagram(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), + scaleFactor); } - // Draw artifacts - for (Process process : bpmnModel.getProcesses()) { + public InputStream generateJpgDiagram(BpmnModel bpmnModel) { + return generateJpgDiagram(bpmnModel, 1.0); + } - for (Artifact artifact : process.getArtifacts()) { - drawArtifact(processDiagramCanvas, bpmnModel, artifact); - } + public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor) { + return generateDiagram(bpmnModel, "jpg", Collections.emptyList(), Collections.emptyList()); + } - List subProcesses = process.findFlowElementsOfType(SubProcess.class, true); - if (subProcesses != null) { - for (SubProcess subProcess : subProcesses) { - for (Artifact subProcessArtifact : subProcess.getArtifacts()) { - drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact); - } - } - } + public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, + ClassLoader customClassLoader, double scaleFactor) { + + return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, + labelFontName, annotationFontName, customClassLoader, scaleFactor).generateBufferedImage(imageType); } - return processDiagramCanvas; - } - - protected void prepareBpmnModel(BpmnModel bpmnModel) { - - // Need to make sure all elements have positive x and y. - // Check all graphicInfo and update the elements accordingly - - List allGraphicInfos = new ArrayList(); - if (bpmnModel.getLocationMap() != null) { - allGraphicInfos.addAll(bpmnModel.getLocationMap().values()); - } - if (bpmnModel.getLabelLocationMap() != null) { - allGraphicInfos.addAll(bpmnModel.getLabelLocationMap().values()); - } - if (bpmnModel.getFlowLocationMap() != null) { - for (List flowGraphicInfos : bpmnModel.getFlowLocationMap().values()) { - allGraphicInfos.addAll(flowGraphicInfos); - } - } - - if (allGraphicInfos.size() > 0) { - - boolean needsTranslationX = false; - boolean needsTranslationY = false; - - double lowestX = 0.0; - double lowestY = 0.0; - - // Collect lowest x and y - for (GraphicInfo graphicInfo : allGraphicInfos) { - - double x = graphicInfo.getX(); - double y = graphicInfo.getY(); - - if (x < lowestX) { - needsTranslationX = true; - lowestX = x; - } - if (y < lowestY) { - needsTranslationY = true; - lowestY = y; - } - - } - - // Update all graphicInfo objects - if (needsTranslationX || needsTranslationY) { - - double translationX = Math.abs(lowestX); - double translationY = Math.abs(lowestY); - - for (GraphicInfo graphicInfo : allGraphicInfos) { - if (needsTranslationX) { - graphicInfo.setX(graphicInfo.getX() + translationX); - } - if(needsTranslationY) { - graphicInfo.setY(graphicInfo.getY() + translationY); - } - } - } - - } - - } - - protected void drawActivity(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, - FlowNode flowNode, List highLightedActivities, List highLightedFlows, double scaleFactor) { - - ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); - if (drawInstruction != null) { - - drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); - - // Gather info on the multi instance marker - boolean multiInstanceSequential = false, multiInstanceParallel = false, collapsed = false; - if (flowNode instanceof Activity) { - Activity activity = (Activity) flowNode; - MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); - if (multiInstanceLoopCharacteristics != null) { - multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); - multiInstanceParallel = !multiInstanceSequential; - } - } - - // Gather info on the collapsed marker - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (flowNode instanceof SubProcess) { - collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); - } else if (flowNode instanceof CallActivity) { - collapsed = true; - } - - if (scaleFactor == 1.0) { - // Actually draw the markers - processDiagramCanvas.drawActivityMarkers((int) graphicInfo.getX(), (int) graphicInfo.getY(),(int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(), - multiInstanceSequential, multiInstanceParallel, collapsed); - } - - // Draw highlighted activities - if (highLightedActivities.contains(flowNode.getId())) { - drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); - } + public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, List highLightedActivities, + List highLightedFlows, double scaleFactor) { + return generateImage(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, + scaleFactor); } - // Outgoing transitions of activity - for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { - boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); - String defaultFlow = null; - if (flowNode instanceof Activity) { - defaultFlow = ((Activity) flowNode).getDefaultFlow(); - } else if (flowNode instanceof Gateway) { - defaultFlow = ((Gateway) flowNode).getDefaultFlow(); - } - - boolean isDefault = false; - if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { - isDefault = true; - } - boolean drawConditionalIndicator = sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway); - - String sourceRef = sequenceFlow.getSourceRef(); - String targetRef = sequenceFlow.getTargetRef(); - FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); - FlowElement targetElement = bpmnModel.getFlowElement(targetRef); - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); - if (graphicInfoList != null && graphicInfoList.size() > 0) { - graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int xPoints[]= new int[graphicInfoList.size()]; - int yPoints[]= new int[graphicInfoList.size()]; - - for (int i=1; iemptyList(), Collections.emptyList(), + scaleFactor); + } + + protected DefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, + List highLightedActivities, List highLightedFlows, String activityFontName, + String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { + + prepareBpmnModel(bpmnModel); + DefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, + activityFontName, labelFontName, annotationFontName, customClassLoader); + + // Draw pool shape, if process is participant in collaboration + for (Pool pool : bpmnModel.getPools()) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); + processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo); } - processDiagramCanvas.drawSequenceflow(xPoints, yPoints, drawConditionalIndicator, isDefault, highLighted, scaleFactor); + // Draw lanes + for (Process process : bpmnModel.getProcesses()) { + for (Lane lane : process.getLanes()) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(lane.getId()); + processDiagramCanvas.drawPoolOrLane(lane.getName(), graphicInfo); + } + } - // Draw sequenceflow label - GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId()); - if (labelGraphicInfo != null) { - processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false); - }else - { - GraphicInfo lineCenter = getLineCenter(graphicInfoList); - processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); + // Draw activities and their sequence-flows + for (Process process : bpmnModel.getProcesses()) { + for (FlowNode flowNode : process.findFlowElementsOfType(FlowNode.class)) { + drawActivity(processDiagramCanvas, bpmnModel, flowNode, highLightedActivities, highLightedFlows, + scaleFactor); + } } - } - } - // Nested elements - if (flowNode instanceof FlowElementsContainer) { - for (FlowElement nestedFlowElement : ((FlowElementsContainer) flowNode).getFlowElements()) { - if (nestedFlowElement instanceof FlowNode) { - drawActivity(processDiagramCanvas, bpmnModel, (FlowNode) nestedFlowElement, - highLightedActivities, highLightedFlows, scaleFactor); + // Draw artifacts + for (Process process : bpmnModel.getProcesses()) { + + for (Artifact artifact : process.getArtifacts()) { + drawArtifact(processDiagramCanvas, bpmnModel, artifact); + } + + List subProcesses = process.findFlowElementsOfType(SubProcess.class, true); + if (subProcesses != null) { + for (SubProcess subProcess : subProcesses) { + for (Artifact subProcessArtifact : subProcess.getArtifacts()) { + drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact); + } + } + } } - } + + return processDiagramCanvas; } - } - - - protected void drawActivity(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, - FlowNode flowNode, List highLightedActivities, List highLightedFlows, double scaleFactor, List highLightedExecutedActivities) { - - ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); - if (drawInstruction != null) { - - drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); - - // Gather info on the multi instance marker - boolean multiInstanceSequential = false, multiInstanceParallel = false, collapsed = false; - if (flowNode instanceof Activity) { - Activity activity = (Activity) flowNode; - MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); - if (multiInstanceLoopCharacteristics != null) { - multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); - multiInstanceParallel = !multiInstanceSequential; + + protected DefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, + List highLightedActivities, List highLightedFlows, String activityFontName, + String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, + List highCurrentLightedActivities) { + + prepareBpmnModel(bpmnModel); + + DefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, + activityFontName, labelFontName, annotationFontName, customClassLoader); + + // Draw pool shape, if process is participant in collaboration + for (Pool pool : bpmnModel.getPools()) { + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); + processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo); } - } - - // Gather info on the collapsed marker - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - if (flowNode instanceof SubProcess) { - collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); - } else if (flowNode instanceof CallActivity) { - collapsed = true; - } - - if (scaleFactor == 1.0) { - // Actually draw the markers - processDiagramCanvas.drawActivityMarkers((int) graphicInfo.getX(), (int) graphicInfo.getY(),(int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(), - multiInstanceSequential, multiInstanceParallel, collapsed); - } - - // Draw highlighted activities - if (highLightedActivities.contains(flowNode.getId())) { - drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); - } - - if (highLightedExecutedActivities.contains(flowNode.getId())) { - processDiagramCanvas.HIGHLIGHT_COLOR = Color.RED; - drawColorHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId()),Color.RED); - processDiagramCanvas.HIGHLIGHT_COLOR = Color.GREEN; - } - } - - // Outgoing transitions of activity - for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { - boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); - String defaultFlow = null; - if (flowNode instanceof Activity) { - defaultFlow = ((Activity) flowNode).getDefaultFlow(); - } else if (flowNode instanceof Gateway) { - defaultFlow = ((Gateway) flowNode).getDefaultFlow(); - } - - boolean isDefault = false; - if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { - isDefault = true; - } - boolean drawConditionalIndicator = sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway); - - String sourceRef = sequenceFlow.getSourceRef(); - String targetRef = sequenceFlow.getTargetRef(); - FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); - FlowElement targetElement = bpmnModel.getFlowElement(targetRef); - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); - if (graphicInfoList != null && graphicInfoList.size() > 0) { - graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int xPoints[]= new int[graphicInfoList.size()]; - int yPoints[]= new int[graphicInfoList.size()]; - - for (int i=1; i subProcesses = process.findFlowElementsOfType(SubProcess.class, true); + if (subProcesses != null) { + for (SubProcess subProcess : subProcesses) { + for (Artifact subProcessArtifact : subProcess.getArtifacts()) { + drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact); + } + } + } } - } - } - } - - /** - * This method makes coordinates of connection flow better. - * @param processDiagramCanvas - * @param bpmnModel - * @param sourceElement - * @param targetElement - * @param graphicInfoList - * @return - */ - protected static List connectionPerfectionizer(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, BaseElement sourceElement, BaseElement targetElement, List graphicInfoList) { - GraphicInfo sourceGraphicInfo = bpmnModel.getGraphicInfo(sourceElement.getId()); - GraphicInfo targetGraphicInfo = bpmnModel.getGraphicInfo(targetElement.getId()); - - DefaultProcessDiagramCanvas.SHAPE_TYPE sourceShapeType = getShapeType(sourceElement); - DefaultProcessDiagramCanvas.SHAPE_TYPE targetShapeType = getShapeType(targetElement); - - return processDiagramCanvas.connectionPerfectionizer(sourceShapeType, targetShapeType, sourceGraphicInfo, targetGraphicInfo, graphicInfoList); - } - - /** - * This method returns shape type of base element.
- * Each element can be presented as rectangle, rhombus, or ellipse. - * @param baseElement - * @return DefaultProcessDiagramCanvas.SHAPE_TYPE - */ - protected static DefaultProcessDiagramCanvas.SHAPE_TYPE getShapeType(BaseElement baseElement) { - if (baseElement instanceof Task || baseElement instanceof Activity || baseElement instanceof TextAnnotation) { - return DefaultProcessDiagramCanvas.SHAPE_TYPE.Rectangle; - } else if (baseElement instanceof Gateway) { - return DefaultProcessDiagramCanvas.SHAPE_TYPE.Rhombus; - } else if (baseElement instanceof Event) { - return DefaultProcessDiagramCanvas.SHAPE_TYPE.Ellipse; - } else { - // unknown source element, just do not correct coordinates + + return processDiagramCanvas; } - return null; - } - - protected static GraphicInfo getLineCenter(List graphicInfoList) { - GraphicInfo gi = new GraphicInfo(); - - int xPoints[]= new int[graphicInfoList.size()]; - int yPoints[]= new int[graphicInfoList.size()]; - - double length = 0; - double[] lengths = new double[graphicInfoList.size()]; - lengths[0] = 0; - double m; - for (int i=1; i allGraphicInfos = new ArrayList(); + if (bpmnModel.getLocationMap() != null) { + allGraphicInfos.addAll(bpmnModel.getLocationMap().values()); } - xPoints[i] = (int) graphicInfo.getX(); - yPoints[i] = (int) graphicInfo.getY(); - - length += Math.sqrt( - Math.pow((int) graphicInfo.getX() - (int) previousGraphicInfo.getX(), 2) + - Math.pow((int) graphicInfo.getY() - (int) previousGraphicInfo.getY(), 2) - ); - lengths[i] = length; - } - m = length / 2; - int p1 = 0, p2 = 1; - for (int i = 1; i < lengths.length; i++) { - double len = lengths[i]; - p1 = i-1; - p2 = i; - if (len > m) { - break; - } - } - - GraphicInfo graphicInfo1 = graphicInfoList.get(p1); - GraphicInfo graphicInfo2 = graphicInfoList.get(p2); - - double AB = (int)graphicInfo2.getX() - (int)graphicInfo1.getX(); - double OA = (int)graphicInfo2.getY() - (int)graphicInfo1.getY(); - double OB = lengths[p2] - lengths[p1]; - double ob = m - lengths[p1]; - double ab = AB * ob / OB; - double oa = OA * ob / OB; - - double mx = graphicInfo1.getX() + ab; - double my = graphicInfo1.getY() + oa; - - gi.setX(mx); - gi.setY(my); - return gi; - } - - protected void drawArtifact(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { - ArtifactDrawInstruction drawInstruction = artifactDrawInstructions.get(artifact.getClass()); - if (drawInstruction != null) { - drawInstruction.draw(processDiagramCanvas, bpmnModel, artifact); - } - } + if (bpmnModel.getLabelLocationMap() != null) { + allGraphicInfos.addAll(bpmnModel.getLabelLocationMap().values()); + } + if (bpmnModel.getFlowLocationMap() != null) { + for (List flowGraphicInfos : bpmnModel.getFlowLocationMap().values()) { + allGraphicInfos.addAll(flowGraphicInfos); + } + } + + if (allGraphicInfos.size() > 0) { + + boolean needsTranslationX = false; + boolean needsTranslationY = false; + + double lowestX = 0.0; + double lowestY = 0.0; + + // Collect lowest x and y + for (GraphicInfo graphicInfo : allGraphicInfos) { - private static void drawHighLight(DefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { - processDiagramCanvas.drawHighLight((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); + double x = graphicInfo.getX(); + double y = graphicInfo.getY(); - } + if (x < lowestX) { + needsTranslationX = true; + lowestX = x; + } + if (y < lowestY) { + needsTranslationY = true; + lowestY = y; + } + } + + // Update all graphicInfo objects + if (needsTranslationX || needsTranslationY) { - private static void drawColorHighLight(DefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo,Color color) { - processDiagramCanvas.drawHighLight((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(),color); + double translationX = Math.abs(lowestX); + double translationY = Math.abs(lowestY); - } + for (GraphicInfo graphicInfo : allGraphicInfos) { + if (needsTranslationX) { + graphicInfo.setX(graphicInfo.getX() + translationX); + } + if (needsTranslationY) { + graphicInfo.setY(graphicInfo.getY() + translationY); + } + } + } - protected static DefaultProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType, - String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { - - // We need to calculate maximum values to know how big the image will be in its entirety - double minX = Double.MAX_VALUE; - double maxX = 0; - double minY = Double.MAX_VALUE; - double maxY = 0; + } - for (Pool pool : bpmnModel.getPools()) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); - minX = graphicInfo.getX(); - maxX = graphicInfo.getX() + graphicInfo.getWidth(); - minY = graphicInfo.getY(); - maxY = graphicInfo.getY() + graphicInfo.getHeight(); } - - List flowNodes = gatherAllFlowNodes(bpmnModel); - for (FlowNode flowNode : flowNodes) { - - GraphicInfo flowNodeGraphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); - - // width - if (flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth() > maxX) { - maxX = flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth(); - } - if (flowNodeGraphicInfo.getX() < minX) { - minX = flowNodeGraphicInfo.getX(); - } - // height - if (flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight() > maxY) { - maxY = flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight(); - } - if (flowNodeGraphicInfo.getY() < minY) { - minY = flowNodeGraphicInfo.getY(); - } - - for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); - if (graphicInfoList != null) { - for (GraphicInfo graphicInfo : graphicInfoList) { - // width - if (graphicInfo.getX() > maxX) { - maxX = graphicInfo.getX(); + + protected void drawActivity(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, + FlowNode flowNode, List highLightedActivities, List highLightedFlows, double scaleFactor) { + + ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); + if (drawInstruction != null) { + + drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); + + // Gather info on the multi instance marker + boolean multiInstanceSequential = false, multiInstanceParallel = false, collapsed = false; + if (flowNode instanceof Activity) { + Activity activity = (Activity)flowNode; + MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); + if (multiInstanceLoopCharacteristics != null) { + multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); + multiInstanceParallel = !multiInstanceSequential; + } } - if (graphicInfo.getX() < minX) { - minX = graphicInfo.getX(); + + // Gather info on the collapsed marker + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + if (flowNode instanceof SubProcess) { + collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); + } else if (flowNode instanceof CallActivity) { + collapsed = true; } - // height - if (graphicInfo.getY() > maxY) { - maxY = graphicInfo.getY(); + + if (scaleFactor == 1.0) { + // Actually draw the markers + processDiagramCanvas.drawActivityMarkers((int)graphicInfo.getX(), (int)graphicInfo.getY(), + (int)graphicInfo.getWidth(), (int)graphicInfo.getHeight(), multiInstanceSequential, + multiInstanceParallel, collapsed); } - if (graphicInfo.getY()< minY) { - minY = graphicInfo.getY(); + + // Draw highlighted activities + if (highLightedActivities.contains(flowNode.getId())) { + drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); } - } - } - } - } - - List artifacts = gatherAllArtifacts(bpmnModel); - for (Artifact artifact : artifacts) { - - GraphicInfo artifactGraphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); - - if (artifactGraphicInfo != null) { - // width - if (artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth() > maxX) { - maxX = artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth(); - } - if (artifactGraphicInfo.getX() < minX) { - minX = artifactGraphicInfo.getX(); - } - // height - if (artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight() > maxY) { - maxY = artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight(); - } - if (artifactGraphicInfo.getY() < minY) { - minY = artifactGraphicInfo.getY(); - } - } - - List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); - if (graphicInfoList != null) { - for (GraphicInfo graphicInfo : graphicInfoList) { - // width - if (graphicInfo.getX() > maxX) { - maxX = graphicInfo.getX(); - } - if (graphicInfo.getX() < minX) { - minX = graphicInfo.getX(); - } - // height - if (graphicInfo.getY() > maxY) { - maxY = graphicInfo.getY(); - } - if (graphicInfo.getY()< minY) { - minY = graphicInfo.getY(); - } - } - } - } - - int nrOfLanes = 0; - for (Process process : bpmnModel.getProcesses()) { - for (Lane l : process.getLanes()) { - - nrOfLanes++; - - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(l.getId()); - // // width - if (graphicInfo.getX() + graphicInfo.getWidth() > maxX) { - maxX = graphicInfo.getX() + graphicInfo.getWidth(); - } - if (graphicInfo.getX() < minX) { - minX = graphicInfo.getX(); + } - // height - if (graphicInfo.getY() + graphicInfo.getHeight() > maxY) { - maxY = graphicInfo.getY() + graphicInfo.getHeight(); + + // Outgoing transitions of activity + for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { + boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); + String defaultFlow = null; + if (flowNode instanceof Activity) { + defaultFlow = ((Activity)flowNode).getDefaultFlow(); + } else if (flowNode instanceof Gateway) { + defaultFlow = ((Gateway)flowNode).getDefaultFlow(); + } + + boolean isDefault = false; + if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { + isDefault = true; + } + boolean drawConditionalIndicator = + sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway); + + String sourceRef = sequenceFlow.getSourceRef(); + String targetRef = sequenceFlow.getTargetRef(); + FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); + FlowElement targetElement = bpmnModel.getFlowElement(targetRef); + List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); + if (graphicInfoList != null && graphicInfoList.size() > 0) { + graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, + targetElement, graphicInfoList); + int xPoints[] = new int[graphicInfoList.size()]; + int yPoints[] = new int[graphicInfoList.size()]; + + for (int i = 1; i < graphicInfoList.size(); i++) { + GraphicInfo graphicInfo = graphicInfoList.get(i); + GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); + + if (i == 1) { + xPoints[0] = (int)previousGraphicInfo.getX(); + yPoints[0] = (int)previousGraphicInfo.getY(); + } + xPoints[i] = (int)graphicInfo.getX(); + yPoints[i] = (int)graphicInfo.getY(); + + } + + processDiagramCanvas.drawSequenceflow(xPoints, yPoints, drawConditionalIndicator, isDefault, + highLighted, scaleFactor); + + // Draw sequenceflow label + GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId()); + if (labelGraphicInfo != null) { + processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false); + } else { + GraphicInfo lineCenter = getLineCenter(graphicInfoList); + processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); + } + } } - if (graphicInfo.getY() < minY) { - minY = graphicInfo.getY(); + + // Nested elements + if (flowNode instanceof FlowElementsContainer) { + for (FlowElement nestedFlowElement : ((FlowElementsContainer)flowNode).getFlowElements()) { + if (nestedFlowElement instanceof FlowNode) { + drawActivity(processDiagramCanvas, bpmnModel, (FlowNode)nestedFlowElement, highLightedActivities, + highLightedFlows, scaleFactor); + } + } } - } - } - - // Special case, see https://activiti.atlassian.net/browse/ACT-1431 - if (flowNodes.isEmpty() && bpmnModel.getPools().isEmpty() && nrOfLanes == 0) { - // Nothing to show - minX = 0; - minY = 0; } - - return new DefaultProcessDiagramCanvas((int) maxX + 10,(int) maxY + 10, (int) minX, (int) minY, - imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); - } + protected void drawActivity(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, + FlowNode flowNode, List highLightedActivities, List highLightedFlows, double scaleFactor, + List highLightedExecutedActivities) { - protected static List gatherAllArtifacts(BpmnModel bpmnModel) { - List artifacts = new ArrayList(); - for (Process process : bpmnModel.getProcesses()) { - artifacts.addAll(process.getArtifacts()); - } - return artifacts; - } - - protected static List gatherAllFlowNodes(BpmnModel bpmnModel) { - List flowNodes = new ArrayList(); - for (Process process : bpmnModel.getProcesses()) { - flowNodes.addAll(gatherAllFlowNodes(process)); - } - return flowNodes; - } - - protected static List gatherAllFlowNodes(FlowElementsContainer flowElementsContainer) { - List flowNodes = new ArrayList(); - for (FlowElement flowElement : flowElementsContainer.getFlowElements()) { - if (flowElement instanceof FlowNode) { - flowNodes.add((FlowNode) flowElement); - } - if (flowElement instanceof FlowElementsContainer) { - flowNodes.addAll(gatherAllFlowNodes((FlowElementsContainer) flowElement)); - } + ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); + if (drawInstruction != null) { + + drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); + + // Gather info on the multi instance marker + boolean multiInstanceSequential = false, multiInstanceParallel = false, collapsed = false; + if (flowNode instanceof Activity) { + Activity activity = (Activity)flowNode; + MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); + if (multiInstanceLoopCharacteristics != null) { + multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); + multiInstanceParallel = !multiInstanceSequential; + } + } + + // Gather info on the collapsed marker + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + if (flowNode instanceof SubProcess) { + collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); + } else if (flowNode instanceof CallActivity) { + collapsed = true; + } + + if (scaleFactor == 1.0) { + // Actually draw the markers + processDiagramCanvas.drawActivityMarkers((int)graphicInfo.getX(), (int)graphicInfo.getY(), + (int)graphicInfo.getWidth(), (int)graphicInfo.getHeight(), multiInstanceSequential, + multiInstanceParallel, collapsed); + } + + // Draw highlighted activities + if (highLightedActivities.contains(flowNode.getId())) { + drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); + } + + if (highLightedExecutedActivities.contains(flowNode.getId())) { + processDiagramCanvas.HIGHLIGHT_COLOR = Color.RED; + drawColorHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId()), Color.RED); + processDiagramCanvas.HIGHLIGHT_COLOR = Color.GREEN; + } + + } + + // Outgoing transitions of activity + for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { + boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); + String defaultFlow = null; + if (flowNode instanceof Activity) { + defaultFlow = ((Activity)flowNode).getDefaultFlow(); + } else if (flowNode instanceof Gateway) { + defaultFlow = ((Gateway)flowNode).getDefaultFlow(); + } + + boolean isDefault = false; + if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { + isDefault = true; + } + boolean drawConditionalIndicator = + sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway); + + String sourceRef = sequenceFlow.getSourceRef(); + String targetRef = sequenceFlow.getTargetRef(); + FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); + FlowElement targetElement = bpmnModel.getFlowElement(targetRef); + List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); + if (graphicInfoList != null && graphicInfoList.size() > 0) { + graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, + targetElement, graphicInfoList); + int xPoints[] = new int[graphicInfoList.size()]; + int yPoints[] = new int[graphicInfoList.size()]; + + for (int i = 1; i < graphicInfoList.size(); i++) { + GraphicInfo graphicInfo = graphicInfoList.get(i); + GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); + + if (i == 1) { + xPoints[0] = (int)previousGraphicInfo.getX(); + yPoints[0] = (int)previousGraphicInfo.getY(); + } + xPoints[i] = (int)graphicInfo.getX(); + yPoints[i] = (int)graphicInfo.getY(); + + } + + processDiagramCanvas.drawSequenceflow(xPoints, yPoints, drawConditionalIndicator, isDefault, + highLighted, scaleFactor); + + // Draw sequenceflow label + GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId()); + if (labelGraphicInfo != null) { + processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false); + } else { + GraphicInfo lineCenter = getLineCenter(graphicInfoList); + processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); + } + } + } + + // Nested elements + if (flowNode instanceof FlowElementsContainer) { + for (FlowElement nestedFlowElement : ((FlowElementsContainer)flowNode).getFlowElements()) { + if (nestedFlowElement instanceof FlowNode) { + drawActivity(processDiagramCanvas, bpmnModel, (FlowNode)nestedFlowElement, highLightedActivities, + highLightedFlows, scaleFactor, highLightedExecutedActivities); + } + } + } } - return flowNodes; - } - - public Map, ActivityDrawInstruction> getActivityDrawInstructions() { - return activityDrawInstructions; - } - public void setActivityDrawInstructions( - Map, ActivityDrawInstruction> activityDrawInstructions) { - this.activityDrawInstructions = activityDrawInstructions; - } + protected void drawArtifact(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, + Artifact artifact) { + ArtifactDrawInstruction drawInstruction = artifactDrawInstructions.get(artifact.getClass()); + if (drawInstruction != null) { + drawInstruction.draw(processDiagramCanvas, bpmnModel, artifact); + } + } - public Map, ArtifactDrawInstruction> getArtifactDrawInstructions() { - return artifactDrawInstructions; - } + public Map, ActivityDrawInstruction> getActivityDrawInstructions() { + return activityDrawInstructions; + } - public void setArtifactDrawInstructions( - Map, ArtifactDrawInstruction> artifactDrawInstructions) { - this.artifactDrawInstructions = artifactDrawInstructions; - } + public void setActivityDrawInstructions( + Map, ActivityDrawInstruction> activityDrawInstructions) { + this.activityDrawInstructions = activityDrawInstructions; + } + public Map, ArtifactDrawInstruction> getArtifactDrawInstructions() { + return artifactDrawInstructions; + } + public void setArtifactDrawInstructions( + Map, ArtifactDrawInstruction> artifactDrawInstructions) { + this.artifactDrawInstructions = artifactDrawInstructions; + } - protected interface ActivityDrawInstruction { - void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode); - } + protected interface ActivityDrawInstruction { + void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode); + } - protected interface ArtifactDrawInstruction { - void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact); - } + protected interface ArtifactDrawInstruction { + void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact); + } } diff --git a/len-activiti/src/main/java/org/activiti/rest/ActivitiService.java b/len-activiti/src/main/java/org/activiti/rest/ActivitiService.java index 2c9cab0..0afa0a5 100644 --- a/len-activiti/src/main/java/org/activiti/rest/ActivitiService.java +++ b/len-activiti/src/main/java/org/activiti/rest/ActivitiService.java @@ -1,5 +1,12 @@ package org.activiti.rest; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + import org.activiti.bpmn.model.BpmnModel; import org.activiti.engine.*; import org.activiti.engine.history.HistoricActivityInstance; @@ -21,13 +28,6 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.io.InputStream; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - /** * @author zhuxiaomeng * @date 2019-03-10. @@ -36,29 +36,22 @@ import java.util.stream.Collectors; @Service public class ActivitiService { + static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-hh mm:ss"); @Autowired RuntimeService runtimeService; - @Autowired TaskService taskService; - @Autowired IdentityService identityService; - @Autowired RepositoryService repositoryService; - @Autowired ProcessEngineFactoryBean processEngine; - @Autowired ProcessEngineConfiguration processEngineConfiguration; - @Autowired HistoryService historyService; - static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-hh mm:ss"); - /** * 获取需要高亮的线 * @@ -66,44 +59,36 @@ public class ActivitiService { * @param historicActivityInstances * @return */ - private List getHighLightedFlows( - ProcessDefinitionEntity processDefinitionEntity, - List historicActivityInstances) { + private List getHighLightedFlows(ProcessDefinitionEntity processDefinitionEntity, + List historicActivityInstances) { List highFlows = new ArrayList(); for (int i = 0; i < historicActivityInstances.size() - 1; i++) { - ActivityImpl activityImpl = processDefinitionEntity - .findActivity(historicActivityInstances.get(i) - .getActivityId()); + ActivityImpl activityImpl = + processDefinitionEntity.findActivity(historicActivityInstances.get(i).getActivityId()); List sameStartTimeNodes = new ArrayList(); - ActivityImpl sameActivityImpl1 = processDefinitionEntity - .findActivity(historicActivityInstances.get(i + 1) - .getActivityId()); + ActivityImpl sameActivityImpl1 = + processDefinitionEntity.findActivity(historicActivityInstances.get(i + 1).getActivityId()); sameStartTimeNodes.add(sameActivityImpl1); for (int j = i + 1; j < historicActivityInstances.size() - 1; j++) { - HistoricActivityInstance activityImpl1 = historicActivityInstances - .get(j); - HistoricActivityInstance activityImpl2 = historicActivityInstances - .get(j + 1); + HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j); + HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1); - if (activityImpl1.getStartTime().equals( - activityImpl2.getStartTime())) { + if (activityImpl1.getStartTime().equals(activityImpl2.getStartTime())) { - ActivityImpl sameActivityImpl2 = processDefinitionEntity - .findActivity(activityImpl2.getActivityId()); + ActivityImpl sameActivityImpl2 = + processDefinitionEntity.findActivity(activityImpl2.getActivityId()); sameStartTimeNodes.add(sameActivityImpl2); } else { break; } } - List pvmTransitions = activityImpl - .getOutgoingTransitions(); + List pvmTransitions = activityImpl.getOutgoingTransitions(); for (PvmTransition pvmTransition : pvmTransitions) { - ActivityImpl pvmActivityImpl = (ActivityImpl) pvmTransition - .getDestination(); + ActivityImpl pvmActivityImpl = (ActivityImpl)pvmTransition.getDestination(); if (sameStartTimeNodes.contains(pvmActivityImpl)) { Map properties = pvmActivityImpl.getProperties(); System.out.println(properties); @@ -115,18 +100,19 @@ public class ActivitiService { } public List getTaskSqu(String processInstanceId) { - List list = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId) - .list(); + List list = + historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).list(); List activitiProcesses = new ArrayList<>(); list.forEach(s -> { String assignee = s.getAssignee(); ActivitiProcess activitiProcess = new ActivitiProcess(); - //组 - List historicIdentityLinksForTask = historyService.getHistoricIdentityLinksForTask(s.getId()); + // 组 + List historicIdentityLinksForTask = + historyService.getHistoricIdentityLinksForTask(s.getId()); List groupName = new ArrayList<>(); historicIdentityLinksForTask.forEach(hist -> { - if(!StringUtils.isEmpty(hist.getGroupId())){ + if (!StringUtils.isEmpty(hist.getGroupId())) { List groupList = identityService.createGroupQuery().groupId(hist.getGroupId()).list(); if (groupList.size() > 0) { List groupNames = groupList.stream().map(Group::getName).collect(Collectors.toList()); @@ -138,14 +124,14 @@ public class ActivitiService { if (!StringUtils.isEmpty(assignee)) { activitiProcess.setUserId(assignee); User user = identityService.createUserQuery().userId(assignee).singleResult(); - if(user!=null){ + if (user != null) { activitiProcess.setUserName(user.getFirstName()); } activitiProcess.setSid(s.getTaskDefinitionKey()); } activitiProcess.setTaskName(s.getName()); - if(s.getEndTime()!=null){ + if (s.getEndTime() != null) { activitiProcess.setTime(simpleDateFormat.format(s.getEndTime())); } activitiProcesses.add(activitiProcess); @@ -154,9 +140,10 @@ public class ActivitiService { } public InputStream generateStream(String processInstanceId, boolean needCurrent) { - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + ProcessInstance processInstance = + runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); HistoricProcessInstance historicProcessInstance = - historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); String processDefinitionId = null; List executedActivityIdList = new ArrayList(); List currentActivityIdList = new ArrayList<>(); @@ -169,8 +156,8 @@ public class ActivitiService { } if (historicProcessInstance != null) { processDefinitionId = historicProcessInstance.getProcessDefinitionId(); - historicActivityInstanceList = - historyService.createHistoricActivityInstanceQuery().finished().processInstanceId(processInstanceId).orderByHistoricActivityInstanceId().asc().list(); + historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery().finished() + .processInstanceId(processInstanceId).orderByHistoricActivityInstanceId().asc().list(); for (HistoricActivityInstance activityInstance : historicActivityInstanceList) { executedActivityIdList.add(activityInstance.getActivityId()); } @@ -180,25 +167,22 @@ public class ActivitiService { return null; } - - //高亮线路id集合 - ProcessDefinitionEntity definitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId); + // 高亮线路id集合 + ProcessDefinitionEntity definitionEntity = + (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinitionId); List highLightedFlows = getHighLightedFlows(definitionEntity, historicActivityInstanceList); BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); - //List activeActivityIds = runtimeService.getActiveActivityIds(processInstanceId); + // List activeActivityIds = runtimeService.getActiveActivityIds(processInstanceId); processEngineConfiguration = processEngine.getProcessEngineConfiguration(); - Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration); - HMProcessDiagramGenerator diagramGenerator = (HMProcessDiagramGenerator) processEngineConfiguration.getProcessDiagramGenerator(); - //List activeIds = this.runtimeService.getActiveActivityIds(processInstance.getId()); - - InputStream imageStream = diagramGenerator.generateDiagram( - bpmnModel, "png", - executedActivityIdList, highLightedFlows, - processEngine.getProcessEngineConfiguration().getActivityFontName(), - processEngine.getProcessEngineConfiguration().getLabelFontName(), - "宋体", - null, 1.0, currentActivityIdList); + Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl)processEngineConfiguration); + HMProcessDiagramGenerator diagramGenerator = + (HMProcessDiagramGenerator)processEngineConfiguration.getProcessDiagramGenerator(); + // List activeIds = this.runtimeService.getActiveActivityIds(processInstance.getId()); + + InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", executedActivityIdList, + highLightedFlows, processEngine.getProcessEngineConfiguration().getActivityFontName(), + processEngine.getProcessEngineConfiguration().getLabelFontName(), "宋体", null, 1.0, currentActivityIdList); return imageStream; } diff --git a/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java b/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java index 9aa28a3..41a39a2 100644 --- a/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java @@ -1,32 +1,19 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.rest.diagram.services; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.activiti.engine.ActivitiException; -import org.activiti.engine.ActivitiObjectNotFoundException; -import org.activiti.engine.HistoryService; -import org.activiti.engine.RepositoryService; -import org.activiti.engine.RuntimeService; +import java.util.*; + +import org.activiti.engine.*; import org.activiti.engine.history.HistoricActivityInstance; import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior; import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior; @@ -38,465 +25,463 @@ import org.activiti.engine.impl.persistence.entity.ExecutionEntity; import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity; import org.activiti.engine.impl.pvm.PvmTransition; import org.activiti.engine.impl.pvm.delegate.ActivityBehavior; -import org.activiti.engine.impl.pvm.process.ActivityImpl; -import org.activiti.engine.impl.pvm.process.Lane; -import org.activiti.engine.impl.pvm.process.LaneSet; -import org.activiti.engine.impl.pvm.process.ParticipantProcess; -import org.activiti.engine.impl.pvm.process.TransitionImpl; +import org.activiti.engine.impl.pvm.process.*; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.runtime.Execution; import org.activiti.engine.runtime.ProcessInstance; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + public class BaseProcessDefinitionDiagramLayoutResource { - @Autowired - private RuntimeService runtimeService; - - @Autowired - private RepositoryService repositoryService; - - @Autowired - private HistoryService historyService; - - public ObjectNode getDiagramNode(String processInstanceId, String processDefinitionId) { - - List highLightedFlows = Collections. emptyList(); - List highLightedActivities = Collections. emptyList(); - - Map subProcessInstanceMap = new HashMap(); - - ProcessInstance processInstance = null; - if (processInstanceId != null) { - processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); - if (processInstance == null) { - throw new ActivitiObjectNotFoundException("Process instance could not be found"); - } - processDefinitionId = processInstance.getProcessDefinitionId(); - - List subProcessInstances = runtimeService - .createProcessInstanceQuery() - .superProcessInstanceId(processInstanceId).list(); - - for (ProcessInstance subProcessInstance : subProcessInstances) { - String subDefId = subProcessInstance.getProcessDefinitionId(); - - String superExecutionId = ((ExecutionEntity) subProcessInstance) - .getSuperExecutionId(); - ProcessDefinitionEntity subDef = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(subDefId); - - ObjectNode processInstanceJSON = new ObjectMapper().createObjectNode(); - processInstanceJSON.put("processInstanceId", subProcessInstance.getId()); - processInstanceJSON.put("superExecutionId", superExecutionId); - processInstanceJSON.put("processDefinitionId", subDef.getId()); - processInstanceJSON.put("processDefinitionKey", subDef.getKey()); - processInstanceJSON.put("processDefinitionName", subDef.getName()); - - subProcessInstanceMap.put(superExecutionId, processInstanceJSON); - } - } + @Autowired + private RuntimeService runtimeService; - if (processDefinitionId == null) { - throw new ActivitiObjectNotFoundException("No process definition id provided"); - } + @Autowired + private RepositoryService repositoryService; - ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId); + @Autowired + private HistoryService historyService; - if (processDefinition == null) { - throw new ActivitiException("Process definition " + processDefinitionId + " could not be found"); - } + public ObjectNode getDiagramNode(String processInstanceId, String processDefinitionId) { - ObjectNode responseJSON = new ObjectMapper().createObjectNode(); + List highLightedFlows = Collections.emptyList(); + List highLightedActivities = Collections.emptyList(); - // Process definition - JsonNode pdrJSON = getProcessDefinitionResponse(processDefinition); + Map subProcessInstanceMap = new HashMap(); - if (pdrJSON != null) { - responseJSON.set("processDefinition", pdrJSON); - } + ProcessInstance processInstance = null; + if (processInstanceId != null) { + processInstance = + runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + if (processInstance == null) { + throw new ActivitiObjectNotFoundException("Process instance could not be found"); + } + processDefinitionId = processInstance.getProcessDefinitionId(); - // Highlighted activities - if (processInstance != null) { - ArrayNode activityArray = new ObjectMapper().createArrayNode(); - ArrayNode flowsArray = new ObjectMapper().createArrayNode(); + List subProcessInstances = + runtimeService.createProcessInstanceQuery().superProcessInstanceId(processInstanceId).list(); - highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); - highLightedFlows = getHighLightedFlows(processInstanceId, processDefinition); + for (ProcessInstance subProcessInstance : subProcessInstances) { + String subDefId = subProcessInstance.getProcessDefinitionId(); - for (String activityName : highLightedActivities) { - activityArray.add(activityName); - } + String superExecutionId = ((ExecutionEntity)subProcessInstance).getSuperExecutionId(); + ProcessDefinitionEntity subDef = + (ProcessDefinitionEntity)repositoryService.getProcessDefinition(subDefId); - for (String flow : highLightedFlows) - flowsArray.add(flow); + ObjectNode processInstanceJSON = new ObjectMapper().createObjectNode(); + processInstanceJSON.put("processInstanceId", subProcessInstance.getId()); + processInstanceJSON.put("superExecutionId", superExecutionId); + processInstanceJSON.put("processDefinitionId", subDef.getId()); + processInstanceJSON.put("processDefinitionKey", subDef.getKey()); + processInstanceJSON.put("processDefinitionName", subDef.getName()); - responseJSON.set("highLightedActivities", activityArray); - responseJSON.set("highLightedFlows", flowsArray); - } + subProcessInstanceMap.put(superExecutionId, processInstanceJSON); + } + } - // Pool shape, if process is participant in collaboration - if (processDefinition.getParticipantProcess() != null) { - ParticipantProcess pProc = processDefinition.getParticipantProcess(); - - ObjectNode participantProcessJSON = new ObjectMapper().createObjectNode(); - participantProcessJSON.put("id", pProc.getId()); - if (StringUtils.isNotEmpty(pProc.getName())) { - participantProcessJSON.put("name", pProc.getName()); - } else { - participantProcessJSON.put("name", ""); - } - participantProcessJSON.put("x", pProc.getX()); - participantProcessJSON.put("y", pProc.getY()); - participantProcessJSON.put("width", pProc.getWidth()); - participantProcessJSON.put("height", pProc.getHeight()); - - responseJSON.set("participantProcess", participantProcessJSON); - } + if (processDefinitionId == null) { + throw new ActivitiObjectNotFoundException("No process definition id provided"); + } - // Draw lanes - - if (processDefinition.getLaneSets() != null && !processDefinition.getLaneSets().isEmpty()) { - ArrayNode laneSetArray = new ObjectMapper().createArrayNode(); - for (LaneSet laneSet : processDefinition.getLaneSets()) { - ArrayNode laneArray = new ObjectMapper().createArrayNode(); - if (laneSet.getLanes() != null && !laneSet.getLanes().isEmpty()) { - for (Lane lane : laneSet.getLanes()) { - ObjectNode laneJSON = new ObjectMapper().createObjectNode(); - laneJSON.put("id", lane.getId()); - if (StringUtils.isNotEmpty(lane.getName())) { - laneJSON.put("name", lane.getName()); - } else { - laneJSON.put("name", ""); - } - laneJSON.put("x", lane.getX()); - laneJSON.put("y", lane.getY()); - laneJSON.put("width", lane.getWidth()); - laneJSON.put("height", lane.getHeight()); - - List flowNodeIds = lane.getFlowNodeIds(); - ArrayNode flowNodeIdsArray = new ObjectMapper().createArrayNode(); - for (String flowNodeId : flowNodeIds) { - flowNodeIdsArray.add(flowNodeId); - } - laneJSON.set("flowNodeIds", flowNodeIdsArray); + ProcessDefinitionEntity processDefinition = + (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinitionId); - laneArray.add(laneJSON); - } + if (processDefinition == null) { + throw new ActivitiException("Process definition " + processDefinitionId + " could not be found"); } - ObjectNode laneSetJSON = new ObjectMapper().createObjectNode(); - laneSetJSON.put("id", laneSet.getId()); - if (StringUtils.isNotEmpty(laneSet.getName())) { - laneSetJSON.put("name", laneSet.getName()); - } else { - laneSetJSON.put("name", ""); + + ObjectNode responseJSON = new ObjectMapper().createObjectNode(); + + // Process definition + JsonNode pdrJSON = getProcessDefinitionResponse(processDefinition); + + if (pdrJSON != null) { + responseJSON.set("processDefinition", pdrJSON); } - laneSetJSON.set("lanes", laneArray); - laneSetArray.add(laneSetJSON); - } + // Highlighted activities + if (processInstance != null) { + ArrayNode activityArray = new ObjectMapper().createArrayNode(); + ArrayNode flowsArray = new ObjectMapper().createArrayNode(); - if (laneSetArray.size() > 0) - responseJSON.set("laneSets", laneSetArray); - } + highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); + highLightedFlows = getHighLightedFlows(processInstanceId, processDefinition); - ArrayNode sequenceFlowArray = new ObjectMapper().createArrayNode(); - ArrayNode activityArray = new ObjectMapper().createArrayNode(); + for (String activityName : highLightedActivities) { + activityArray.add(activityName); + } - // Activities and their sequence-flows + for (String flow : highLightedFlows) + flowsArray.add(flow); - for (ActivityImpl activity : processDefinition.getActivities()) { - getActivity(processInstanceId, activity, activityArray, sequenceFlowArray, - processInstance, highLightedFlows, subProcessInstanceMap); - } + responseJSON.set("highLightedActivities", activityArray); + responseJSON.set("highLightedFlows", flowsArray); + } - responseJSON.set("activities", activityArray); - responseJSON.set("sequenceFlows", sequenceFlowArray); - - return responseJSON; - } - - private List getHighLightedFlows(String processInstanceId, ProcessDefinitionEntity processDefinition) { - - List highLightedFlows = new ArrayList(); - List historicActivityInstances = historyService - .createHistoricActivityInstanceQuery() - .processInstanceId(processInstanceId) - .orderByHistoricActivityInstanceStartTime().asc().list(); - - List historicActivityInstanceList = new ArrayList(); - for (HistoricActivityInstance hai : historicActivityInstances) { - historicActivityInstanceList.add(hai.getActivityId()); - } + // Pool shape, if process is participant in collaboration + if (processDefinition.getParticipantProcess() != null) { + ParticipantProcess pProc = processDefinition.getParticipantProcess(); - // add current activities to list - List highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); - historicActivityInstanceList.addAll(highLightedActivities); - - // activities and their sequence-flows - for (ActivityImpl activity : processDefinition.getActivities()) { - int index = historicActivityInstanceList.indexOf(activity.getId()); - - if (index >= 0 && index + 1 < historicActivityInstanceList.size()) { - List pvmTransitionList = activity - .getOutgoingTransitions(); - for (PvmTransition pvmTransition : pvmTransitionList) { - String destinationFlowId = pvmTransition.getDestination().getId(); - if (destinationFlowId.equals(historicActivityInstanceList.get(index + 1))) { - highLightedFlows.add(pvmTransition.getId()); - } + ObjectNode participantProcessJSON = new ObjectMapper().createObjectNode(); + participantProcessJSON.put("id", pProc.getId()); + if (StringUtils.isNotEmpty(pProc.getName())) { + participantProcessJSON.put("name", pProc.getName()); + } else { + participantProcessJSON.put("name", ""); + } + participantProcessJSON.put("x", pProc.getX()); + participantProcessJSON.put("y", pProc.getY()); + participantProcessJSON.put("width", pProc.getWidth()); + participantProcessJSON.put("height", pProc.getHeight()); + + responseJSON.set("participantProcess", participantProcessJSON); } - } - } - return highLightedFlows; - } - private void getActivity(String processInstanceId, ActivityImpl activity, ArrayNode activityArray, - ArrayNode sequenceFlowArray, ProcessInstance processInstance, List highLightedFlows, - Map subProcessInstanceMap) { + // Draw lanes + + if (processDefinition.getLaneSets() != null && !processDefinition.getLaneSets().isEmpty()) { + ArrayNode laneSetArray = new ObjectMapper().createArrayNode(); + for (LaneSet laneSet : processDefinition.getLaneSets()) { + ArrayNode laneArray = new ObjectMapper().createArrayNode(); + if (laneSet.getLanes() != null && !laneSet.getLanes().isEmpty()) { + for (Lane lane : laneSet.getLanes()) { + ObjectNode laneJSON = new ObjectMapper().createObjectNode(); + laneJSON.put("id", lane.getId()); + if (StringUtils.isNotEmpty(lane.getName())) { + laneJSON.put("name", lane.getName()); + } else { + laneJSON.put("name", ""); + } + laneJSON.put("x", lane.getX()); + laneJSON.put("y", lane.getY()); + laneJSON.put("width", lane.getWidth()); + laneJSON.put("height", lane.getHeight()); + + List flowNodeIds = lane.getFlowNodeIds(); + ArrayNode flowNodeIdsArray = new ObjectMapper().createArrayNode(); + for (String flowNodeId : flowNodeIds) { + flowNodeIdsArray.add(flowNodeId); + } + laneJSON.set("flowNodeIds", flowNodeIdsArray); + + laneArray.add(laneJSON); + } + } + ObjectNode laneSetJSON = new ObjectMapper().createObjectNode(); + laneSetJSON.put("id", laneSet.getId()); + if (StringUtils.isNotEmpty(laneSet.getName())) { + laneSetJSON.put("name", laneSet.getName()); + } else { + laneSetJSON.put("name", ""); + } + laneSetJSON.set("lanes", laneArray); + + laneSetArray.add(laneSetJSON); + } - ObjectNode activityJSON = new ObjectMapper().createObjectNode(); + if (laneSetArray.size() > 0) + responseJSON.set("laneSets", laneSetArray); + } - // Gather info on the multi instance marker - String multiInstance = (String) activity.getProperty("multiInstance"); - if (multiInstance != null) { - if (!"sequential".equals(multiInstance)) { - multiInstance = "parallel"; - } - } + ArrayNode sequenceFlowArray = new ObjectMapper().createArrayNode(); + ArrayNode activityArray = new ObjectMapper().createArrayNode(); - ActivityBehavior activityBehavior = activity.getActivityBehavior(); - // Gather info on the collapsed marker - Boolean collapsed = (activityBehavior instanceof CallActivityBehavior); - Boolean expanded = (Boolean) activity.getProperty(BpmnParse.PROPERTYNAME_ISEXPANDED); - if (expanded != null) { - collapsed = !expanded; - } + // Activities and their sequence-flows - Boolean isInterrupting = null; - if (activityBehavior instanceof BoundaryEventActivityBehavior) { - isInterrupting = ((BoundaryEventActivityBehavior) activityBehavior).isInterrupting(); - } + for (ActivityImpl activity : processDefinition.getActivities()) { + getActivity(processInstanceId, activity, activityArray, sequenceFlowArray, processInstance, + highLightedFlows, subProcessInstanceMap); + } + + responseJSON.set("activities", activityArray); + responseJSON.set("sequenceFlows", sequenceFlowArray); - // Outgoing transitions of activity - for (PvmTransition sequenceFlow : activity.getOutgoingTransitions()) { - String flowName = (String) sequenceFlow.getProperty("name"); - boolean isHighLighted = (highLightedFlows.contains(sequenceFlow.getId())); - boolean isConditional = sequenceFlow.getProperty(BpmnParse.PROPERTYNAME_CONDITION) != null && - !((String) activity.getProperty("type")).toLowerCase().contains("gateway"); - boolean isDefault = sequenceFlow.getId().equals(activity.getProperty("default")) - && ((String) activity.getProperty("type")).toLowerCase().contains("gateway"); - - List waypoints = ((TransitionImpl) sequenceFlow).getWaypoints(); - ArrayNode xPointArray = new ObjectMapper().createArrayNode(); - ArrayNode yPointArray = new ObjectMapper().createArrayNode(); - for (int i = 0; i < waypoints.size(); i += 2) { // waypoints.size() - // minimally 4: x1, y1, - // x2, y2 - xPointArray.add(waypoints.get(i)); - yPointArray.add(waypoints.get(i + 1)); - } - - ObjectNode flowJSON = new ObjectMapper().createObjectNode(); - flowJSON.put("id", sequenceFlow.getId()); - flowJSON.put("name", flowName); - flowJSON.put("flow", "(" + sequenceFlow.getSource().getId() + ")--" - + sequenceFlow.getId() + "-->(" - + sequenceFlow.getDestination().getId() + ")"); - - if (isConditional) - flowJSON.put("isConditional", isConditional); - if (isDefault) - flowJSON.put("isDefault", isDefault); - if (isHighLighted) - flowJSON.put("isHighLighted", isHighLighted); - - flowJSON.set("xPointArray", xPointArray); - flowJSON.set("yPointArray", yPointArray); - - sequenceFlowArray.add(flowJSON); + return responseJSON; } - // Nested activities (boundary events) - ArrayNode nestedActivityArray = new ObjectMapper().createArrayNode(); - for (ActivityImpl nestedActivity : activity.getActivities()) { - nestedActivityArray.add(nestedActivity.getId()); + private List getHighLightedFlows(String processInstanceId, ProcessDefinitionEntity processDefinition) { + + List highLightedFlows = new ArrayList(); + List historicActivityInstances = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list(); + + List historicActivityInstanceList = new ArrayList(); + for (HistoricActivityInstance hai : historicActivityInstances) { + historicActivityInstanceList.add(hai.getActivityId()); + } + + // add current activities to list + List highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); + historicActivityInstanceList.addAll(highLightedActivities); + + // activities and their sequence-flows + for (ActivityImpl activity : processDefinition.getActivities()) { + int index = historicActivityInstanceList.indexOf(activity.getId()); + + if (index >= 0 && index + 1 < historicActivityInstanceList.size()) { + List pvmTransitionList = activity.getOutgoingTransitions(); + for (PvmTransition pvmTransition : pvmTransitionList) { + String destinationFlowId = pvmTransition.getDestination().getId(); + if (destinationFlowId.equals(historicActivityInstanceList.get(index + 1))) { + highLightedFlows.add(pvmTransition.getId()); + } + } + } + } + return highLightedFlows; } - Map properties = activity.getProperties(); - ObjectNode propertiesJSON = new ObjectMapper().createObjectNode(); - for (String key : properties.keySet()) { - Object prop = properties.get(key); - if (prop instanceof String) - propertiesJSON.put(key, (String) properties.get(key)); - else if (prop instanceof Integer) - propertiesJSON.put(key, (Integer) properties.get(key)); - else if (prop instanceof Boolean) - propertiesJSON.put(key, (Boolean) properties.get(key)); - else if ("initial".equals(key)) { - ActivityImpl act = (ActivityImpl) properties.get(key); - propertiesJSON.put(key, act.getId()); - } else if ("timerDeclarations".equals(key)) { - ArrayList timerDeclarations = (ArrayList) properties.get(key); - ArrayNode timerDeclarationArray = new ObjectMapper().createArrayNode(); - - if (timerDeclarations != null) - for (TimerDeclarationImpl timerDeclaration : timerDeclarations) { - ObjectNode timerDeclarationJSON = new ObjectMapper().createObjectNode(); - - timerDeclarationJSON.put("isExclusive", timerDeclaration.isExclusive()); - if (timerDeclaration.getRepeat() != null) - timerDeclarationJSON.put("repeat", timerDeclaration.getRepeat()); - - timerDeclarationJSON.put("retries", String.valueOf(timerDeclaration.getRetries())); - timerDeclarationJSON.put("type", timerDeclaration.getJobHandlerType()); - timerDeclarationJSON.put("configuration", timerDeclaration.getJobHandlerConfiguration()); - //timerDeclarationJSON.put("expression", timerDeclaration.getDescription()); - - timerDeclarationArray.add(timerDeclarationJSON); - } - if (timerDeclarationArray.size() > 0) - propertiesJSON.set(key, timerDeclarationArray); - // TODO: implement getting description - } else if ("eventDefinitions".equals(key)) { - ArrayList eventDefinitions = (ArrayList) properties.get(key); - ArrayNode eventDefinitionsArray = new ObjectMapper().createArrayNode(); - - if (eventDefinitions != null) { - for (EventSubscriptionDeclaration eventDefinition : eventDefinitions) { - ObjectNode eventDefinitionJSON = new ObjectMapper().createObjectNode(); - - if (eventDefinition.getActivityId() != null) - eventDefinitionJSON.put("activityId",eventDefinition.getActivityId()); - - eventDefinitionJSON.put("eventName", eventDefinition.getEventName()); - eventDefinitionJSON.put("eventType", eventDefinition.getEventType()); - eventDefinitionJSON.put("isAsync", eventDefinition.isAsync()); - eventDefinitionJSON.put("isStartEvent", eventDefinition.isStartEvent()); - eventDefinitionsArray.add(eventDefinitionJSON); - } + private void getActivity(String processInstanceId, ActivityImpl activity, ArrayNode activityArray, + ArrayNode sequenceFlowArray, ProcessInstance processInstance, List highLightedFlows, + Map subProcessInstanceMap) { + + ObjectNode activityJSON = new ObjectMapper().createObjectNode(); + + // Gather info on the multi instance marker + String multiInstance = (String)activity.getProperty("multiInstance"); + if (multiInstance != null) { + if (!"sequential".equals(multiInstance)) { + multiInstance = "parallel"; + } } - if (eventDefinitionsArray.size() > 0) - propertiesJSON.set(key, eventDefinitionsArray); - - // TODO: implement it - } else if ("errorEventDefinitions".equals(key)) { - ArrayList errorEventDefinitions = (ArrayList) properties.get(key); - ArrayNode errorEventDefinitionsArray = new ObjectMapper().createArrayNode(); - - if (errorEventDefinitions != null) { - for (ErrorEventDefinition errorEventDefinition : errorEventDefinitions) { - ObjectNode errorEventDefinitionJSON = new ObjectMapper().createObjectNode(); - - if (errorEventDefinition.getErrorCode() != null) - errorEventDefinitionJSON.put("errorCode", errorEventDefinition.getErrorCode()); - else - errorEventDefinitionJSON.putNull("errorCode"); - - errorEventDefinitionJSON.put("handlerActivityId", - errorEventDefinition.getHandlerActivityId()); - - errorEventDefinitionsArray.add(errorEventDefinitionJSON); - } + ActivityBehavior activityBehavior = activity.getActivityBehavior(); + // Gather info on the collapsed marker + Boolean collapsed = (activityBehavior instanceof CallActivityBehavior); + Boolean expanded = (Boolean)activity.getProperty(BpmnParse.PROPERTYNAME_ISEXPANDED); + if (expanded != null) { + collapsed = !expanded; } - if (errorEventDefinitionsArray.size() > 0) - propertiesJSON.set(key, errorEventDefinitionsArray); - } + Boolean isInterrupting = null; + if (activityBehavior instanceof BoundaryEventActivityBehavior) { + isInterrupting = ((BoundaryEventActivityBehavior)activityBehavior).isInterrupting(); + } - } + // Outgoing transitions of activity + for (PvmTransition sequenceFlow : activity.getOutgoingTransitions()) { + String flowName = (String)sequenceFlow.getProperty("name"); + boolean isHighLighted = (highLightedFlows.contains(sequenceFlow.getId())); + boolean isConditional = sequenceFlow.getProperty(BpmnParse.PROPERTYNAME_CONDITION) != null + && !((String)activity.getProperty("type")).toLowerCase().contains("gateway"); + boolean isDefault = sequenceFlow.getId().equals(activity.getProperty("default")) + && ((String)activity.getProperty("type")).toLowerCase().contains("gateway"); + + List waypoints = ((TransitionImpl)sequenceFlow).getWaypoints(); + ArrayNode xPointArray = new ObjectMapper().createArrayNode(); + ArrayNode yPointArray = new ObjectMapper().createArrayNode(); + for (int i = 0; i < waypoints.size(); i += 2) { // waypoints.size() + // minimally 4: x1, y1, + // x2, y2 + xPointArray.add(waypoints.get(i)); + yPointArray.add(waypoints.get(i + 1)); + } - if ("callActivity".equals(properties.get("type"))) { - CallActivityBehavior callActivityBehavior = null; + ObjectNode flowJSON = new ObjectMapper().createObjectNode(); + flowJSON.put("id", sequenceFlow.getId()); + flowJSON.put("name", flowName); + flowJSON.put("flow", "(" + sequenceFlow.getSource().getId() + ")--" + sequenceFlow.getId() + "-->(" + + sequenceFlow.getDestination().getId() + ")"); - if (activityBehavior instanceof CallActivityBehavior) { - callActivityBehavior = (CallActivityBehavior) activityBehavior; - } + if (isConditional) + flowJSON.put("isConditional", isConditional); + if (isDefault) + flowJSON.put("isDefault", isDefault); + if (isHighLighted) + flowJSON.put("isHighLighted", isHighLighted); - if (callActivityBehavior != null) { - propertiesJSON.put("processDefinitonKey", callActivityBehavior.getProcessDefinitonKey()); + flowJSON.set("xPointArray", xPointArray); + flowJSON.set("yPointArray", yPointArray); - // get processDefinitonId from execution or get last processDefinitonId - // by key - ArrayNode processInstanceArray = new ObjectMapper().createArrayNode(); - if (processInstance != null) { - List executionList = runtimeService.createExecutionQuery() - .processInstanceId(processInstanceId) - .activityId(activity.getId()).list(); - if (!executionList.isEmpty()) { - for (Execution execution : executionList) { - ObjectNode processInstanceJSON = subProcessInstanceMap.get(execution.getId()); - processInstanceArray.add(processInstanceJSON); + sequenceFlowArray.add(flowJSON); + } + + // Nested activities (boundary events) + ArrayNode nestedActivityArray = new ObjectMapper().createArrayNode(); + for (ActivityImpl nestedActivity : activity.getActivities()) { + nestedActivityArray.add(nestedActivity.getId()); + } + + Map properties = activity.getProperties(); + ObjectNode propertiesJSON = new ObjectMapper().createObjectNode(); + for (String key : properties.keySet()) { + Object prop = properties.get(key); + if (prop instanceof String) + propertiesJSON.put(key, (String)properties.get(key)); + else if (prop instanceof Integer) + propertiesJSON.put(key, (Integer)properties.get(key)); + else if (prop instanceof Boolean) + propertiesJSON.put(key, (Boolean)properties.get(key)); + else if ("initial".equals(key)) { + ActivityImpl act = (ActivityImpl)properties.get(key); + propertiesJSON.put(key, act.getId()); + } else if ("timerDeclarations".equals(key)) { + ArrayList timerDeclarations = + (ArrayList)properties.get(key); + ArrayNode timerDeclarationArray = new ObjectMapper().createArrayNode(); + + if (timerDeclarations != null) + for (TimerDeclarationImpl timerDeclaration : timerDeclarations) { + ObjectNode timerDeclarationJSON = new ObjectMapper().createObjectNode(); + + timerDeclarationJSON.put("isExclusive", timerDeclaration.isExclusive()); + if (timerDeclaration.getRepeat() != null) + timerDeclarationJSON.put("repeat", timerDeclaration.getRepeat()); + + timerDeclarationJSON.put("retries", String.valueOf(timerDeclaration.getRetries())); + timerDeclarationJSON.put("type", timerDeclaration.getJobHandlerType()); + timerDeclarationJSON.put("configuration", timerDeclaration.getJobHandlerConfiguration()); + // timerDeclarationJSON.put("expression", timerDeclaration.getDescription()); + + timerDeclarationArray.add(timerDeclarationJSON); + } + if (timerDeclarationArray.size() > 0) + propertiesJSON.set(key, timerDeclarationArray); + // TODO: implement getting description + } else if ("eventDefinitions".equals(key)) { + ArrayList eventDefinitions = + (ArrayList)properties.get(key); + ArrayNode eventDefinitionsArray = new ObjectMapper().createArrayNode(); + + if (eventDefinitions != null) { + for (EventSubscriptionDeclaration eventDefinition : eventDefinitions) { + ObjectNode eventDefinitionJSON = new ObjectMapper().createObjectNode(); + + if (eventDefinition.getActivityId() != null) + eventDefinitionJSON.put("activityId", eventDefinition.getActivityId()); + + eventDefinitionJSON.put("eventName", eventDefinition.getEventName()); + eventDefinitionJSON.put("eventType", eventDefinition.getEventType()); + eventDefinitionJSON.put("isAsync", eventDefinition.isAsync()); + eventDefinitionJSON.put("isStartEvent", eventDefinition.isStartEvent()); + eventDefinitionsArray.add(eventDefinitionJSON); + } + } + + if (eventDefinitionsArray.size() > 0) + propertiesJSON.set(key, eventDefinitionsArray); + + // TODO: implement it + } else if ("errorEventDefinitions".equals(key)) { + ArrayList errorEventDefinitions = + (ArrayList)properties.get(key); + ArrayNode errorEventDefinitionsArray = new ObjectMapper().createArrayNode(); + + if (errorEventDefinitions != null) { + for (ErrorEventDefinition errorEventDefinition : errorEventDefinitions) { + ObjectNode errorEventDefinitionJSON = new ObjectMapper().createObjectNode(); + + if (errorEventDefinition.getErrorCode() != null) + errorEventDefinitionJSON.put("errorCode", errorEventDefinition.getErrorCode()); + else + errorEventDefinitionJSON.putNull("errorCode"); + + errorEventDefinitionJSON.put("handlerActivityId", errorEventDefinition.getHandlerActivityId()); + + errorEventDefinitionsArray.add(errorEventDefinitionJSON); + } + } + + if (errorEventDefinitionsArray.size() > 0) + propertiesJSON.set(key, errorEventDefinitionsArray); } - } + } - // If active activities nas no instance of this callActivity then add - // last definition - if (processInstanceArray.size() == 0 && StringUtils.isNotEmpty(callActivityBehavior.getProcessDefinitonKey())) { - // Get last definition by key - ProcessDefinition lastProcessDefinition = repositoryService - .createProcessDefinitionQuery() - .processDefinitionKey(callActivityBehavior.getProcessDefinitonKey()) - .latestVersion().singleResult(); - - // TODO: unuseful fields there are processDefinitionName, processDefinitionKey - if (lastProcessDefinition != null) { - ObjectNode processInstanceJSON = new ObjectMapper().createObjectNode(); - processInstanceJSON.put("processDefinitionId", lastProcessDefinition.getId()); - processInstanceJSON.put("processDefinitionKey", lastProcessDefinition.getKey()); - processInstanceJSON.put("processDefinitionName", lastProcessDefinition.getName()); - processInstanceArray.add(processInstanceJSON); - } + if ("callActivity".equals(properties.get("type"))) { + CallActivityBehavior callActivityBehavior = null; + + if (activityBehavior instanceof CallActivityBehavior) { + callActivityBehavior = (CallActivityBehavior)activityBehavior; + } + + if (callActivityBehavior != null) { + propertiesJSON.put("processDefinitonKey", callActivityBehavior.getProcessDefinitonKey()); + + // get processDefinitonId from execution or get last processDefinitonId + // by key + ArrayNode processInstanceArray = new ObjectMapper().createArrayNode(); + if (processInstance != null) { + List executionList = runtimeService.createExecutionQuery() + .processInstanceId(processInstanceId).activityId(activity.getId()).list(); + if (!executionList.isEmpty()) { + for (Execution execution : executionList) { + ObjectNode processInstanceJSON = subProcessInstanceMap.get(execution.getId()); + processInstanceArray.add(processInstanceJSON); + } + } + } + + // If active activities nas no instance of this callActivity then add + // last definition + if (processInstanceArray.size() == 0 + && StringUtils.isNotEmpty(callActivityBehavior.getProcessDefinitonKey())) { + // Get last definition by key + ProcessDefinition lastProcessDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionKey(callActivityBehavior.getProcessDefinitonKey()).latestVersion() + .singleResult(); + + // TODO: unuseful fields there are processDefinitionName, processDefinitionKey + if (lastProcessDefinition != null) { + ObjectNode processInstanceJSON = new ObjectMapper().createObjectNode(); + processInstanceJSON.put("processDefinitionId", lastProcessDefinition.getId()); + processInstanceJSON.put("processDefinitionKey", lastProcessDefinition.getKey()); + processInstanceJSON.put("processDefinitionName", lastProcessDefinition.getName()); + processInstanceArray.add(processInstanceJSON); + } + } + + if (processInstanceArray.size() > 0) { + propertiesJSON.set("processDefinitons", processInstanceArray); + } + } } - if (processInstanceArray.size() > 0) { - propertiesJSON.set("processDefinitons", processInstanceArray); + activityJSON.put("activityId", activity.getId()); + activityJSON.set("properties", propertiesJSON); + if (multiInstance != null) + activityJSON.put("multiInstance", multiInstance); + if (collapsed) + activityJSON.put("collapsed", collapsed); + if (nestedActivityArray.size() > 0) + activityJSON.set("nestedActivities", nestedActivityArray); + if (isInterrupting != null) + activityJSON.put("isInterrupting", isInterrupting); + + activityJSON.put("x", activity.getX()); + activityJSON.put("y", activity.getY()); + activityJSON.put("width", activity.getWidth()); + activityJSON.put("height", activity.getHeight()); + + activityArray.add(activityJSON); + + // Nested activities (boundary events) + for (ActivityImpl nestedActivity : activity.getActivities()) { + getActivity(processInstanceId, nestedActivity, activityArray, sequenceFlowArray, processInstance, + highLightedFlows, subProcessInstanceMap); } - } } - activityJSON.put("activityId", activity.getId()); - activityJSON.set("properties", propertiesJSON); - if (multiInstance != null) - activityJSON.put("multiInstance", multiInstance); - if (collapsed) - activityJSON.put("collapsed", collapsed); - if (nestedActivityArray.size() > 0) - activityJSON.set("nestedActivities", nestedActivityArray); - if (isInterrupting != null) - activityJSON.put("isInterrupting", isInterrupting); - - activityJSON.put("x", activity.getX()); - activityJSON.put("y", activity.getY()); - activityJSON.put("width", activity.getWidth()); - activityJSON.put("height", activity.getHeight()); - - activityArray.add(activityJSON); - - // Nested activities (boundary events) - for (ActivityImpl nestedActivity : activity.getActivities()) { - getActivity(processInstanceId, nestedActivity, activityArray, sequenceFlowArray, - processInstance, highLightedFlows, subProcessInstanceMap); + private JsonNode getProcessDefinitionResponse(ProcessDefinitionEntity processDefinition) { + ObjectMapper mapper = new ObjectMapper(); + ObjectNode pdrJSON = mapper.createObjectNode(); + pdrJSON.put("id", processDefinition.getId()); + pdrJSON.put("name", processDefinition.getName()); + pdrJSON.put("key", processDefinition.getKey()); + pdrJSON.put("version", processDefinition.getVersion()); + pdrJSON.put("deploymentId", processDefinition.getDeploymentId()); + pdrJSON.put("isGraphicNotationDefined", isGraphicNotationDefined(processDefinition)); + return pdrJSON; + } + + private boolean isGraphicNotationDefined(ProcessDefinitionEntity processDefinition) { + return ((ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinition.getId())) + .isGraphicalNotationDefined(); } - } - - private JsonNode getProcessDefinitionResponse(ProcessDefinitionEntity processDefinition) { - ObjectMapper mapper = new ObjectMapper(); - ObjectNode pdrJSON = mapper.createObjectNode(); - pdrJSON.put("id", processDefinition.getId()); - pdrJSON.put("name", processDefinition.getName()); - pdrJSON.put("key", processDefinition.getKey()); - pdrJSON.put("version", processDefinition.getVersion()); - pdrJSON.put("deploymentId", processDefinition.getDeploymentId()); - pdrJSON.put("isGraphicNotationDefined", isGraphicNotationDefined(processDefinition)); - return pdrJSON; - } - - private boolean isGraphicNotationDefined(ProcessDefinitionEntity processDefinition) { - return ((ProcessDefinitionEntity) repositoryService - .getProcessDefinition(processDefinition.getId())) - .isGraphicalNotationDefined(); - } } diff --git a/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessDefinitionDiagramLayoutResource.java b/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessDefinitionDiagramLayoutResource.java index e800b42..edb9ce9 100644 --- a/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessDefinitionDiagramLayoutResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessDefinitionDiagramLayoutResource.java @@ -1,30 +1,29 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.rest.diagram.services; -import com.fasterxml.jackson.databind.node.ObjectNode; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.databind.node.ObjectNode; + @RestController -public class ProcessDefinitionDiagramLayoutResource extends - BaseProcessDefinitionDiagramLayoutResource { +public class ProcessDefinitionDiagramLayoutResource extends BaseProcessDefinitionDiagramLayoutResource { - @RequestMapping(value="/process-definition/{processDefinitionId}/diagram-layout", method = RequestMethod.GET, produces = "application/json") - public ObjectNode getDiagram(@PathVariable String processDefinitionId) { - return getDiagramNode(null, processDefinitionId); - } + @RequestMapping(value = "/process-definition/{processDefinitionId}/diagram-layout", method = RequestMethod.GET, + produces = "application/json") + public ObjectNode getDiagram(@PathVariable String processDefinitionId) { + return getDiagramNode(null, processDefinitionId); + } } diff --git a/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceDiagramLayoutResource.java b/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceDiagramLayoutResource.java index a3a0915..55eedb7 100644 --- a/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceDiagramLayoutResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceDiagramLayoutResource.java @@ -1,29 +1,29 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.rest.diagram.services; -import com.fasterxml.jackson.databind.node.ObjectNode; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.databind.node.ObjectNode; + @RestController public class ProcessInstanceDiagramLayoutResource extends BaseProcessDefinitionDiagramLayoutResource { - @RequestMapping(value="/process-instance/{processInstanceId}/diagram-layout", method = RequestMethod.GET, produces = "application/json") - public ObjectNode getDiagram(@PathVariable String processInstanceId) { - return getDiagramNode(processInstanceId, null); - } + @RequestMapping(value = "/process-instance/{processInstanceId}/diagram-layout", method = RequestMethod.GET, + produces = "application/json") + public ObjectNode getDiagram(@PathVariable String processInstanceId) { + return getDiagramNode(processInstanceId, null); + } } diff --git a/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceHighlightsResource.java b/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceHighlightsResource.java index 387991d..2e2e1fd 100644 --- a/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceHighlightsResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/diagram/services/ProcessInstanceHighlightsResource.java @@ -1,26 +1,18 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.rest.diagram.services; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; + import org.activiti.engine.HistoryService; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; @@ -35,221 +27,230 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + @RestController public class ProcessInstanceHighlightsResource { - @Autowired - private RuntimeService runtimeService; - - @Autowired - private RepositoryService repositoryService; - - @Autowired - private HistoryService historyService; - - protected ObjectMapper objectMapper = new ObjectMapper(); - - @RequestMapping(value="/process-instance/{processInstanceId}/highlights", method = RequestMethod.GET, produces = "application/json") - public ObjectNode getHighlighted(@PathVariable String processInstanceId) { - - ObjectNode responseJSON = objectMapper.createObjectNode(); - - responseJSON.put("processInstanceId", processInstanceId); - - ArrayNode activitiesArray = objectMapper.createArrayNode(); - ArrayNode flowsArray = objectMapper.createArrayNode(); - - try { - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); - ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processInstance.getProcessDefinitionId()); - - responseJSON.put("processDefinitionId", processInstance.getProcessDefinitionId()); - - List highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); - List highLightedFlows = getHighLightedFlows(processDefinition, processInstanceId); - - for (String activityId : highLightedActivities) { - activitiesArray.add(activityId); - } - - for (String flow : highLightedFlows) { - flowsArray.add(flow); - } - - } catch (Exception e) { - e.printStackTrace(); - } - - responseJSON.set("activities", activitiesArray); - responseJSON.set("flows", flowsArray); - - return responseJSON; - } - - - /** - * getHighLightedFlows - * - * @param processDefinition - * @param processInstanceId - * @return - */ - private List getHighLightedFlows(ProcessDefinitionEntity processDefinition, String processInstanceId) { - - List highLightedFlows = new ArrayList(); - - List historicActivityInstances = historyService.createHistoricActivityInstanceQuery() - .processInstanceId(processInstanceId) - //order by startime asc is not correct. use default order is correct. - //.orderByHistoricActivityInstanceStartTime().asc()/*.orderByActivityId().asc()*/ - .list(); - - LinkedList hisActInstList = new LinkedList(); - hisActInstList.addAll(historicActivityInstances); - - getHighlightedFlows(processDefinition.getActivities(), hisActInstList, highLightedFlows); - - return highLightedFlows; - } - - /** - * getHighlightedFlows - * - * code logic: - * 1. Loop all activities by id asc order; - * 2. Check each activity's outgoing transitions and eventBoundery outgoing transitions, if outgoing transitions's destination.id is in other executed activityIds, add this transition to highLightedFlows List; - * 3. But if activity is not a parallelGateway or inclusiveGateway, only choose the earliest flow. - * - * @param activityList - * @param hisActInstList - * @param highLightedFlows - */ - private void getHighlightedFlows(List activityList, LinkedList hisActInstList, List highLightedFlows){ - - //check out startEvents in activityList - List startEventActList = new ArrayList(); - Map activityMap = new HashMap(activityList.size()); - for(ActivityImpl activity : activityList){ - - activityMap.put(activity.getId(), activity); - - String actType = (String) activity.getProperty("type"); - if (actType != null && actType.toLowerCase().indexOf("startevent") >= 0){ - startEventActList.add(activity); - } - } - - //These codes is used to avoid a bug: - //ACT-1728 If the process instance was started by a callActivity, it will be not have the startEvent activity in ACT_HI_ACTINST table - //Code logic: - //Check the first activity if it is a startEvent, if not check out the startEvent's highlight outgoing flow. - HistoricActivityInstance firstHistActInst = hisActInstList.getFirst(); - String firstActType = (String) firstHistActInst.getActivityType(); - if (firstActType != null && firstActType.toLowerCase().indexOf("startevent") < 0){ - PvmTransition startTrans = getStartTransaction(startEventActList, firstHistActInst); - if (startTrans != null){ - highLightedFlows.add(startTrans.getId()); - } - } - - while (!hisActInstList.isEmpty()) { - HistoricActivityInstance histActInst = hisActInstList.removeFirst(); - ActivityImpl activity = activityMap.get(histActInst.getActivityId()); - if (activity != null) { - boolean isParallel = false; - String type = histActInst.getActivityType(); - if ("parallelGateway".equals(type) || "inclusiveGateway".equals(type)){ - isParallel = true; - } else if ("subProcess".equals(histActInst.getActivityType())){ - getHighlightedFlows(activity.getActivities(), hisActInstList, highLightedFlows); + protected ObjectMapper objectMapper = new ObjectMapper(); + @Autowired + private RuntimeService runtimeService; + @Autowired + private RepositoryService repositoryService; + @Autowired + private HistoryService historyService; + + @RequestMapping(value = "/process-instance/{processInstanceId}/highlights", method = RequestMethod.GET, + produces = "application/json") + public ObjectNode getHighlighted(@PathVariable String processInstanceId) { + + ObjectNode responseJSON = objectMapper.createObjectNode(); + + responseJSON.put("processInstanceId", processInstanceId); + + ArrayNode activitiesArray = objectMapper.createArrayNode(); + ArrayNode flowsArray = objectMapper.createArrayNode(); + + try { + ProcessInstance processInstance = + runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity)repositoryService + .getProcessDefinition(processInstance.getProcessDefinitionId()); + + responseJSON.put("processDefinitionId", processInstance.getProcessDefinitionId()); + + List highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); + List highLightedFlows = getHighLightedFlows(processDefinition, processInstanceId); + + for (String activityId : highLightedActivities) { + activitiesArray.add(activityId); + } + + for (String flow : highLightedFlows) { + flowsArray.add(flow); + } + + } catch (Exception e) { + e.printStackTrace(); } - - List allOutgoingTrans = new ArrayList(); - allOutgoingTrans.addAll(activity.getOutgoingTransitions()); - allOutgoingTrans.addAll(getBoundaryEventOutgoingTransitions(activity)); - List activityHighLightedFlowIds = getHighlightedFlows(allOutgoingTrans, hisActInstList, isParallel); - highLightedFlows.addAll(activityHighLightedFlowIds); - } + + responseJSON.set("activities", activitiesArray); + responseJSON.set("flows", flowsArray); + + return responseJSON; } - } - - /** - * Check out the outgoing transition connected to firstActInst from startEventActList - * - * @param startEventActList - * @param firstActInst - * @return - */ - private PvmTransition getStartTransaction(List startEventActList, HistoricActivityInstance firstActInst){ - for (ActivityImpl startEventAct: startEventActList) { - for (PvmTransition trans : startEventAct.getOutgoingTransitions()) { - if (trans.getDestination().getId().equals(firstActInst.getActivityId())) { - return trans; + + /** + * getHighLightedFlows + * + * @param processDefinition + * @param processInstanceId + * @return + */ + private List getHighLightedFlows(ProcessDefinitionEntity processDefinition, String processInstanceId) { + + List highLightedFlows = new ArrayList(); + + List historicActivityInstances = + historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId) + // order by startime asc is not correct. use default order is correct. + // .orderByHistoricActivityInstanceStartTime().asc()/*.orderByActivityId().asc()*/ + .list(); + + LinkedList hisActInstList = new LinkedList(); + hisActInstList.addAll(historicActivityInstances); + + getHighlightedFlows(processDefinition.getActivities(), hisActInstList, highLightedFlows); + + return highLightedFlows; + } + + /** + * getHighlightedFlows + * + * code logic: 1. Loop all activities by id asc order; 2. Check each activity's outgoing transitions and + * eventBoundery outgoing transitions, if outgoing transitions's destination.id is in other executed activityIds, + * add this transition to highLightedFlows List; 3. But if activity is not a parallelGateway or inclusiveGateway, + * only choose the earliest flow. + * + * @param activityList + * @param hisActInstList + * @param highLightedFlows + */ + private void getHighlightedFlows(List activityList, + LinkedList hisActInstList, List highLightedFlows) { + + // check out startEvents in activityList + List startEventActList = new ArrayList(); + Map activityMap = new HashMap(activityList.size()); + for (ActivityImpl activity : activityList) { + + activityMap.put(activity.getId(), activity); + + String actType = (String)activity.getProperty("type"); + if (actType != null && actType.toLowerCase().indexOf("startevent") >= 0) { + startEventActList.add(activity); + } + } + + // These codes is used to avoid a bug: + // ACT-1728 If the process instance was started by a callActivity, it will be not have the startEvent activity + // in ACT_HI_ACTINST table + // Code logic: + // Check the first activity if it is a startEvent, if not check out the startEvent's highlight outgoing flow. + HistoricActivityInstance firstHistActInst = hisActInstList.getFirst(); + String firstActType = (String)firstHistActInst.getActivityType(); + if (firstActType != null && firstActType.toLowerCase().indexOf("startevent") < 0) { + PvmTransition startTrans = getStartTransaction(startEventActList, firstHistActInst); + if (startTrans != null) { + highLightedFlows.add(startTrans.getId()); + } + } + + while (!hisActInstList.isEmpty()) { + HistoricActivityInstance histActInst = hisActInstList.removeFirst(); + ActivityImpl activity = activityMap.get(histActInst.getActivityId()); + if (activity != null) { + boolean isParallel = false; + String type = histActInst.getActivityType(); + if ("parallelGateway".equals(type) || "inclusiveGateway".equals(type)) { + isParallel = true; + } else if ("subProcess".equals(histActInst.getActivityType())) { + getHighlightedFlows(activity.getActivities(), hisActInstList, highLightedFlows); + } + + List allOutgoingTrans = new ArrayList(); + allOutgoingTrans.addAll(activity.getOutgoingTransitions()); + allOutgoingTrans.addAll(getBoundaryEventOutgoingTransitions(activity)); + List activityHighLightedFlowIds = + getHighlightedFlows(allOutgoingTrans, hisActInstList, isParallel); + highLightedFlows.addAll(activityHighLightedFlowIds); + } } - } } - return null; - } - - /** - * getBoundaryEventOutgoingTransitions - * - * @param activity - * @return - */ - private List getBoundaryEventOutgoingTransitions(ActivityImpl activity){ - List boundaryTrans = new ArrayList(); - for(ActivityImpl subActivity : activity.getActivities()){ - String type = (String)subActivity.getProperty("type"); - if(type!=null && type.toLowerCase().indexOf("boundary")>=0){ - boundaryTrans.addAll(subActivity.getOutgoingTransitions()); - } + + /** + * Check out the outgoing transition connected to firstActInst from startEventActList + * + * @param startEventActList + * @param firstActInst + * @return + */ + private PvmTransition getStartTransaction(List startEventActList, + HistoricActivityInstance firstActInst) { + for (ActivityImpl startEventAct : startEventActList) { + for (PvmTransition trans : startEventAct.getOutgoingTransitions()) { + if (trans.getDestination().getId().equals(firstActInst.getActivityId())) { + return trans; + } + } + } + return null; } - return boundaryTrans; - } - - /** - * find out single activity's highlighted flowIds - * - * @param activity - * @param hisActInstList - * @param isExclusive if true only return one flowId(Such as exclusiveGateway, BoundaryEvent On Task) - * @return - */ - private List getHighlightedFlows(List pvmTransitionList, LinkedList hisActInstList, boolean isParallel){ - - List highLightedFlowIds = new ArrayList(); - - PvmTransition earliestTrans = null; - HistoricActivityInstance earliestHisActInst = null; - - for (PvmTransition pvmTransition : pvmTransitionList) { - - String destActId = pvmTransition.getDestination().getId(); - HistoricActivityInstance destHisActInst = findHisActInst(hisActInstList, destActId); - if (destHisActInst != null) { - if (isParallel) { - highLightedFlowIds.add(pvmTransition.getId()); - } else if (earliestHisActInst == null || (earliestHisActInst.getId().compareTo(destHisActInst.getId()) > 0)) { - earliestTrans = pvmTransition; - earliestHisActInst = destHisActInst; + + /** + * getBoundaryEventOutgoingTransitions + * + * @param activity + * @return + */ + private List getBoundaryEventOutgoingTransitions(ActivityImpl activity) { + List boundaryTrans = new ArrayList(); + for (ActivityImpl subActivity : activity.getActivities()) { + String type = (String)subActivity.getProperty("type"); + if (type != null && type.toLowerCase().indexOf("boundary") >= 0) { + boundaryTrans.addAll(subActivity.getOutgoingTransitions()); + } } - } + return boundaryTrans; } - - if ((!isParallel) && earliestTrans!=null){ - highLightedFlowIds.add(earliestTrans.getId()); + + /** + * find out single activity's highlighted flowIds + * + * @param activity + * @param hisActInstList + * @param isExclusive if true only return one flowId(Such as exclusiveGateway, BoundaryEvent On Task) + * @return + */ + private List getHighlightedFlows(List pvmTransitionList, + LinkedList hisActInstList, boolean isParallel) { + + List highLightedFlowIds = new ArrayList(); + + PvmTransition earliestTrans = null; + HistoricActivityInstance earliestHisActInst = null; + + for (PvmTransition pvmTransition : pvmTransitionList) { + + String destActId = pvmTransition.getDestination().getId(); + HistoricActivityInstance destHisActInst = findHisActInst(hisActInstList, destActId); + if (destHisActInst != null) { + if (isParallel) { + highLightedFlowIds.add(pvmTransition.getId()); + } else if (earliestHisActInst == null + || (earliestHisActInst.getId().compareTo(destHisActInst.getId()) > 0)) { + earliestTrans = pvmTransition; + earliestHisActInst = destHisActInst; + } + } + } + + if ((!isParallel) && earliestTrans != null) { + highLightedFlowIds.add(earliestTrans.getId()); + } + + return highLightedFlowIds; } - - return highLightedFlowIds; - } - - private HistoricActivityInstance findHisActInst(LinkedList hisActInstList, String actId){ - for (HistoricActivityInstance hisActInst : hisActInstList){ - if (hisActInst.getActivityId().equals(actId)){ - return hisActInst; - } + + private HistoricActivityInstance findHisActInst(LinkedList hisActInstList, String actId) { + for (HistoricActivityInstance hisActInst : hisActInstList) { + if (hisActInst.getActivityId().equals(actId)) { + return hisActInst; + } + } + return null; } - return null; - } } diff --git a/len-activiti/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java b/len-activiti/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java index 80cd9d4..bceb2f4 100644 --- a/len-activiti/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/editor/main/StencilsetRestResource.java @@ -1,18 +1,17 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.rest.editor.main; import java.io.InputStream; + import org.activiti.engine.ActivitiException; import org.apache.commons.io.IOUtils; import org.springframework.web.bind.annotation.RequestMapping; @@ -26,15 +25,15 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/service") public class StencilsetRestResource { - - @RequestMapping(value="/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8") - public @ResponseBody - String getStencilset() { - InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json"); - try { - return IOUtils.toString(stencilsetStream, "utf-8"); - } catch (Exception e) { - throw new ActivitiException("Error while loading stencil set", e); + + @RequestMapping(value = "/editor/stencilset", method = RequestMethod.GET, + produces = "application/json;charset=utf-8") + public @ResponseBody String getStencilset() { + InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json"); + try { + return IOUtils.toString(stencilsetStream, "utf-8"); + } catch (Exception e) { + throw new ActivitiException("Error while loading stencil set", e); + } } - } } diff --git a/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelEditorJsonRestResource.java b/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelEditorJsonRestResource.java index 98648b5..6a2edd3 100644 --- a/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelEditorJsonRestResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelEditorJsonRestResource.java @@ -1,33 +1,31 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.rest.editor.model; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.extern.slf4j.Slf4j; import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.engine.ActivitiException; import org.activiti.engine.RepositoryService; import org.activiti.engine.repository.Model; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import lombok.extern.slf4j.Slf4j; + /** * @author Tijs Rademakers */ @@ -35,37 +33,37 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/service") @Slf4j public class ModelEditorJsonRestResource implements ModelDataJsonConstants { - - @Autowired - private RepositoryService repositoryService; - - @Autowired - private ObjectMapper objectMapper; - - @RequestMapping(value="/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json") - public ObjectNode getEditorJson(@PathVariable String modelId) { - ObjectNode modelNode = null; - - Model model = repositoryService.getModel(modelId); - - if (model != null) { - try { - if (StringUtils.isNotEmpty(model.getMetaInfo())) { - modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo()); - } else { - modelNode = objectMapper.createObjectNode(); - modelNode.put(MODEL_NAME, model.getName()); + + @Autowired + private RepositoryService repositoryService; + + @Autowired + private ObjectMapper objectMapper; + + @RequestMapping(value = "/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json") + public ObjectNode getEditorJson(@PathVariable String modelId) { + ObjectNode modelNode = null; + + Model model = repositoryService.getModel(modelId); + + if (model != null) { + try { + if (StringUtils.isNotEmpty(model.getMetaInfo())) { + modelNode = (ObjectNode)objectMapper.readTree(model.getMetaInfo()); + } else { + modelNode = objectMapper.createObjectNode(); + modelNode.put(MODEL_NAME, model.getName()); + } + modelNode.put(MODEL_ID, model.getId()); + ObjectNode editorJsonNode = (ObjectNode)objectMapper + .readTree(new String(repositoryService.getModelEditorSource(model.getId()), "utf-8")); + modelNode.set("model", editorJsonNode); + + } catch (Exception e) { + log.error("Error creating model JSON", e); + throw new ActivitiException("Error creating model JSON", e); + } } - modelNode.put(MODEL_ID, model.getId()); - ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree( - new String(repositoryService.getModelEditorSource(model.getId()), "utf-8")); - modelNode.set("model", editorJsonNode); - - } catch (Exception e) { - log.error("Error creating model JSON", e); - throw new ActivitiException("Error creating model JSON", e); - } + return modelNode; } - return modelNode; - } } diff --git a/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelSaveRestResource.java b/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelSaveRestResource.java index 9d71be3..a016cdd 100644 --- a/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelSaveRestResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/editor/model/ModelSaveRestResource.java @@ -1,14 +1,12 @@ -/* Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/* + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. */ package org.activiti.rest.editor.model; @@ -20,7 +18,6 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.engine.ActivitiException; import org.activiti.engine.RepositoryService; @@ -28,19 +25,15 @@ import org.activiti.engine.repository.Model; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.PNGTranscoder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; + /** * @author Tijs Rademakers */ @@ -49,55 +42,53 @@ import com.alibaba.fastjson.JSONObject; @Slf4j public class ModelSaveRestResource implements ModelDataJsonConstants { - @Autowired - private RepositoryService repositoryService; + @Autowired + private RepositoryService repositoryService; + + @PostMapping(value = "/model/{modelId}/save") + @ResponseStatus(value = HttpStatus.OK) + public void saveModel(@PathVariable String modelId, String name, String description, String json_xml, + String svg_xml, HttpServletRequest request, HttpServletResponse response) { + try { + Map map = request.getParameterMap(); + JSONObject jsonObject = new JSONObject(); + // 全跑到key了,可取方案 + for (Map.Entry entry : map.entrySet()) { + String data = entry.getKey() + "=" + (entry.getValue()[0]); + jsonObject = JSON.parseObject(data); + } + name = (String)jsonObject.get("name"); + description = (String)jsonObject.get("description"); + json_xml = (String)jsonObject.get("json_xml"); + svg_xml = (String)jsonObject.get("svg_xml"); + + Model model = repositoryService.getModel(modelId); + JSONObject object = new JSONObject(); + object.put(MODEL_NAME, name); + object.put(MODEL_DESCRIPTION, description); + model.setMetaInfo(object.toString()); + model.setName(name); + repositoryService.saveModel(model); + + repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes("utf-8")); + + InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes("utf-8")); + TranscoderInput input = new TranscoderInput(svgStream); + + PNGTranscoder transcoder = new PNGTranscoder(); + // Setup output + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + TranscoderOutput output = new TranscoderOutput(outStream); + + // Do the transformation + transcoder.transcode(input, output); + final byte[] result = outStream.toByteArray(); + repositoryService.addModelEditorSourceExtra(model.getId(), result); + outStream.close(); - - @PostMapping(value="/model/{modelId}/save") - @ResponseStatus(value = HttpStatus.OK) - public void saveModel(@PathVariable String modelId - , String name, String description - , String json_xml, String svg_xml,HttpServletRequest request, HttpServletResponse response) { - try { - Map map= request.getParameterMap(); - JSONObject jsonObject=new JSONObject(); - //全跑到key了,可取方案 - for(Map.Entry entry:map.entrySet()){ - String data=entry.getKey()+"="+(entry.getValue()[0]); - jsonObject= JSON.parseObject(data); - } - name= (String) jsonObject.get("name"); - description= (String) jsonObject.get("description"); - json_xml= (String) jsonObject.get("json_xml"); - svg_xml= (String) jsonObject.get("svg_xml"); - - Model model = repositoryService.getModel(modelId); - JSONObject object=new JSONObject(); - object.put(MODEL_NAME, name); - object.put(MODEL_DESCRIPTION, description); - model.setMetaInfo(object.toString()); - model.setName(name); - repositoryService.saveModel(model); - - repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes("utf-8")); - - InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes("utf-8")); - TranscoderInput input = new TranscoderInput(svgStream); - - PNGTranscoder transcoder = new PNGTranscoder(); - // Setup output - ByteArrayOutputStream outStream = new ByteArrayOutputStream(); - TranscoderOutput output = new TranscoderOutput(outStream); - - // Do the transformation - transcoder.transcode(input, output); - final byte[] result = outStream.toByteArray(); - repositoryService.addModelEditorSourceExtra(model.getId(), result); - outStream.close(); - - } catch (Exception e) { - log.error("Error saving model", e); - throw new ActivitiException("Error saving model", e); + } catch (Exception e) { + log.error("Error saving model", e); + throw new ActivitiException("Error saving model", e); + } } - } } diff --git a/len-activiti/src/main/java/org/activiti/rest/model/ActivitiProcess.java b/len-activiti/src/main/java/org/activiti/rest/model/ActivitiProcess.java index a239d0c..56540bd 100644 --- a/len-activiti/src/main/java/org/activiti/rest/model/ActivitiProcess.java +++ b/len-activiti/src/main/java/org/activiti/rest/model/ActivitiProcess.java @@ -1,11 +1,11 @@ package org.activiti.rest.model; +import java.util.List; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.List; - /** * @author zhuxiaomeng * @date 2019-03-10. diff --git a/len-activiti/src/main/resources/bpmn/demo.xml b/len-activiti/src/main/resources/bpmn/demo.xml index 60b94f3..ea678c1 100644 --- a/len-activiti/src/main/resources/bpmn/demo.xml +++ b/len-activiti/src/main/resources/bpmn/demo.xml @@ -1,168 +1,196 @@ - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/len-activiti/src/main/resources/ftl/act/activiti/shinePics.html b/len-activiti/src/main/resources/ftl/act/activiti/shinePics.html index e198750..32f60e3 100644 --- a/len-activiti/src/main/resources/ftl/act/activiti/shinePics.html +++ b/len-activiti/src/main/resources/ftl/act/activiti/shinePics.html @@ -3,18 +3,20 @@ 流程图 - - - - - - - - + + + + + + + +
@@ -25,92 +27,92 @@
-
-
- - -
+
+
+ + +
+
-
-
+
- - + diff --git a/len-activiti/src/main/resources/ftl/act/deploy/act-node.ftl b/len-activiti/src/main/resources/ftl/act/deploy/act-node.ftl index 1290523..9ec9824 100644 --- a/len-activiti/src/main/resources/ftl/act/deploy/act-node.ftl +++ b/len-activiti/src/main/resources/ftl/act/deploy/act-node.ftl @@ -2,108 +2,112 @@ - - 流程节点分配 - - - - - + + 流程节点分配 + + + + + - - + +
-
-
-
-
    - <#list actList as act> -
  • class="layui-this">${act.name}
  • - -
-
- <#list actList as act> -
-
${act.id}
-
- 分配角色 -
-
-
- <#list act.boxJson as json> - checked> + +
+
+
    + <#list actList as act> +
  • class="layui-this">${act.name} +
  • + +
+
+ <#list actList as act> +
+
${act.id}
+
+ 分配角色 +
+
+
+ <#list act.boxJson as json> + checked> + +
+
+
+ 分配成员 +
+
+ 开发中..ing +
+
-
-
- 分配成员 -
-
- 开发中..ing -
- -
-
-
-
- - -
-
-
- +
+ + +
+
+
+
diff --git a/len-activiti/src/main/resources/ftl/act/leave/add-leave.ftl b/len-activiti/src/main/resources/ftl/act/leave/add-leave.ftl index 91c6a8f..34f5531 100644 --- a/len-activiti/src/main/resources/ftl/act/leave/add-leave.ftl +++ b/len-activiti/src/main/resources/ftl/act/leave/add-leave.ftl @@ -1,4 +1,3 @@ - @@ -81,7 +80,7 @@ layui.use(['form', 'layer'], function () { $ = layui.jquery; var form = layui.form - , laydate = layui.laydate; + , laydate = layui.laydate; var d = new Date(); var day = d.getFullYear() + "-" + (parseInt(d.getMonth()) + 1) + '-' + d.getDate(); console.log(day); diff --git a/len-activiti/src/main/resources/ftl/act/leave/leaveDetail.ftl b/len-activiti/src/main/resources/ftl/act/leave/leaveDetail.ftl index 7cf8523..129991d 100644 --- a/len-activiti/src/main/resources/ftl/act/leave/leaveDetail.ftl +++ b/len-activiti/src/main/resources/ftl/act/leave/leaveDetail.ftl @@ -1,107 +1,107 @@ - - 请假审批详情 - - - - + + 请假审批详情 + + + + - - - + .x-nav { + padding: 0 20px; + position: relative; + z-index: 99; + border-bottom: 1px solid #e5e5e5; + height: 32px; + overflow: hidden; + } +
diff --git a/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl b/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl index f0fcffe..2cda96a 100644 --- a/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl +++ b/len-activiti/src/main/resources/ftl/act/leave/leaveList.ftl @@ -28,7 +28,6 @@ - - - + + 编辑请假 + + + + + + + +
-
-
-
-
- 请假信息 -
-
-
- -
- - -
-
-
-
- -
- -
-
-
-
-
- 原因 -
-
-
-
- -
- -
-
-
-
-
+ +
+
+
+ 请假信息 +
+
+
+ +
+ + +
+
+
+
+ +
+ +
+
+
+
+
+ 原因 +
+
+
+
+ +
+ +
+
+
+
+
-
+
diff --git a/len-activiti/src/main/resources/ftl/act/leave/update-leave.ftl b/len-activiti/src/main/resources/ftl/act/leave/update-leave.ftl index 0b865a0..fb259b4 100644 --- a/len-activiti/src/main/resources/ftl/act/leave/update-leave.ftl +++ b/len-activiti/src/main/resources/ftl/act/leave/update-leave.ftl @@ -8,149 +8,154 @@ To change this template use File | Settings | File Templates.--> - - 编辑请假 - - - - - - - - + + 编辑请假 + + + + + + + +
-
-
-
-
- 请假信息 -
-
-
- -
- - -
-
-
-
- -
- -
-
-
-
-
- 原因 -
-
-
-
- -
- -
-
-
-
-
-
+
+
+
+ 请假信息 +
+
+
+ +
+ + +
+
+
+
+ +
+ +
+
+
+
+
+ 原因 +
+
+
+
+ +
+ +
+
+
+
+
+
-
+
- - - -
-
- + + + +
+
+
diff --git a/len-activiti/src/main/resources/ftl/act/task/task-agent-iframe.ftl b/len-activiti/src/main/resources/ftl/act/task/task-agent-iframe.ftl index dad93bd..848c92b 100644 --- a/len-activiti/src/main/resources/ftl/act/task/task-agent-iframe.ftl +++ b/len-activiti/src/main/resources/ftl/act/task/task-agent-iframe.ftl @@ -2,16 +2,17 @@ - - 办理任务 - - - - - + + 办理任务 + + + + + - - + + @@ -21,68 +22,70 @@
-
-
- -
- -
- -
+ +
+ +
+ +
+ +
+
-
-
-
- - - -
-
- +
+ + + + +
+
+ diff --git a/len-activiti/src/main/resources/ftl/act/task/task-agent.ftl b/len-activiti/src/main/resources/ftl/act/task/task-agent.ftl index 5c3883d..41e10c2 100644 --- a/len-activiti/src/main/resources/ftl/act/task/task-agent.ftl +++ b/len-activiti/src/main/resources/ftl/act/task/task-agent.ftl @@ -1,113 +1,116 @@ - - - 办理任务 - - - - - + + 办理任务 + + + + + - - + +
-
-
> -
-
- 请假信息 -
-
-
-
- -
- - -
-
-
- -
- -
-
-
-
- -
- -
-
-
- -
- -
+ +
> +
+
+ 请假信息 +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
-
-
-
- - - -
-
- +
+ + + + +
+
+
diff --git a/len-activiti/src/main/resources/ftl/act/task/taskList.ftl b/len-activiti/src/main/resources/ftl/act/task/taskList.ftl index 47bfb9f..01ddeb4 100644 --- a/len-activiti/src/main/resources/ftl/act/task/taskList.ftl +++ b/len-activiti/src/main/resources/ftl/act/task/taskList.ftl @@ -1,24 +1,23 @@ - - - 我的任务 -<#include "/system/base/formHead.ftl"> + + 我的任务 + <#include "/system/base/formHead.ftl"> + + it('should sanitize the html snippet by default', function() { expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). toBe('

an html\nclick here\nsnippet

'); @@ -134,41 +135,41 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize'); expect(element(by.css('#bind-default div')).getInnerHtml()).toBe( "new <b onclick=\"alert(1)\">text</b>"); }); -
- - */ -function $SanitizeProvider() { - this.$get = ['$$sanitizeUri', function($$sanitizeUri) { - return function(html) { - var buf = []; - htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) { - return !/^unsafe/.test($$sanitizeUri(uri, isImage)); - })); - return buf.join(''); - }; - }]; -} - -function sanitizeText(chars) { - var buf = []; - var writer = htmlSanitizeWriter(buf, angular.noop); - writer.chars(chars); - return buf.join(''); -} + + + */ + function $SanitizeProvider() { + this.$get = ['$$sanitizeUri', function ($$sanitizeUri) { + return function (html) { + var buf = []; + htmlParser(html, htmlSanitizeWriter(buf, function (uri, isImage) { + return !/^unsafe/.test($$sanitizeUri(uri, isImage)); + })); + return buf.join(''); + }; + }]; + } + + function sanitizeText(chars) { + var buf = []; + var writer = htmlSanitizeWriter(buf, angular.noop); + writer.chars(chars); + return buf.join(''); + } // Regular Expressions for parsing tags and attributes -var START_TAG_REGEXP = - /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/, - END_TAG_REGEXP = /^<\s*\/\s*([\w:-]+)[^>]*>/, - ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, - BEGIN_TAG_REGEXP = /^/g, - DOCTYPE_REGEXP = /]*?)>/i, - CDATA_REGEXP = //g, - // Match everything outside of normal chars and " (quote character) - NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; + var START_TAG_REGEXP = + /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/, + END_TAG_REGEXP = /^<\s*\/\s*([\w:-]+)[^>]*>/, + ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, + BEGIN_TAG_REGEXP = /^/g, + DOCTYPE_REGEXP = /]*?)>/i, + CDATA_REGEXP = //g, + // Match everything outside of normal chars and " (quote character) + NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; // Good source of info about elements and attributes @@ -177,326 +178,327 @@ var START_TAG_REGEXP = // Safe Void Elements - HTML5 // http://dev.w3.org/html5/spec/Overview.html#void-elements -var voidElements = makeMap("area,br,col,hr,img,wbr"); + var voidElements = makeMap("area,br,col,hr,img,wbr"); // Elements that you can, intentionally, leave open (and which close themselves) // http://dev.w3.org/html5/spec/Overview.html#optional-tags -var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), - optionalEndTagInlineElements = makeMap("rp,rt"), - optionalEndTagElements = angular.extend({}, - optionalEndTagInlineElements, - optionalEndTagBlockElements); + var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), + optionalEndTagInlineElements = makeMap("rp,rt"), + optionalEndTagElements = angular.extend({}, + optionalEndTagInlineElements, + optionalEndTagBlockElements); // Safe Block Elements - HTML5 -var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," + + var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," + "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," + "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")); // Inline Elements - HTML5 -var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," + + var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," + "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," + "samp,small,span,strike,strong,sub,sup,time,tt,u,var")); // Special Elements (can contain anything) -var specialElements = makeMap("script,style"); + var specialElements = makeMap("script,style"); -var validElements = angular.extend({}, - voidElements, - blockElements, - inlineElements, - optionalEndTagElements); + var validElements = angular.extend({}, + voidElements, + blockElements, + inlineElements, + optionalEndTagElements); //Attributes that have href and hence need to be sanitized -var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap"); -var validAttrs = angular.extend({}, uriAttrs, makeMap( - 'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+ - 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+ - 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+ - 'scope,scrolling,shape,size,span,start,summary,target,title,type,'+ - 'valign,value,vspace,width')); - -function makeMap(str) { - var obj = {}, items = str.split(','), i; - for (i = 0; i < items.length; i++) obj[items[i]] = true; - return obj; -} - - -/** - * @example - * htmlParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - * @param {string} html string - * @param {object} handler - */ -function htmlParser( html, handler ) { - var index, chars, match, stack = [], last = html; - stack.last = function() { return stack[ stack.length - 1 ]; }; - - while ( html ) { - chars = true; - - // Make sure we're not in a script or style element - if ( !stack.last() || !specialElements[ stack.last() ] ) { + var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap"); + var validAttrs = angular.extend({}, uriAttrs, makeMap( + 'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' + + 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' + + 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' + + 'scope,scrolling,shape,size,span,start,summary,target,title,type,' + + 'valign,value,vspace,width')); + + function makeMap(str) { + var obj = {}, items = str.split(','), i; + for (i = 0; i < items.length; i++) obj[items[i]] = true; + return obj; + } - // Comment - if ( html.indexOf("", index) === index) { - if (handler.comment) handler.comment( html.substring( 4, index ) ); - html = html.substring( index + 3 ); - chars = false; + /** + * @example + * htmlParser(htmlString, { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * }); + * + * @param {string} html string + * @param {object} handler + */ + function htmlParser(html, handler) { + var index, chars, match, stack = [], last = html; + stack.last = function () { + return stack[stack.length - 1]; + }; + + while (html) { + chars = true; + + // Make sure we're not in a script or style element + if (!stack.last() || !specialElements[stack.last()]) { + + // Comment + if (html.indexOf("", index) === index) { + if (handler.comment) handler.comment(html.substring(4, index)); + html = html.substring(index + 3); + chars = false; + } + // DOCTYPE + } else if (DOCTYPE_REGEXP.test(html)) { + match = html.match(DOCTYPE_REGEXP); + + if (match) { + html = html.replace(match[0], ''); + chars = false; + } + // end tag + } else if (BEGING_END_TAGE_REGEXP.test(html)) { + match = html.match(END_TAG_REGEXP); + + if (match) { + html = html.substring(match[0].length); + match[0].replace(END_TAG_REGEXP, parseEndTag); + chars = false; + } + + // start tag + } else if (BEGIN_TAG_REGEXP.test(html)) { + match = html.match(START_TAG_REGEXP); + + if (match) { + html = html.substring(match[0].length); + match[0].replace(START_TAG_REGEXP, parseStartTag); + chars = false; + } + } + + if (chars) { + index = html.indexOf("<"); + + var text = index < 0 ? html : html.substring(0, index); + html = index < 0 ? "" : html.substring(index); + + if (handler.chars) handler.chars(decodeEntities(text)); + } + + } else { + html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), + function (all, text) { + text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1"); + + if (handler.chars) handler.chars(decodeEntities(text)); + + return ""; + }); + + parseEndTag("", stack.last()); + } + + if (html == last) { + throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " + + "of html: {0}", html); + } + last = html; } - // DOCTYPE - } else if ( DOCTYPE_REGEXP.test(html) ) { - match = html.match( DOCTYPE_REGEXP ); - if ( match ) { - html = html.replace( match[0] , ''); - chars = false; - } - // end tag - } else if ( BEGING_END_TAGE_REGEXP.test(html) ) { - match = html.match( END_TAG_REGEXP ); - - if ( match ) { - html = html.substring( match[0].length ); - match[0].replace( END_TAG_REGEXP, parseEndTag ); - chars = false; - } + // Clean up any remaining tags + parseEndTag(); - // start tag - } else if ( BEGIN_TAG_REGEXP.test(html) ) { - match = html.match( START_TAG_REGEXP ); + function parseStartTag(tag, tagName, rest, unary) { + tagName = angular.lowercase(tagName); + if (blockElements[tagName]) { + while (stack.last() && inlineElements[stack.last()]) { + parseEndTag("", stack.last()); + } + } - if ( match ) { - html = html.substring( match[0].length ); - match[0].replace( START_TAG_REGEXP, parseStartTag ); - chars = false; - } - } - - if ( chars ) { - index = html.indexOf("<"); + if (optionalEndTagElements[tagName] && stack.last() == tagName) { + parseEndTag("", tagName); + } - var text = index < 0 ? html : html.substring( 0, index ); - html = index < 0 ? "" : html.substring( index ); + unary = voidElements[tagName] || !!unary; - if (handler.chars) handler.chars( decodeEntities(text) ); - } + if (!unary) + stack.push(tagName); - } else { - html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), - function(all, text){ - text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1"); + var attrs = {}; - if (handler.chars) handler.chars( decodeEntities(text) ); + rest.replace(ATTR_REGEXP, + function (match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) { + var value = doubleQuotedValue + || singleQuotedValue + || unquotedValue + || ''; - return ""; - }); + attrs[name] = decodeEntities(value); + }); + if (handler.start) handler.start(tagName, attrs, unary); + } - parseEndTag( "", stack.last() ); + function parseEndTag(tag, tagName) { + var pos = 0, i; + tagName = angular.lowercase(tagName); + if (tagName) + // Find the closest opened tag of the same type + for (pos = stack.length - 1; pos >= 0; pos--) + if (stack[pos] == tagName) + break; + + if (pos >= 0) { + // Close all the open elements, up the stack + for (i = stack.length - 1; i >= pos; i--) + if (handler.end) handler.end(stack[i]); + + // Remove the open elements from the stack + stack.length = pos; + } + } } - if ( html == last ) { - throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " + - "of html: {0}", html); - } - last = html; - } - - // Clean up any remaining tags - parseEndTag(); - - function parseStartTag( tag, tagName, rest, unary ) { - tagName = angular.lowercase(tagName); - if ( blockElements[ tagName ] ) { - while ( stack.last() && inlineElements[ stack.last() ] ) { - parseEndTag( "", stack.last() ); - } - } + var hiddenPre = document.createElement("pre"); + var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/; + + /** + * decodes all entities into regular string + * @param value + * @returns {string} A string with decoded entities. + */ + function decodeEntities(value) { + if (!value) { + return ''; + } - if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) { - parseEndTag( "", tagName ); + // Note: IE8 does not preserve spaces at the start/end of innerHTML + // so we must capture them and reattach them afterward + var parts = spaceRe.exec(value); + var spaceBefore = parts[1]; + var spaceAfter = parts[3]; + var content = parts[2]; + if (content) { + hiddenPre.innerHTML = content.replace(/= 0; pos-- ) - if ( stack[ pos ] == tagName ) - break; - - if ( pos >= 0 ) { - // Close all the open elements, up the stack - for ( i = stack.length - 1; i >= pos; i-- ) - if (handler.end) handler.end( stack[ i ] ); - - // Remove the open elements from the stack - stack.length = pos; + /** + * Escapes all potentially dangerous characters, so that the + * resulting string can be safely inserted into attribute or + * element text. + * @param value + * @returns escaped text + */ + function encodeEntities(value) { + return value.replace(/&/g, '&').replace(NON_ALPHANUMERIC_REGEXP, function (value) { + return '&#' + value.charCodeAt(0) + ';'; + }).replace(//g, '>'); } - } -} - -var hiddenPre=document.createElement("pre"); -var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/; -/** - * decodes all entities into regular string - * @param value - * @returns {string} A string with decoded entities. - */ -function decodeEntities(value) { - if (!value) { return ''; } - - // Note: IE8 does not preserve spaces at the start/end of innerHTML - // so we must capture them and reattach them afterward - var parts = spaceRe.exec(value); - var spaceBefore = parts[1]; - var spaceAfter = parts[3]; - var content = parts[2]; - if (content) { - hiddenPre.innerHTML=content.replace(//g, '>'); -} - -/** - * create an HTML/XML writer which writes to buffer - * @param {Array} buf use buf.jain('') to get out sanitized html string - * @returns {object} in the form of { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * } - */ -function htmlSanitizeWriter(buf, uriValidator){ - var ignore = false; - var out = angular.bind(buf, buf.push); - return { - start: function(tag, attrs, unary){ - tag = angular.lowercase(tag); - if (!ignore && specialElements[tag]) { - ignore = tag; - } - if (!ignore && validElements[tag] === true) { - out('<'); - out(tag); - angular.forEach(attrs, function(value, key){ - var lkey=angular.lowercase(key); - var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); - if (validAttrs[lkey] === true && - (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { - out(' '); - out(key); - out('="'); - out(encodeEntities(value)); - out('"'); - } - }); - out(unary ? '/>' : '>'); - } - }, - end: function(tag){ - tag = angular.lowercase(tag); - if (!ignore && validElements[tag] === true) { - out(''); - } - if (tag == ignore) { - ignore = false; - } - }, - chars: function(chars){ - if (!ignore) { - out(encodeEntities(chars)); - } - } - }; -} + /** + * create an HTML/XML writer which writes to buffer + * @param {Array} buf use buf.jain('') to get out sanitized html string + * @returns {object} in the form of { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * } + */ + function htmlSanitizeWriter(buf, uriValidator) { + var ignore = false; + var out = angular.bind(buf, buf.push); + return { + start: function (tag, attrs, unary) { + tag = angular.lowercase(tag); + if (!ignore && specialElements[tag]) { + ignore = tag; + } + if (!ignore && validElements[tag] === true) { + out('<'); + out(tag); + angular.forEach(attrs, function (value, key) { + var lkey = angular.lowercase(key); + var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); + if (validAttrs[lkey] === true && + (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { + out(' '); + out(key); + out('="'); + out(encodeEntities(value)); + out('"'); + } + }); + out(unary ? '/>' : '>'); + } + }, + end: function (tag) { + tag = angular.lowercase(tag); + if (!ignore && validElements[tag] === true) { + out(''); + } + if (tag == ignore) { + ignore = false; + } + }, + chars: function (chars) { + if (!ignore) { + out(encodeEntities(chars)); + } + } + }; + } // define ngSanitize module and register $sanitize service -angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); - -/* global sanitizeText: false */ - -/** - * @ngdoc filter - * @name ngSanitize.filter:linky - * @function - * - * @description - * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and - * plain email address links. - * - * Requires the {@link ngSanitize `ngSanitize`} module to be installed. - * - * @param {string} text Input text. - * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in. - * @returns {string} Html-linkified text. - * - * @usage - - * - * @example - + angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); + + /* global sanitizeText: false */ + + /** + * @ngdoc filter + * @name ngSanitize.filter:linky + * @function + * + * @description + * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and + * plain email address links. + * + * Requires the {@link ngSanitize `ngSanitize`} module to be installed. + * + * @param {string} text Input text. + * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in. + * @returns {string} Html-linkified text. + * + * @usage + + * + * @example + - -
- Snippet: - - - - - - - - - - - - - - - - - - - - - -
FilterSourceRendered
linky filter -
<div ng-bind-html="snippet | linky">
</div>
-
-
-
linky target -
<div ng-bind-html="snippetWithTarget | linky:'_blank'">
</div>
-
-
-
no filter
<div ng-bind="snippet">
</div>
+ +
+ Snippet: + + + + + + + + + + + + + + + + + + + + + +
FilterSourceRendered
linky filter +
<div ng-bind-html="snippet | linky">
</div>
+
+
+
linky target +
<div ng-bind-html="snippetWithTarget | linky:'_blank'">
</div>
+
+
+
no filter
<div ng-bind="snippet">
</div>
- it('should linkify the snippet with urls', function() { + it('should linkify the snippet with urls', function() { expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' + 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); expect(element.all(by.css('#linky-filter a')).count()).toEqual(4); }); - it('should not linkify snippet without the linky filter', function() { + it('should not linkify snippet without the linky filter', function() { expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()). toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' + 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); expect(element.all(by.css('#escaped-html a')).count()).toEqual(0); }); - it('should update', function() { + it('should update', function() { element(by.model('snippet')).clear(); element(by.model('snippet')).sendKeys('new http://link.'); expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). @@ -564,62 +566,62 @@ angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); .toBe('new http://link.'); }); - it('should work with the target property', function() { + it('should work with the target property', function() { expect(element(by.id('linky-target')). element(by.binding("snippetWithTarget | linky:'_blank'")).getText()). toBe('http://angularjs.org/'); expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank'); }); - - */ -angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { - var LINKY_URL_REGEXP = - /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/, - MAILTO_REGEXP = /^mailto:/; - - return function(text, target) { - if (!text) return text; - var match; - var raw = text; - var html = []; - var url; - var i; - while ((match = raw.match(LINKY_URL_REGEXP))) { - // We can not end in these as they are sometimes found at the end of the sentence - url = match[0]; - // if we did not match ftp/http/mailto then assume mailto - if (match[2] == match[3]) url = 'mailto:' + url; - i = match.index; - addText(raw.substr(0, i)); - addLink(url, match[0].replace(MAILTO_REGEXP, '')); - raw = raw.substring(i + match[0].length); - } - addText(raw); - return $sanitize(html.join('')); - - function addText(text) { - if (!text) { - return; - } - html.push(sanitizeText(text)); - } - - function addLink(url, text) { - html.push(''); - addText(text); - html.push(''); - } - }; -}]); + + */ + angular.module('ngSanitize').filter('linky', ['$sanitize', function ($sanitize) { + var LINKY_URL_REGEXP = + /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>]/, + MAILTO_REGEXP = /^mailto:/; + + return function (text, target) { + if (!text) return text; + var match; + var raw = text; + var html = []; + var url; + var i; + while ((match = raw.match(LINKY_URL_REGEXP))) { + // We can not end in these as they are sometimes found at the end of the sentence + url = match[0]; + // if we did not match ftp/http/mailto then assume mailto + if (match[2] == match[3]) url = 'mailto:' + url; + i = match.index; + addText(raw.substr(0, i)); + addLink(url, match[0].replace(MAILTO_REGEXP, '')); + raw = raw.substring(i + match[0].length); + } + addText(raw); + return $sanitize(html.join('')); + + function addText(text) { + if (!text) { + return; + } + html.push(sanitizeText(text)); + } + + function addLink(url, text) { + html.push(''); + addText(text); + html.push(''); + } + }; + }]); })(window, window.angular); diff --git a/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.js b/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.js index ee3303e..91a8088 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.js +++ b/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.js @@ -4,28 +4,28 @@ * Copyright (c) 2014 ; Licensed MIT */ angular.module('pascalprecht.translate').factory('$translateStaticFilesLoader', [ - '$q', - '$http', - function ($q, $http) { - return function (options) { - if (!options || (!angular.isString(options.prefix) || !angular.isString(options.suffix))) { - throw new Error('Couldn\'t load static files, no prefix or suffix specified!'); - } - var deferred = $q.defer(); - $http(angular.extend({ - url: [ - options.prefix, - options.key, - options.suffix - ].join(''), - method: 'GET', - params: '' - }, options.$http)).success(function (data) { - deferred.resolve(data); - }).error(function (data) { - deferred.reject(options.key); - }); - return deferred.promise; - }; - } + '$q', + '$http', + function ($q, $http) { + return function (options) { + if (!options || (!angular.isString(options.prefix) || !angular.isString(options.suffix))) { + throw new Error('Couldn\'t load static files, no prefix or suffix specified!'); + } + var deferred = $q.defer(); + $http(angular.extend({ + url: [ + options.prefix, + options.key, + options.suffix + ].join(''), + method: 'GET', + params: '' + }, options.$http)).success(function (data) { + deferred.resolve(data); + }).error(function (data) { + deferred.reject(options.key); + }); + return deferred.promise; + }; + } ]); \ No newline at end of file diff --git a/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js b/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js index 34f180b..414db69 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js +++ b/len-activiti/src/main/resources/static/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js @@ -4,16 +4,16 @@ * Copyright (c) 2014 ; Licensed MIT */ angular.module('pascalprecht.translate').factory('$translateCookieStorage', [ - '$cookieStore', - function ($cookieStore) { - var $translateCookieStorage = { - get: function (name) { - return $cookieStore.get(name); - }, - set: function (name, value) { - $cookieStore.put(name, value); - } - }; - return $translateCookieStorage; - } + '$cookieStore', + function ($cookieStore) { + var $translateCookieStorage = { + get: function (name) { + return $cookieStore.get(name); + }, + set: function (name, value) { + $cookieStore.put(name, value); + } + }; + return $translateCookieStorage; + } ]); \ No newline at end of file diff --git a/len-activiti/src/main/resources/static/editor-app/libs/angular-translate_2.4.2/angular-translate.js b/len-activiti/src/main/resources/static/editor-app/libs/angular-translate_2.4.2/angular-translate.js index 46bcb55..e1c5df9 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/angular-translate_2.4.2/angular-translate.js +++ b/len-activiti/src/main/resources/static/editor-app/libs/angular-translate_2.4.2/angular-translate.js @@ -4,957 +4,971 @@ * Copyright (c) 2014 ; Licensed MIT */ angular.module('pascalprecht.translate', ['ng']).run([ - '$translate', - function ($translate) { - var key = $translate.storageKey(), storage = $translate.storage(); - if (storage) { - if (!storage.get(key)) { - if (angular.isString($translate.preferredLanguage())) { - $translate.use($translate.preferredLanguage()); - } else { - storage.set(key, $translate.use()); + '$translate', + function ($translate) { + var key = $translate.storageKey(), storage = $translate.storage(); + if (storage) { + if (!storage.get(key)) { + if (angular.isString($translate.preferredLanguage())) { + $translate.use($translate.preferredLanguage()); + } else { + storage.set(key, $translate.use()); + } + } else { + $translate.use(storage.get(key)); + } + } else if (angular.isString($translate.preferredLanguage())) { + $translate.use($translate.preferredLanguage()); } - } else { - $translate.use(storage.get(key)); - } - } else if (angular.isString($translate.preferredLanguage())) { - $translate.use($translate.preferredLanguage()); } - } ]); angular.module('pascalprecht.translate').provider('$translate', [ - '$STORAGE_KEY', - function ($STORAGE_KEY) { - var $translationTable = {}, $preferredLanguage, $availableLanguageKeys = [], $languageKeyAliases, $fallbackLanguage, $fallbackWasString, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], $interpolationSanitizationStrategy = false, $loaderFactory, $cloakClassName = 'translate-cloak', $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, $postCompilingEnabled = false, NESTED_OBJECT_DELIMITER = '.', loaderCache; - var version = '2.4.2'; - var getLocale = function () { - var nav = window.navigator; - return ((angular.isArray(nav.languages) ? nav.languages[0] : nav.language || nav.browserLanguage || nav.systemLanguage || nav.userLanguage) || '').split('-').join('_'); - }; - var indexOf = function (array, searchElement) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === searchElement) { - return i; - } - } - return -1; - }; - var trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; - var negotiateLocale = function (preferred) { - var avail = [], locale = angular.lowercase(preferred), i = 0, n = $availableLanguageKeys.length; - for (; i < n; i++) { - avail.push(angular.lowercase($availableLanguageKeys[i])); - } - if (indexOf(avail, locale) > -1) { - return preferred; - } - if ($languageKeyAliases) { - var alias; - for (var langKeyAlias in $languageKeyAliases) { - var hasWildcardKey = false; - var hasExactKey = Object.prototype.hasOwnProperty.call($languageKeyAliases, langKeyAlias) && angular.lowercase(langKeyAlias) === angular.lowercase(preferred); - if (langKeyAlias.slice(-1) === '*') { - hasWildcardKey = langKeyAlias.slice(0, -1) === preferred.slice(0, langKeyAlias.length - 1); - } - if (hasExactKey || hasWildcardKey) { - alias = $languageKeyAliases[langKeyAlias]; - if (indexOf(avail, angular.lowercase(alias)) > -1) { - return alias; - } - } - } - } - var parts = preferred.split('_'); - if (parts.length > 1 && indexOf(avail, angular.lowercase(parts[0])) > -1) { - return parts[0]; - } - return preferred; - }; - var translations = function (langKey, translationTable) { - if (!langKey && !translationTable) { - return $translationTable; - } - if (langKey && !translationTable) { - if (angular.isString(langKey)) { - return $translationTable[langKey]; - } - } else { - if (!angular.isObject($translationTable[langKey])) { - $translationTable[langKey] = {}; - } - angular.extend($translationTable[langKey], flatObject(translationTable)); - } - return this; - }; - this.translations = translations; - this.cloakClassName = function (name) { - if (!name) { - return $cloakClassName; - } - $cloakClassName = name; - return this; - }; - var flatObject = function (data, path, result, prevKey) { - var key, keyWithPath, keyWithShortPath, val; - if (!path) { - path = []; - } - if (!result) { - result = {}; - } - for (key in data) { - if (!Object.prototype.hasOwnProperty.call(data, key)) { - continue; - } - val = data[key]; - if (angular.isObject(val)) { - flatObject(val, path.concat(key), result, key); - } else { - keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key; - if (path.length && key === prevKey) { - keyWithShortPath = '' + path.join(NESTED_OBJECT_DELIMITER); - result[keyWithShortPath] = '@:' + keyWithPath; - } - result[keyWithPath] = val; - } - } - return result; - }; - this.addInterpolation = function (factory) { - $interpolatorFactories.push(factory); - return this; - }; - this.useMessageFormatInterpolation = function () { - return this.useInterpolation('$translateMessageFormatInterpolation'); - }; - this.useInterpolation = function (factory) { - $interpolationFactory = factory; - return this; - }; - this.useSanitizeValueStrategy = function (value) { - $interpolationSanitizationStrategy = value; - return this; - }; - this.preferredLanguage = function (langKey) { - setupPreferredLanguage(langKey); - return this; - }; - var setupPreferredLanguage = function (langKey) { - if (langKey) { - $preferredLanguage = langKey; - } - return $preferredLanguage; - }; - this.translationNotFoundIndicator = function (indicator) { - this.translationNotFoundIndicatorLeft(indicator); - this.translationNotFoundIndicatorRight(indicator); - return this; - }; - this.translationNotFoundIndicatorLeft = function (indicator) { - if (!indicator) { - return $notFoundIndicatorLeft; - } - $notFoundIndicatorLeft = indicator; - return this; - }; - this.translationNotFoundIndicatorRight = function (indicator) { - if (!indicator) { - return $notFoundIndicatorRight; - } - $notFoundIndicatorRight = indicator; - return this; - }; - this.fallbackLanguage = function (langKey) { - fallbackStack(langKey); - return this; - }; - var fallbackStack = function (langKey) { - if (langKey) { - if (angular.isString(langKey)) { - $fallbackWasString = true; - $fallbackLanguage = [langKey]; - } else if (angular.isArray(langKey)) { - $fallbackWasString = false; - $fallbackLanguage = langKey; - } - if (angular.isString($preferredLanguage) && indexOf($fallbackLanguage, $preferredLanguage) < 0) { - $fallbackLanguage.push($preferredLanguage); - } - return this; - } else { - if ($fallbackWasString) { - return $fallbackLanguage[0]; - } else { - return $fallbackLanguage; - } - } - }; - this.use = function (langKey) { - if (langKey) { - if (!$translationTable[langKey] && !$loaderFactory) { - throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\''); - } - $uses = langKey; - return this; - } - return $uses; - }; - var storageKey = function (key) { - if (!key) { - if ($storagePrefix) { - return $storagePrefix + $storageKey; - } - return $storageKey; - } - $storageKey = key; - }; - this.storageKey = storageKey; - this.useUrlLoader = function (url, options) { - return this.useLoader('$translateUrlLoader', angular.extend({ url: url }, options)); - }; - this.useStaticFilesLoader = function (options) { - return this.useLoader('$translateStaticFilesLoader', options); - }; - this.useLoader = function (loaderFactory, options) { - $loaderFactory = loaderFactory; - $loaderOptions = options || {}; - return this; - }; - this.useLocalStorage = function () { - return this.useStorage('$translateLocalStorage'); - }; - this.useCookieStorage = function () { - return this.useStorage('$translateCookieStorage'); - }; - this.useStorage = function (storageFactory) { - $storageFactory = storageFactory; - return this; - }; - this.storagePrefix = function (prefix) { - if (!prefix) { - return prefix; - } - $storagePrefix = prefix; - return this; - }; - this.useMissingTranslationHandlerLog = function () { - return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog'); - }; - this.useMissingTranslationHandler = function (factory) { - $missingTranslationHandlerFactory = factory; - return this; - }; - this.usePostCompiling = function (value) { - $postCompilingEnabled = !!value; - return this; - }; - this.determinePreferredLanguage = function (fn) { - var locale = fn && angular.isFunction(fn) ? fn() : getLocale(); - if (!$availableLanguageKeys.length) { - $preferredLanguage = locale; - } else { - $preferredLanguage = negotiateLocale(locale); - } - return this; - }; - this.registerAvailableLanguageKeys = function (languageKeys, aliases) { - if (languageKeys) { - $availableLanguageKeys = languageKeys; - if (aliases) { - $languageKeyAliases = aliases; - } - return this; - } - return $availableLanguageKeys; - }; - this.useLoaderCache = function (cache) { - if (cache === false) { - loaderCache = undefined; - } else if (cache === true) { - loaderCache = true; - } else if (typeof cache === 'undefined') { - loaderCache = '$translationCache'; - } else if (cache) { - loaderCache = cache; - } - return this; - }; - this.$get = [ - '$log', - '$injector', - '$rootScope', - '$q', - function ($log, $injector, $rootScope, $q) { - var Storage, defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), pendingLoader = false, interpolatorHashMap = {}, langPromises = {}, fallbackIndex, startFallbackIteration; - var $translate = function (translationId, interpolateParams, interpolationId) { - if (angular.isArray(translationId)) { - var translateAll = function (translationIds) { - var results = {}; - var promises = []; - var translate = function (translationId) { - var deferred = $q.defer(); - var regardless = function (value) { - results[translationId] = value; - deferred.resolve([ - translationId, - value - ]); - }; - $translate(translationId, interpolateParams, interpolationId).then(regardless, regardless); - return deferred.promise; - }; - for (var i = 0, c = translationIds.length; i < c; i++) { - promises.push(translate(translationIds[i])); - } - return $q.all(promises).then(function () { - return results; - }); - }; - return translateAll(translationId); - } - var deferred = $q.defer(); - if (translationId) { - translationId = trim.apply(translationId); - } - var promiseToWaitFor = function () { - var promise = $preferredLanguage ? langPromises[$preferredLanguage] : langPromises[$uses]; - fallbackIndex = 0; - if ($storageFactory && !promise) { - var langKey = Storage.get($storageKey); - promise = langPromises[langKey]; - if ($fallbackLanguage && $fallbackLanguage.length) { - var index = indexOf($fallbackLanguage, langKey); - fallbackIndex = index === 0 ? 1 : 0; - if (indexOf($fallbackLanguage, $preferredLanguage) < 0) { - $fallbackLanguage.push($preferredLanguage); - } + '$STORAGE_KEY', + function ($STORAGE_KEY) { + var $translationTable = {}, $preferredLanguage, $availableLanguageKeys = [], $languageKeyAliases, + $fallbackLanguage, $fallbackWasString, $uses, $nextLang, $storageFactory, $storageKey = $STORAGE_KEY, + $storagePrefix, $missingTranslationHandlerFactory, $interpolationFactory, $interpolatorFactories = [], + $interpolationSanitizationStrategy = false, $loaderFactory, $cloakClassName = 'translate-cloak', + $loaderOptions, $notFoundIndicatorLeft, $notFoundIndicatorRight, $postCompilingEnabled = false, + NESTED_OBJECT_DELIMITER = '.', loaderCache; + var version = '2.4.2'; + var getLocale = function () { + var nav = window.navigator; + return ((angular.isArray(nav.languages) ? nav.languages[0] : nav.language || nav.browserLanguage || nav.systemLanguage || nav.userLanguage) || '').split('-').join('_'); + }; + var indexOf = function (array, searchElement) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === searchElement) { + return i; } - } - return promise; - }(); - if (!promiseToWaitFor) { - determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject); - } else { - promiseToWaitFor.then(function () { - determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject); - }, deferred.reject); - } - return deferred.promise; - }; - var applyNotFoundIndicators = function (translationId) { - if ($notFoundIndicatorLeft) { - translationId = [ - $notFoundIndicatorLeft, - translationId - ].join(' '); - } - if ($notFoundIndicatorRight) { - translationId = [ - translationId, - $notFoundIndicatorRight - ].join(' '); - } - return translationId; - }; - var useLanguage = function (key) { - $uses = key; - $rootScope.$emit('$translateChangeSuccess', { language: key }); - if ($storageFactory) { - Storage.set($translate.storageKey(), $uses); - } - defaultInterpolator.setLocale($uses); - angular.forEach(interpolatorHashMap, function (interpolator, id) { - interpolatorHashMap[id].setLocale($uses); - }); - $rootScope.$emit('$translateChangeEnd', { language: key }); - }; - var loadAsync = function (key) { - if (!key) { - throw 'No language key specified for loading.'; - } - var deferred = $q.defer(); - $rootScope.$emit('$translateLoadingStart', { language: key }); - pendingLoader = true; - var cache = loaderCache; - if (typeof cache === 'string') { - cache = $injector.get(cache); - } - var loaderOptions = angular.extend({}, $loaderOptions, { - key: key, - $http: angular.extend({}, { cache: cache }, $loaderOptions.$http) - }); - $injector.get($loaderFactory)(loaderOptions).then(function (data) { - var translationTable = {}; - $rootScope.$emit('$translateLoadingSuccess', { language: key }); - if (angular.isArray(data)) { - angular.forEach(data, function (table) { - angular.extend(translationTable, flatObject(table)); - }); - } else { - angular.extend(translationTable, flatObject(data)); - } - pendingLoader = false; - deferred.resolve({ - key: key, - table: translationTable - }); - $rootScope.$emit('$translateLoadingEnd', { language: key }); - }, function (key) { - $rootScope.$emit('$translateLoadingError', { language: key }); - deferred.reject(key); - $rootScope.$emit('$translateLoadingEnd', { language: key }); - }); - return deferred.promise; - }; - if ($storageFactory) { - Storage = $injector.get($storageFactory); - if (!Storage.get || !Storage.set) { - throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!'); - } - } - if (angular.isFunction(defaultInterpolator.useSanitizeValueStrategy)) { - defaultInterpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy); - } - if ($interpolatorFactories.length) { - angular.forEach($interpolatorFactories, function (interpolatorFactory) { - var interpolator = $injector.get(interpolatorFactory); - interpolator.setLocale($preferredLanguage || $uses); - if (angular.isFunction(interpolator.useSanitizeValueStrategy)) { - interpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy); } - interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator; - }); - } - var getTranslationTable = function (langKey) { - var deferred = $q.defer(); - if (Object.prototype.hasOwnProperty.call($translationTable, langKey)) { - deferred.resolve($translationTable[langKey]); - } else if (langPromises[langKey]) { - langPromises[langKey].then(function (data) { - translations(data.key, data.table); - deferred.resolve(data.table); - }, deferred.reject); - } else { - deferred.reject(); - } - return deferred.promise; - }; - var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator) { - var deferred = $q.defer(); - getTranslationTable(langKey).then(function (translationTable) { - if (Object.prototype.hasOwnProperty.call(translationTable, translationId)) { - Interpolator.setLocale(langKey); - deferred.resolve(Interpolator.interpolate(translationTable[translationId], interpolateParams)); - Interpolator.setLocale($uses); - } else { - deferred.reject(); + return -1; + }; + var trim = function () { + return this.replace(/^\s+|\s+$/g, ''); + }; + var negotiateLocale = function (preferred) { + var avail = [], locale = angular.lowercase(preferred), i = 0, n = $availableLanguageKeys.length; + for (; i < n; i++) { + avail.push(angular.lowercase($availableLanguageKeys[i])); } - }, deferred.reject); - return deferred.promise; - }; - var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator) { - var result, translationTable = $translationTable[langKey]; - if (Object.prototype.hasOwnProperty.call(translationTable, translationId)) { - Interpolator.setLocale(langKey); - result = Interpolator.interpolate(translationTable[translationId], interpolateParams); - Interpolator.setLocale($uses); - } - return result; - }; - var translateByHandler = function (translationId) { - if ($missingTranslationHandlerFactory) { - var resultString = $injector.get($missingTranslationHandlerFactory)(translationId, $uses); - if (resultString !== undefined) { - return resultString; - } else { - return translationId; + if (indexOf(avail, locale) > -1) { + return preferred; } - } else { - return translationId; - } - }; - var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) { - var deferred = $q.defer(); - if (fallbackLanguageIndex < $fallbackLanguage.length) { - var langKey = $fallbackLanguage[fallbackLanguageIndex]; - getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator).then(deferred.resolve, function () { - resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator).then(deferred.resolve); - }); - } else { - deferred.resolve(translateByHandler(translationId)); - } - return deferred.promise; - }; - var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) { - var result; - if (fallbackLanguageIndex < $fallbackLanguage.length) { - var langKey = $fallbackLanguage[fallbackLanguageIndex]; - result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator); - if (!result) { - result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator); + if ($languageKeyAliases) { + var alias; + for (var langKeyAlias in $languageKeyAliases) { + var hasWildcardKey = false; + var hasExactKey = Object.prototype.hasOwnProperty.call($languageKeyAliases, langKeyAlias) && angular.lowercase(langKeyAlias) === angular.lowercase(preferred); + if (langKeyAlias.slice(-1) === '*') { + hasWildcardKey = langKeyAlias.slice(0, -1) === preferred.slice(0, langKeyAlias.length - 1); + } + if (hasExactKey || hasWildcardKey) { + alias = $languageKeyAliases[langKeyAlias]; + if (indexOf(avail, angular.lowercase(alias)) > -1) { + return alias; + } + } + } } - } - return result; - }; - var fallbackTranslation = function (translationId, interpolateParams, Interpolator) { - return resolveForFallbackLanguage(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator); - }; - var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator) { - return resolveForFallbackLanguageInstant(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator); - }; - var determineTranslation = function (translationId, interpolateParams, interpolationId) { - var deferred = $q.defer(); - var table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator; - if (table && Object.prototype.hasOwnProperty.call(table, translationId)) { - var translation = table[translationId]; - if (translation.substr(0, 2) === '@:') { - $translate(translation.substr(2), interpolateParams, interpolationId).then(deferred.resolve, deferred.reject); - } else { - deferred.resolve(Interpolator.interpolate(translation, interpolateParams)); + var parts = preferred.split('_'); + if (parts.length > 1 && indexOf(avail, angular.lowercase(parts[0])) > -1) { + return parts[0]; } - } else { - var missingTranslationHandlerTranslation; - if ($missingTranslationHandlerFactory && !pendingLoader) { - missingTranslationHandlerTranslation = translateByHandler(translationId); + return preferred; + }; + var translations = function (langKey, translationTable) { + if (!langKey && !translationTable) { + return $translationTable; } - if ($uses && $fallbackLanguage && $fallbackLanguage.length) { - fallbackTranslation(translationId, interpolateParams, Interpolator).then(function (translation) { - deferred.resolve(translation); - }, function (_translationId) { - deferred.reject(applyNotFoundIndicators(_translationId)); - }); - } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) { - deferred.resolve(missingTranslationHandlerTranslation); + if (langKey && !translationTable) { + if (angular.isString(langKey)) { + return $translationTable[langKey]; + } } else { - deferred.reject(applyNotFoundIndicators(translationId)); + if (!angular.isObject($translationTable[langKey])) { + $translationTable[langKey] = {}; + } + angular.extend($translationTable[langKey], flatObject(translationTable)); } - } - return deferred.promise; - }; - var determineTranslationInstant = function (translationId, interpolateParams, interpolationId) { - var result, table = $uses ? $translationTable[$uses] : $translationTable, Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator; - if (table && Object.prototype.hasOwnProperty.call(table, translationId)) { - var translation = table[translationId]; - if (translation.substr(0, 2) === '@:') { - result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId); - } else { - result = Interpolator.interpolate(translation, interpolateParams); + return this; + }; + this.translations = translations; + this.cloakClassName = function (name) { + if (!name) { + return $cloakClassName; + } + $cloakClassName = name; + return this; + }; + var flatObject = function (data, path, result, prevKey) { + var key, keyWithPath, keyWithShortPath, val; + if (!path) { + path = []; } - } else { - var missingTranslationHandlerTranslation; - if ($missingTranslationHandlerFactory && !pendingLoader) { - missingTranslationHandlerTranslation = translateByHandler(translationId); + if (!result) { + result = {}; } - if ($uses && $fallbackLanguage && $fallbackLanguage.length) { - fallbackIndex = 0; - result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator); - } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) { - result = missingTranslationHandlerTranslation; - } else { - result = applyNotFoundIndicators(translationId); + for (key in data) { + if (!Object.prototype.hasOwnProperty.call(data, key)) { + continue; + } + val = data[key]; + if (angular.isObject(val)) { + flatObject(val, path.concat(key), result, key); + } else { + keyWithPath = path.length ? '' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key : key; + if (path.length && key === prevKey) { + keyWithShortPath = '' + path.join(NESTED_OBJECT_DELIMITER); + result[keyWithShortPath] = '@:' + keyWithPath; + } + result[keyWithPath] = val; + } } - } - return result; + return result; + }; + this.addInterpolation = function (factory) { + $interpolatorFactories.push(factory); + return this; + }; + this.useMessageFormatInterpolation = function () { + return this.useInterpolation('$translateMessageFormatInterpolation'); + }; + this.useInterpolation = function (factory) { + $interpolationFactory = factory; + return this; }; - $translate.preferredLanguage = function (langKey) { - if (langKey) { + this.useSanitizeValueStrategy = function (value) { + $interpolationSanitizationStrategy = value; + return this; + }; + this.preferredLanguage = function (langKey) { setupPreferredLanguage(langKey); - } - return $preferredLanguage; + return this; + }; + var setupPreferredLanguage = function (langKey) { + if (langKey) { + $preferredLanguage = langKey; + } + return $preferredLanguage; + }; + this.translationNotFoundIndicator = function (indicator) { + this.translationNotFoundIndicatorLeft(indicator); + this.translationNotFoundIndicatorRight(indicator); + return this; + }; + this.translationNotFoundIndicatorLeft = function (indicator) { + if (!indicator) { + return $notFoundIndicatorLeft; + } + $notFoundIndicatorLeft = indicator; + return this; }; - $translate.cloakClassName = function () { - return $cloakClassName; + this.translationNotFoundIndicatorRight = function (indicator) { + if (!indicator) { + return $notFoundIndicatorRight; + } + $notFoundIndicatorRight = indicator; + return this; }; - $translate.fallbackLanguage = function (langKey) { - if (langKey !== undefined && langKey !== null) { + this.fallbackLanguage = function (langKey) { fallbackStack(langKey); - if ($loaderFactory) { - if ($fallbackLanguage && $fallbackLanguage.length) { - for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { - if (!langPromises[$fallbackLanguage[i]]) { - langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]); - } + return this; + }; + var fallbackStack = function (langKey) { + if (langKey) { + if (angular.isString(langKey)) { + $fallbackWasString = true; + $fallbackLanguage = [langKey]; + } else if (angular.isArray(langKey)) { + $fallbackWasString = false; + $fallbackLanguage = langKey; } - } - } - $translate.use($translate.use()); - } - if ($fallbackWasString) { - return $fallbackLanguage[0]; - } else { - return $fallbackLanguage; - } - }; - $translate.useFallbackLanguage = function (langKey) { - if (langKey !== undefined && langKey !== null) { - if (!langKey) { - startFallbackIteration = 0; + if (angular.isString($preferredLanguage) && indexOf($fallbackLanguage, $preferredLanguage) < 0) { + $fallbackLanguage.push($preferredLanguage); + } + return this; } else { - var langKeyPosition = indexOf($fallbackLanguage, langKey); - if (langKeyPosition > -1) { - startFallbackIteration = langKeyPosition; - } + if ($fallbackWasString) { + return $fallbackLanguage[0]; + } else { + return $fallbackLanguage; + } } - } }; - $translate.proposedLanguage = function () { - return $nextLang; + this.use = function (langKey) { + if (langKey) { + if (!$translationTable[langKey] && !$loaderFactory) { + throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\''); + } + $uses = langKey; + return this; + } + return $uses; }; - $translate.storage = function () { - return Storage; + var storageKey = function (key) { + if (!key) { + if ($storagePrefix) { + return $storagePrefix + $storageKey; + } + return $storageKey; + } + $storageKey = key; }; - $translate.use = function (key) { - if (!key) { - return $uses; - } - var deferred = $q.defer(); - $rootScope.$emit('$translateChangeStart', { language: key }); - var aliasedKey = negotiateLocale(key); - if (aliasedKey) { - key = aliasedKey; - } - if (!$translationTable[key] && $loaderFactory && !langPromises[key]) { - $nextLang = key; - langPromises[key] = loadAsync(key).then(function (translation) { - translations(translation.key, translation.table); - deferred.resolve(translation.key); - useLanguage(translation.key); - if ($nextLang === key) { - $nextLang = undefined; - } - }, function (key) { - if ($nextLang === key) { - $nextLang = undefined; - } - $rootScope.$emit('$translateChangeError', { language: key }); - deferred.reject(key); - $rootScope.$emit('$translateChangeEnd', { language: key }); - }); - } else { - deferred.resolve(key); - useLanguage(key); - } - return deferred.promise; - }; - $translate.storageKey = function () { - return storageKey(); - }; - $translate.isPostCompilingEnabled = function () { - return $postCompilingEnabled; - }; - $translate.refresh = function (langKey) { - if (!$loaderFactory) { - throw new Error('Couldn\'t refresh translation table, no loader registered!'); - } - var deferred = $q.defer(); - function resolve() { - deferred.resolve(); - $rootScope.$emit('$translateRefreshEnd', { language: langKey }); - } - function reject() { - deferred.reject(); - $rootScope.$emit('$translateRefreshEnd', { language: langKey }); - } - $rootScope.$emit('$translateRefreshStart', { language: langKey }); - if (!langKey) { - var tables = [], loadingKeys = {}; - if ($fallbackLanguage && $fallbackLanguage.length) { - for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { - tables.push(loadAsync($fallbackLanguage[i])); - loadingKeys[$fallbackLanguage[i]] = true; - } + this.storageKey = storageKey; + this.useUrlLoader = function (url, options) { + return this.useLoader('$translateUrlLoader', angular.extend({url: url}, options)); + }; + this.useStaticFilesLoader = function (options) { + return this.useLoader('$translateStaticFilesLoader', options); + }; + this.useLoader = function (loaderFactory, options) { + $loaderFactory = loaderFactory; + $loaderOptions = options || {}; + return this; + }; + this.useLocalStorage = function () { + return this.useStorage('$translateLocalStorage'); + }; + this.useCookieStorage = function () { + return this.useStorage('$translateCookieStorage'); + }; + this.useStorage = function (storageFactory) { + $storageFactory = storageFactory; + return this; + }; + this.storagePrefix = function (prefix) { + if (!prefix) { + return prefix; } - if ($uses && !loadingKeys[$uses]) { - tables.push(loadAsync($uses)); + $storagePrefix = prefix; + return this; + }; + this.useMissingTranslationHandlerLog = function () { + return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog'); + }; + this.useMissingTranslationHandler = function (factory) { + $missingTranslationHandlerFactory = factory; + return this; + }; + this.usePostCompiling = function (value) { + $postCompilingEnabled = !!value; + return this; + }; + this.determinePreferredLanguage = function (fn) { + var locale = fn && angular.isFunction(fn) ? fn() : getLocale(); + if (!$availableLanguageKeys.length) { + $preferredLanguage = locale; + } else { + $preferredLanguage = negotiateLocale(locale); } - $q.all(tables).then(function (tableData) { - angular.forEach(tableData, function (data) { - if ($translationTable[data.key]) { - delete $translationTable[data.key]; + return this; + }; + this.registerAvailableLanguageKeys = function (languageKeys, aliases) { + if (languageKeys) { + $availableLanguageKeys = languageKeys; + if (aliases) { + $languageKeyAliases = aliases; } - translations(data.key, data.table); - }); - if ($uses) { - useLanguage($uses); - } - resolve(); - }); - } else if ($translationTable[langKey]) { - loadAsync(langKey).then(function (data) { - translations(data.key, data.table); - if (langKey === $uses) { - useLanguage($uses); - } - resolve(); - }, reject); - } else { - reject(); - } - return deferred.promise; - }; - $translate.instant = function (translationId, interpolateParams, interpolationId) { - if (translationId === null || angular.isUndefined(translationId)) { - return translationId; - } - if (angular.isArray(translationId)) { - var results = {}; - for (var i = 0, c = translationId.length; i < c; i++) { - results[translationId[i]] = $translate.instant(translationId[i], interpolateParams, interpolationId); + return this; } - return results; - } - if (angular.isString(translationId) && translationId.length < 1) { - return translationId; - } - if (translationId) { - translationId = trim.apply(translationId); - } - var result, possibleLangKeys = []; - if ($preferredLanguage) { - possibleLangKeys.push($preferredLanguage); - } - if ($uses) { - possibleLangKeys.push($uses); - } - if ($fallbackLanguage && $fallbackLanguage.length) { - possibleLangKeys = possibleLangKeys.concat($fallbackLanguage); - } - for (var j = 0, d = possibleLangKeys.length; j < d; j++) { - var possibleLangKey = possibleLangKeys[j]; - if ($translationTable[possibleLangKey]) { - if (typeof $translationTable[possibleLangKey][translationId] !== 'undefined') { - result = determineTranslationInstant(translationId, interpolateParams, interpolationId); - } - } - if (typeof result !== 'undefined') { - break; - } - } - if (!result && result !== '') { - result = defaultInterpolator.interpolate(translationId, interpolateParams); - if ($missingTranslationHandlerFactory && !pendingLoader) { - result = translateByHandler(translationId); + return $availableLanguageKeys; + }; + this.useLoaderCache = function (cache) { + if (cache === false) { + loaderCache = undefined; + } else if (cache === true) { + loaderCache = true; + } else if (typeof cache === 'undefined') { + loaderCache = '$translationCache'; + } else if (cache) { + loaderCache = cache; } - } - return result; - }; - $translate.versionInfo = function () { - return version; - }; - $translate.loaderCache = function () { - return loaderCache; - }; - if ($loaderFactory) { - if (angular.equals($translationTable, {})) { - $translate.use($translate.use()); - } - if ($fallbackLanguage && $fallbackLanguage.length) { - var processAsyncResult = function (translation) { - translations(translation.key, translation.table); - $rootScope.$emit('$translateChangeEnd', { language: translation.key }); - }; - for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { - langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]).then(processAsyncResult); + return this; + }; + this.$get = [ + '$log', + '$injector', + '$rootScope', + '$q', + function ($log, $injector, $rootScope, $q) { + var Storage, + defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), + pendingLoader = false, interpolatorHashMap = {}, langPromises = {}, fallbackIndex, + startFallbackIteration; + var $translate = function (translationId, interpolateParams, interpolationId) { + if (angular.isArray(translationId)) { + var translateAll = function (translationIds) { + var results = {}; + var promises = []; + var translate = function (translationId) { + var deferred = $q.defer(); + var regardless = function (value) { + results[translationId] = value; + deferred.resolve([ + translationId, + value + ]); + }; + $translate(translationId, interpolateParams, interpolationId).then(regardless, regardless); + return deferred.promise; + }; + for (var i = 0, c = translationIds.length; i < c; i++) { + promises.push(translate(translationIds[i])); + } + return $q.all(promises).then(function () { + return results; + }); + }; + return translateAll(translationId); + } + var deferred = $q.defer(); + if (translationId) { + translationId = trim.apply(translationId); + } + var promiseToWaitFor = function () { + var promise = $preferredLanguage ? langPromises[$preferredLanguage] : langPromises[$uses]; + fallbackIndex = 0; + if ($storageFactory && !promise) { + var langKey = Storage.get($storageKey); + promise = langPromises[langKey]; + if ($fallbackLanguage && $fallbackLanguage.length) { + var index = indexOf($fallbackLanguage, langKey); + fallbackIndex = index === 0 ? 1 : 0; + if (indexOf($fallbackLanguage, $preferredLanguage) < 0) { + $fallbackLanguage.push($preferredLanguage); + } + } + } + return promise; + }(); + if (!promiseToWaitFor) { + determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject); + } else { + promiseToWaitFor.then(function () { + determineTranslation(translationId, interpolateParams, interpolationId).then(deferred.resolve, deferred.reject); + }, deferred.reject); + } + return deferred.promise; + }; + var applyNotFoundIndicators = function (translationId) { + if ($notFoundIndicatorLeft) { + translationId = [ + $notFoundIndicatorLeft, + translationId + ].join(' '); + } + if ($notFoundIndicatorRight) { + translationId = [ + translationId, + $notFoundIndicatorRight + ].join(' '); + } + return translationId; + }; + var useLanguage = function (key) { + $uses = key; + $rootScope.$emit('$translateChangeSuccess', {language: key}); + if ($storageFactory) { + Storage.set($translate.storageKey(), $uses); + } + defaultInterpolator.setLocale($uses); + angular.forEach(interpolatorHashMap, function (interpolator, id) { + interpolatorHashMap[id].setLocale($uses); + }); + $rootScope.$emit('$translateChangeEnd', {language: key}); + }; + var loadAsync = function (key) { + if (!key) { + throw 'No language key specified for loading.'; + } + var deferred = $q.defer(); + $rootScope.$emit('$translateLoadingStart', {language: key}); + pendingLoader = true; + var cache = loaderCache; + if (typeof cache === 'string') { + cache = $injector.get(cache); + } + var loaderOptions = angular.extend({}, $loaderOptions, { + key: key, + $http: angular.extend({}, {cache: cache}, $loaderOptions.$http) + }); + $injector.get($loaderFactory)(loaderOptions).then(function (data) { + var translationTable = {}; + $rootScope.$emit('$translateLoadingSuccess', {language: key}); + if (angular.isArray(data)) { + angular.forEach(data, function (table) { + angular.extend(translationTable, flatObject(table)); + }); + } else { + angular.extend(translationTable, flatObject(data)); + } + pendingLoader = false; + deferred.resolve({ + key: key, + table: translationTable + }); + $rootScope.$emit('$translateLoadingEnd', {language: key}); + }, function (key) { + $rootScope.$emit('$translateLoadingError', {language: key}); + deferred.reject(key); + $rootScope.$emit('$translateLoadingEnd', {language: key}); + }); + return deferred.promise; + }; + if ($storageFactory) { + Storage = $injector.get($storageFactory); + if (!Storage.get || !Storage.set) { + throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or set() method!'); + } + } + if (angular.isFunction(defaultInterpolator.useSanitizeValueStrategy)) { + defaultInterpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy); + } + if ($interpolatorFactories.length) { + angular.forEach($interpolatorFactories, function (interpolatorFactory) { + var interpolator = $injector.get(interpolatorFactory); + interpolator.setLocale($preferredLanguage || $uses); + if (angular.isFunction(interpolator.useSanitizeValueStrategy)) { + interpolator.useSanitizeValueStrategy($interpolationSanitizationStrategy); + } + interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator; + }); + } + var getTranslationTable = function (langKey) { + var deferred = $q.defer(); + if (Object.prototype.hasOwnProperty.call($translationTable, langKey)) { + deferred.resolve($translationTable[langKey]); + } else if (langPromises[langKey]) { + langPromises[langKey].then(function (data) { + translations(data.key, data.table); + deferred.resolve(data.table); + }, deferred.reject); + } else { + deferred.reject(); + } + return deferred.promise; + }; + var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator) { + var deferred = $q.defer(); + getTranslationTable(langKey).then(function (translationTable) { + if (Object.prototype.hasOwnProperty.call(translationTable, translationId)) { + Interpolator.setLocale(langKey); + deferred.resolve(Interpolator.interpolate(translationTable[translationId], interpolateParams)); + Interpolator.setLocale($uses); + } else { + deferred.reject(); + } + }, deferred.reject); + return deferred.promise; + }; + var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator) { + var result, translationTable = $translationTable[langKey]; + if (Object.prototype.hasOwnProperty.call(translationTable, translationId)) { + Interpolator.setLocale(langKey); + result = Interpolator.interpolate(translationTable[translationId], interpolateParams); + Interpolator.setLocale($uses); + } + return result; + }; + var translateByHandler = function (translationId) { + if ($missingTranslationHandlerFactory) { + var resultString = $injector.get($missingTranslationHandlerFactory)(translationId, $uses); + if (resultString !== undefined) { + return resultString; + } else { + return translationId; + } + } else { + return translationId; + } + }; + var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) { + var deferred = $q.defer(); + if (fallbackLanguageIndex < $fallbackLanguage.length) { + var langKey = $fallbackLanguage[fallbackLanguageIndex]; + getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator).then(deferred.resolve, function () { + resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator).then(deferred.resolve); + }); + } else { + deferred.resolve(translateByHandler(translationId)); + } + return deferred.promise; + }; + var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) { + var result; + if (fallbackLanguageIndex < $fallbackLanguage.length) { + var langKey = $fallbackLanguage[fallbackLanguageIndex]; + result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator); + if (!result) { + result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator); + } + } + return result; + }; + var fallbackTranslation = function (translationId, interpolateParams, Interpolator) { + return resolveForFallbackLanguage(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator); + }; + var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator) { + return resolveForFallbackLanguageInstant(startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex, translationId, interpolateParams, Interpolator); + }; + var determineTranslation = function (translationId, interpolateParams, interpolationId) { + var deferred = $q.defer(); + var table = $uses ? $translationTable[$uses] : $translationTable, + Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator; + if (table && Object.prototype.hasOwnProperty.call(table, translationId)) { + var translation = table[translationId]; + if (translation.substr(0, 2) === '@:') { + $translate(translation.substr(2), interpolateParams, interpolationId).then(deferred.resolve, deferred.reject); + } else { + deferred.resolve(Interpolator.interpolate(translation, interpolateParams)); + } + } else { + var missingTranslationHandlerTranslation; + if ($missingTranslationHandlerFactory && !pendingLoader) { + missingTranslationHandlerTranslation = translateByHandler(translationId); + } + if ($uses && $fallbackLanguage && $fallbackLanguage.length) { + fallbackTranslation(translationId, interpolateParams, Interpolator).then(function (translation) { + deferred.resolve(translation); + }, function (_translationId) { + deferred.reject(applyNotFoundIndicators(_translationId)); + }); + } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) { + deferred.resolve(missingTranslationHandlerTranslation); + } else { + deferred.reject(applyNotFoundIndicators(translationId)); + } + } + return deferred.promise; + }; + var determineTranslationInstant = function (translationId, interpolateParams, interpolationId) { + var result, table = $uses ? $translationTable[$uses] : $translationTable, + Interpolator = interpolationId ? interpolatorHashMap[interpolationId] : defaultInterpolator; + if (table && Object.prototype.hasOwnProperty.call(table, translationId)) { + var translation = table[translationId]; + if (translation.substr(0, 2) === '@:') { + result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId); + } else { + result = Interpolator.interpolate(translation, interpolateParams); + } + } else { + var missingTranslationHandlerTranslation; + if ($missingTranslationHandlerFactory && !pendingLoader) { + missingTranslationHandlerTranslation = translateByHandler(translationId); + } + if ($uses && $fallbackLanguage && $fallbackLanguage.length) { + fallbackIndex = 0; + result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator); + } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) { + result = missingTranslationHandlerTranslation; + } else { + result = applyNotFoundIndicators(translationId); + } + } + return result; + }; + $translate.preferredLanguage = function (langKey) { + if (langKey) { + setupPreferredLanguage(langKey); + } + return $preferredLanguage; + }; + $translate.cloakClassName = function () { + return $cloakClassName; + }; + $translate.fallbackLanguage = function (langKey) { + if (langKey !== undefined && langKey !== null) { + fallbackStack(langKey); + if ($loaderFactory) { + if ($fallbackLanguage && $fallbackLanguage.length) { + for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { + if (!langPromises[$fallbackLanguage[i]]) { + langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]); + } + } + } + } + $translate.use($translate.use()); + } + if ($fallbackWasString) { + return $fallbackLanguage[0]; + } else { + return $fallbackLanguage; + } + }; + $translate.useFallbackLanguage = function (langKey) { + if (langKey !== undefined && langKey !== null) { + if (!langKey) { + startFallbackIteration = 0; + } else { + var langKeyPosition = indexOf($fallbackLanguage, langKey); + if (langKeyPosition > -1) { + startFallbackIteration = langKeyPosition; + } + } + } + }; + $translate.proposedLanguage = function () { + return $nextLang; + }; + $translate.storage = function () { + return Storage; + }; + $translate.use = function (key) { + if (!key) { + return $uses; + } + var deferred = $q.defer(); + $rootScope.$emit('$translateChangeStart', {language: key}); + var aliasedKey = negotiateLocale(key); + if (aliasedKey) { + key = aliasedKey; + } + if (!$translationTable[key] && $loaderFactory && !langPromises[key]) { + $nextLang = key; + langPromises[key] = loadAsync(key).then(function (translation) { + translations(translation.key, translation.table); + deferred.resolve(translation.key); + useLanguage(translation.key); + if ($nextLang === key) { + $nextLang = undefined; + } + }, function (key) { + if ($nextLang === key) { + $nextLang = undefined; + } + $rootScope.$emit('$translateChangeError', {language: key}); + deferred.reject(key); + $rootScope.$emit('$translateChangeEnd', {language: key}); + }); + } else { + deferred.resolve(key); + useLanguage(key); + } + return deferred.promise; + }; + $translate.storageKey = function () { + return storageKey(); + }; + $translate.isPostCompilingEnabled = function () { + return $postCompilingEnabled; + }; + $translate.refresh = function (langKey) { + if (!$loaderFactory) { + throw new Error('Couldn\'t refresh translation table, no loader registered!'); + } + var deferred = $q.defer(); + + function resolve() { + deferred.resolve(); + $rootScope.$emit('$translateRefreshEnd', {language: langKey}); + } + + function reject() { + deferred.reject(); + $rootScope.$emit('$translateRefreshEnd', {language: langKey}); + } + + $rootScope.$emit('$translateRefreshStart', {language: langKey}); + if (!langKey) { + var tables = [], loadingKeys = {}; + if ($fallbackLanguage && $fallbackLanguage.length) { + for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { + tables.push(loadAsync($fallbackLanguage[i])); + loadingKeys[$fallbackLanguage[i]] = true; + } + } + if ($uses && !loadingKeys[$uses]) { + tables.push(loadAsync($uses)); + } + $q.all(tables).then(function (tableData) { + angular.forEach(tableData, function (data) { + if ($translationTable[data.key]) { + delete $translationTable[data.key]; + } + translations(data.key, data.table); + }); + if ($uses) { + useLanguage($uses); + } + resolve(); + }); + } else if ($translationTable[langKey]) { + loadAsync(langKey).then(function (data) { + translations(data.key, data.table); + if (langKey === $uses) { + useLanguage($uses); + } + resolve(); + }, reject); + } else { + reject(); + } + return deferred.promise; + }; + $translate.instant = function (translationId, interpolateParams, interpolationId) { + if (translationId === null || angular.isUndefined(translationId)) { + return translationId; + } + if (angular.isArray(translationId)) { + var results = {}; + for (var i = 0, c = translationId.length; i < c; i++) { + results[translationId[i]] = $translate.instant(translationId[i], interpolateParams, interpolationId); + } + return results; + } + if (angular.isString(translationId) && translationId.length < 1) { + return translationId; + } + if (translationId) { + translationId = trim.apply(translationId); + } + var result, possibleLangKeys = []; + if ($preferredLanguage) { + possibleLangKeys.push($preferredLanguage); + } + if ($uses) { + possibleLangKeys.push($uses); + } + if ($fallbackLanguage && $fallbackLanguage.length) { + possibleLangKeys = possibleLangKeys.concat($fallbackLanguage); + } + for (var j = 0, d = possibleLangKeys.length; j < d; j++) { + var possibleLangKey = possibleLangKeys[j]; + if ($translationTable[possibleLangKey]) { + if (typeof $translationTable[possibleLangKey][translationId] !== 'undefined') { + result = determineTranslationInstant(translationId, interpolateParams, interpolationId); + } + } + if (typeof result !== 'undefined') { + break; + } + } + if (!result && result !== '') { + result = defaultInterpolator.interpolate(translationId, interpolateParams); + if ($missingTranslationHandlerFactory && !pendingLoader) { + result = translateByHandler(translationId); + } + } + return result; + }; + $translate.versionInfo = function () { + return version; + }; + $translate.loaderCache = function () { + return loaderCache; + }; + if ($loaderFactory) { + if (angular.equals($translationTable, {})) { + $translate.use($translate.use()); + } + if ($fallbackLanguage && $fallbackLanguage.length) { + var processAsyncResult = function (translation) { + translations(translation.key, translation.table); + $rootScope.$emit('$translateChangeEnd', {language: translation.key}); + }; + for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { + langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]).then(processAsyncResult); + } + } + } + return $translate; } - } - } - return $translate; - } - ]; - } + ]; + } ]); angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', [ - '$interpolate', - function ($interpolate) { - var $translateInterpolator = {}, $locale, $identifier = 'default', $sanitizeValueStrategy = null, sanitizeValueStrategies = { - escaped: function (params) { - var result = {}; - for (var key in params) { - if (Object.prototype.hasOwnProperty.call(params, key)) { - result[key] = angular.element('
').text(params[key]).html(); + '$interpolate', + function ($interpolate) { + var $translateInterpolator = {}, $locale, $identifier = 'default', $sanitizeValueStrategy = null, + sanitizeValueStrategies = { + escaped: function (params) { + var result = {}; + for (var key in params) { + if (Object.prototype.hasOwnProperty.call(params, key)) { + result[key] = angular.element('
').text(params[key]).html(); + } + } + return result; + } + }; + var sanitizeParams = function (params) { + var result; + if (angular.isFunction(sanitizeValueStrategies[$sanitizeValueStrategy])) { + result = sanitizeValueStrategies[$sanitizeValueStrategy](params); + } else { + result = params; } - } - return result; - } - }; - var sanitizeParams = function (params) { - var result; - if (angular.isFunction(sanitizeValueStrategies[$sanitizeValueStrategy])) { - result = sanitizeValueStrategies[$sanitizeValueStrategy](params); - } else { - result = params; - } - return result; - }; - $translateInterpolator.setLocale = function (locale) { - $locale = locale; - }; - $translateInterpolator.getInterpolationIdentifier = function () { - return $identifier; - }; - $translateInterpolator.useSanitizeValueStrategy = function (value) { - $sanitizeValueStrategy = value; - return this; - }; - $translateInterpolator.interpolate = function (string, interpolateParams) { - if ($sanitizeValueStrategy) { - interpolateParams = sanitizeParams(interpolateParams); - } - return $interpolate(string)(interpolateParams || {}); - }; - return $translateInterpolator; - } + return result; + }; + $translateInterpolator.setLocale = function (locale) { + $locale = locale; + }; + $translateInterpolator.getInterpolationIdentifier = function () { + return $identifier; + }; + $translateInterpolator.useSanitizeValueStrategy = function (value) { + $sanitizeValueStrategy = value; + return this; + }; + $translateInterpolator.interpolate = function (string, interpolateParams) { + if ($sanitizeValueStrategy) { + interpolateParams = sanitizeParams(interpolateParams); + } + return $interpolate(string)(interpolateParams || {}); + }; + return $translateInterpolator; + } ]); angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY'); angular.module('pascalprecht.translate').directive('translate', [ - '$translate', - '$q', - '$interpolate', - '$compile', - '$parse', - '$rootScope', - function ($translate, $q, $interpolate, $compile, $parse, $rootScope) { - return { - restrict: 'AE', - scope: true, - compile: function (tElement, tAttr) { - var translateValuesExist = tAttr.translateValues ? tAttr.translateValues : undefined; - var translateInterpolation = tAttr.translateInterpolation ? tAttr.translateInterpolation : undefined; - var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i); - var interpolateRegExp = '^(.*)(' + $interpolate.startSymbol() + '.*' + $interpolate.endSymbol() + ')(.*)'; - return function linkFn(scope, iElement, iAttr) { - scope.interpolateParams = {}; - scope.preText = ''; - scope.postText = ''; - iAttr.$observe('translate', function (translationId) { - if (angular.equals(translationId, '') || !angular.isDefined(translationId)) { - var interpolateMatches = iElement.text().match(interpolateRegExp); - if (angular.isArray(interpolateMatches)) { - scope.preText = interpolateMatches[1]; - scope.postText = interpolateMatches[3]; - scope.translationId = $interpolate(interpolateMatches[2])(scope.$parent); - } else { - scope.translationId = iElement.text().replace(/^\s+|\s+$/g, ''); - } - } else { - scope.translationId = translationId; - } - }); - iAttr.$observe('translateDefault', function (value) { - scope.defaultText = value; - }); - if (translateValuesExist) { - iAttr.$observe('translateValues', function (interpolateParams) { - if (interpolateParams) { - scope.$parent.$watch(function () { - angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent)); - }); - } - }); - } - if (translateValueExist) { - var fn = function (attrName) { - iAttr.$observe(attrName, function (value) { - scope.interpolateParams[angular.lowercase(attrName.substr(14, 1)) + attrName.substr(15)] = value; - }); - }; - for (var attr in iAttr) { - if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') { - fn(attr); - } - } - } - var applyElementContent = function (value, scope, successful) { - if (!successful && typeof scope.defaultText !== 'undefined') { - value = scope.defaultText; - } - iElement.html(scope.preText + value + scope.postText); - var globallyEnabled = $translate.isPostCompilingEnabled(); - var locallyDefined = typeof tAttr.translateCompile !== 'undefined'; - var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false'; - if (globallyEnabled && !locallyDefined || locallyEnabled) { - $compile(iElement.contents())(scope); - } - }; - var updateTranslationFn = function () { - if (!translateValuesExist && !translateValueExist) { - return function () { - var unwatch = scope.$watch('translationId', function (value) { - if (scope.translationId && value) { - $translate(value, {}, translateInterpolation).then(function (translation) { - applyElementContent(translation, scope, true); - unwatch(); - }, function (translationId) { - applyElementContent(translationId, scope, false); - unwatch(); + '$translate', + '$q', + '$interpolate', + '$compile', + '$parse', + '$rootScope', + function ($translate, $q, $interpolate, $compile, $parse, $rootScope) { + return { + restrict: 'AE', + scope: true, + compile: function (tElement, tAttr) { + var translateValuesExist = tAttr.translateValues ? tAttr.translateValues : undefined; + var translateInterpolation = tAttr.translateInterpolation ? tAttr.translateInterpolation : undefined; + var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i); + var interpolateRegExp = '^(.*)(' + $interpolate.startSymbol() + '.*' + $interpolate.endSymbol() + ')(.*)'; + return function linkFn(scope, iElement, iAttr) { + scope.interpolateParams = {}; + scope.preText = ''; + scope.postText = ''; + iAttr.$observe('translate', function (translationId) { + if (angular.equals(translationId, '') || !angular.isDefined(translationId)) { + var interpolateMatches = iElement.text().match(interpolateRegExp); + if (angular.isArray(interpolateMatches)) { + scope.preText = interpolateMatches[1]; + scope.postText = interpolateMatches[3]; + scope.translationId = $interpolate(interpolateMatches[2])(scope.$parent); + } else { + scope.translationId = iElement.text().replace(/^\s+|\s+$/g, ''); + } + } else { + scope.translationId = translationId; + } + }); + iAttr.$observe('translateDefault', function (value) { + scope.defaultText = value; + }); + if (translateValuesExist) { + iAttr.$observe('translateValues', function (interpolateParams) { + if (interpolateParams) { + scope.$parent.$watch(function () { + angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent)); + }); + } }); - } - }, true); - }; - } else { - return function () { - var updateTranslations = function () { - if (scope.translationId && scope.interpolateParams) { - $translate(scope.translationId, scope.interpolateParams, translateInterpolation).then(function (translation) { - applyElementContent(translation, scope, true); - }, function (translationId) { - applyElementContent(translationId, scope, false); - }); - } - }; - scope.$watch('interpolateParams', updateTranslations, true); - scope.$watch('translationId', updateTranslations); + } + if (translateValueExist) { + var fn = function (attrName) { + iAttr.$observe(attrName, function (value) { + scope.interpolateParams[angular.lowercase(attrName.substr(14, 1)) + attrName.substr(15)] = value; + }); + }; + for (var attr in iAttr) { + if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') { + fn(attr); + } + } + } + var applyElementContent = function (value, scope, successful) { + if (!successful && typeof scope.defaultText !== 'undefined') { + value = scope.defaultText; + } + iElement.html(scope.preText + value + scope.postText); + var globallyEnabled = $translate.isPostCompilingEnabled(); + var locallyDefined = typeof tAttr.translateCompile !== 'undefined'; + var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false'; + if (globallyEnabled && !locallyDefined || locallyEnabled) { + $compile(iElement.contents())(scope); + } + }; + var updateTranslationFn = function () { + if (!translateValuesExist && !translateValueExist) { + return function () { + var unwatch = scope.$watch('translationId', function (value) { + if (scope.translationId && value) { + $translate(value, {}, translateInterpolation).then(function (translation) { + applyElementContent(translation, scope, true); + unwatch(); + }, function (translationId) { + applyElementContent(translationId, scope, false); + unwatch(); + }); + } + }, true); + }; + } else { + return function () { + var updateTranslations = function () { + if (scope.translationId && scope.interpolateParams) { + $translate(scope.translationId, scope.interpolateParams, translateInterpolation).then(function (translation) { + applyElementContent(translation, scope, true); + }, function (translationId) { + applyElementContent(translationId, scope, false); + }); + } + }; + scope.$watch('interpolateParams', updateTranslations, true); + scope.$watch('translationId', updateTranslations); + }; + } + }(); + var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslationFn); + updateTranslationFn(); + scope.$on('$destroy', unbind); }; - } - }(); - var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslationFn); - updateTranslationFn(); - scope.$on('$destroy', unbind); - }; - } - }; - } + } + }; + } ]); angular.module('pascalprecht.translate').directive('translateCloak', [ - '$rootScope', - '$translate', - function ($rootScope, $translate) { - return { - compile: function (tElement) { - var applyCloak = function () { - tElement.addClass($translate.cloakClassName()); - }, removeCloak = function () { - tElement.removeClass($translate.cloakClassName()); - }, removeListener = $rootScope.$on('$translateChangeEnd', function () { - removeCloak(); - removeListener(); - removeListener = null; - }); - applyCloak(); - return function linkFn(scope, iElement, iAttr) { - if (iAttr.translateCloak && iAttr.translateCloak.length) { - iAttr.$observe('translateCloak', function (translationId) { - $translate(translationId).then(removeCloak, applyCloak); - }); - } - }; - } - }; - } + '$rootScope', + '$translate', + function ($rootScope, $translate) { + return { + compile: function (tElement) { + var applyCloak = function () { + tElement.addClass($translate.cloakClassName()); + }, removeCloak = function () { + tElement.removeClass($translate.cloakClassName()); + }, removeListener = $rootScope.$on('$translateChangeEnd', function () { + removeCloak(); + removeListener(); + removeListener = null; + }); + applyCloak(); + return function linkFn(scope, iElement, iAttr) { + if (iAttr.translateCloak && iAttr.translateCloak.length) { + iAttr.$observe('translateCloak', function (translationId) { + $translate(translationId).then(removeCloak, applyCloak); + }); + } + }; + } + }; + } ]); angular.module('pascalprecht.translate').filter('translate', [ - '$parse', - '$translate', - function ($parse, $translate) { - var translateFilter = function (translationId, interpolateParams, interpolation) { - if (!angular.isObject(interpolateParams)) { - interpolateParams = $parse(interpolateParams)(this); - } - return $translate.instant(translationId, interpolateParams, interpolation); - }; - translateFilter.$stateful = true; - return translateFilter; - } + '$parse', + '$translate', + function ($parse, $translate) { + var translateFilter = function (translationId, interpolateParams, interpolation) { + if (!angular.isObject(interpolateParams)) { + interpolateParams = $parse(interpolateParams)(this); + } + return $translate.instant(translationId, interpolateParams, interpolation); + }; + translateFilter.$stateful = true; + return translateFilter; + } ]); \ No newline at end of file diff --git a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker-bs3.css b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker-bs3.css index abcaa46..024fdbc 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker-bs3.css +++ b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker-bs3.css @@ -28,11 +28,11 @@ text-align: left; } -.daterangepicker .ranges .range_inputs>div { +.daterangepicker .ranges .range_inputs > div { float: left; } -.daterangepicker .ranges .range_inputs>div:nth-child(2) { +.daterangepicker .ranges .range_inputs > div:nth-child(2) { padding-left: 11px; } diff --git a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker.js b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker.js index 579e875..5fe868d 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker.js +++ b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker.js @@ -95,7 +95,7 @@ constructor: DateRangePicker, - setOptions: function(options, callback) { + setOptions: function (options, callback) { this.startDate = moment().startOf('day'); this.endDate = moment().endOf('day'); @@ -134,7 +134,8 @@ firstDay: 0 }; - this.cb = function () { }; + this.cb = function () { + }; if (typeof options.format === 'string') this.format = options.format; @@ -368,7 +369,7 @@ }, - setStartDate: function(startDate) { + setStartDate: function (startDate) { if (typeof startDate === 'string') this.startDate = moment(startDate, this.format); @@ -384,7 +385,7 @@ this.updateCalendars(); }, - setEndDate: function(endDate) { + setEndDate: function (endDate) { if (typeof endDate === 'string') this.endDate = moment(endDate, this.format); @@ -425,7 +426,7 @@ start = null, end = null; - if(dateString.length === 2) { + if (dateString.length === 2) { start = moment(dateString[0], this.format); end = moment(dateString[1], this.format); } @@ -455,7 +456,7 @@ }, move: function () { - var parentOffset = { top: 0, left: 0 }; + var parentOffset = {top: 0, left: 0}; if (!this.parentEl.is('body')) { parentOffset = { top: this.parentEl.offset().top - this.parentEl.scrollTop(), @@ -504,7 +505,9 @@ this.move(); // Create a click proxy that is private to this instance of datepicker, for unbinding - this._outsideClickProxy = $.proxy(function (e) { this.outsideClick(e); }, this); + this._outsideClickProxy = $.proxy(function (e) { + this.outsideClick(e); + }, this); // Bind global datepicker mousedown for hiding and $(document) .on('mousedown.daterangepicker', this._outsideClickProxy) @@ -524,7 +527,7 @@ target.closest(this.element).length || target.closest(this.container).length || target.closest('.calendar-date').length - ) return; + ) return; this.hide(); }, @@ -558,16 +561,16 @@ } }, - showCalendars: function() { + showCalendars: function () { this.container.addClass('show-calendar'); this.move(); }, - hideCalendars: function() { + hideCalendars: function () { this.container.removeClass('show-calendar'); }, - updateInputText: function() { + updateInputText: function () { if (this.element.is('input') && !this.singleDatePicker) { this.element.val(this.startDate.format(this.format) + this.separator + this.endDate.format(this.format)); } else if (this.element.is('input')) { @@ -716,17 +719,17 @@ updateMonthYear: function (e) { var isLeft = $(e.target).closest('.calendar').hasClass('left'), leftOrRight = isLeft ? 'left' : 'right', - cal = this.container.find('.calendar.'+leftOrRight); + cal = this.container.find('.calendar.' + leftOrRight); // Month must be Number for new moment versions var month = parseInt(cal.find('.monthselect').val(), 10); var year = cal.find('.yearselect').val(); - this[leftOrRight+'Calendar'].month.month(month).year(year); + this[leftOrRight + 'Calendar'].month.month(month).year(year); this.updateCalendars(); }, - updateTime: function(e) { + updateTime: function (e) { var cal = $(e.target).closest('.calendar'), isLeft = cal.hasClass('left'); @@ -929,8 +932,12 @@ } } else if (calendar[row][col] >= this.startDate && calendar[row][col] <= this.endDate) { cname += ' in-range '; - if (calendar[row][col].isSame(this.startDate)) { cname += ' start-date '; } - if (calendar[row][col].isSame(this.endDate)) { cname += ' end-date '; } + if (calendar[row][col].isSame(this.startDate)) { + cname += ' start-date '; + } + if (calendar[row][col].isSame(this.endDate)) { + cname += ' end-date '; + } } var title = 'r' + row + 'c' + col; @@ -1003,7 +1010,7 @@ }, - remove: function() { + remove: function () { this.container.remove(); this.element.off('.daterangepicker'); diff --git a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css index a406992..b53ebfd 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css +++ b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css @@ -10,10 +10,11 @@ .btn-info, .btn-warning, .btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); } + .btn-default:active, .btn-primary:active, .btn-success:active, @@ -26,322 +27,373 @@ .btn-info.active, .btn-warning.active, .btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); } + .btn:active, .btn.active { - background-image: none; + background-image: none; } + .btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #dbdbdb; - border-color: #ccc; + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; } + .btn-default:hover, .btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; + background-color: #e0e0e0; + background-position: 0 -15px; } + .btn-default:active, .btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; + background-color: #e0e0e0; + border-color: #dbdbdb; } + .btn-primary { - background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #2b669a; + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #2b669a; } + .btn-primary:hover, .btn-primary:focus { - background-color: #2d6ca2; - background-position: 0 -15px; + background-color: #2d6ca2; + background-position: 0 -15px; } + .btn-primary:active, .btn-primary.active { - background-color: #2d6ca2; - border-color: #2b669a; + background-color: #2d6ca2; + border-color: #2b669a; } + .btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #3e8f3e; + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #3e8f3e; } + .btn-success:hover, .btn-success:focus { - background-color: #419641; - background-position: 0 -15px; + background-color: #419641; + background-position: 0 -15px; } + .btn-success:active, .btn-success.active { - background-color: #419641; - border-color: #3e8f3e; + background-color: #419641; + border-color: #3e8f3e; } + .btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #28a4c9; + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #28a4c9; } + .btn-info:hover, .btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; + background-color: #2aabd2; + background-position: 0 -15px; } + .btn-info:active, .btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; + background-color: #2aabd2; + border-color: #28a4c9; } + .btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #e38d13; + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #e38d13; } + .btn-warning:hover, .btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; + background-color: #eb9316; + background-position: 0 -15px; } + .btn-warning:active, .btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; + background-color: #eb9316; + border-color: #e38d13; } + .btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #b92c28; + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #b92c28; } + .btn-danger:hover, .btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; + background-color: #c12e2a; + background-position: 0 -15px; } + .btn-danger:active, .btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; + background-color: #c12e2a; + border-color: #b92c28; } + .thumbnail, .img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); } + .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - background-color: #e8e8e8; - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; } + .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - background-color: #357ebd; - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); - background-repeat: repeat-x; + background-color: #357ebd; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; } + .navbar-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); } + .navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); } + .navbar-brand, .navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, .25); + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); } + .navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; } + .navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); - background-image: linear-gradient(to bottom, #222 0%, #282828 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); } + .navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); } + .navbar-static-top, .navbar-fixed-top, .navbar-fixed-bottom { - border-radius: 0; + border-radius: 0; } + .alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); } + .alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); - background-repeat: repeat-x; - border-color: #b2dba1; + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; } + .alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); - background-repeat: repeat-x; - border-color: #9acfea; + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; } + .alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); - background-repeat: repeat-x; - border-color: #f5e79e; + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; } + .alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); - background-repeat: repeat-x; - border-color: #dca7a7; + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; } + .progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; } + .progress-bar { - background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; } + .progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; } + .progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; } + .progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; } + .progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; } + .list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); } + .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { - text-shadow: 0 -1px 0 #3071a9; - background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); - background-repeat: repeat-x; - border-color: #3278b3; + text-shadow: 0 -1px 0 #3071a9; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + background-repeat: repeat-x; + border-color: #3278b3; } + .panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); } + .panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; } + .panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; } + .panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; } + .panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; } + .panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; } + .panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; } + .well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); } + /*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css index 4e3da79..7a224ee 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css +++ b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css @@ -6,13 +6,15 @@ /*! normalize.css v3.0.0 | MIT License | git.io/normalize */ html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; } + body { - margin: 0; + margin: 0; } + article, aside, details, @@ -25,331 +27,403 @@ main, nav, section, summary { - display: block; + display: block; } + audio, canvas, progress, video { - display: inline-block; - vertical-align: baseline; + display: inline-block; + vertical-align: baseline; } + audio:not([controls]) { - display: none; - height: 0; + display: none; + height: 0; } + [hidden], template { - display: none; + display: none; } + a { - background: transparent; + background: transparent; } + a:active, a:hover { - outline: 0; + outline: 0; } + abbr[title] { - border-bottom: 1px dotted; + border-bottom: 1px dotted; } + b, strong { - font-weight: bold; + font-weight: bold; } + dfn { - font-style: italic; + font-style: italic; } + h1 { - margin: .67em 0; - font-size: 2em; + margin: .67em 0; + font-size: 2em; } + mark { - color: #000; - background: #ff0; + color: #000; + background: #ff0; } + small { - font-size: 80%; + font-size: 80%; } + sub, sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + sup { - top: -.5em; + top: -.5em; } + sub { - bottom: -.25em; + bottom: -.25em; } + img { - border: 0; + border: 0; } + svg:not(:root) { - overflow: hidden; + overflow: hidden; } + figure { - margin: 1em 40px; + margin: 1em 40px; } + hr { - height: 0; - -moz-box-sizing: content-box; - box-sizing: content-box; + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; } + pre { - overflow: auto; + overflow: auto; } + code, kbd, pre, samp { - font-family: monospace, monospace; - font-size: 1em; + font-family: monospace, monospace; + font-size: 1em; } + button, input, optgroup, select, textarea { - margin: 0; - font: inherit; - color: inherit; + margin: 0; + font: inherit; + color: inherit; } + button { - overflow: visible; + overflow: visible; } + button, select { - text-transform: none; + text-transform: none; } + button, html input[type="button"], input[type="reset"], input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; + -webkit-appearance: button; + cursor: pointer; } + button[disabled], html input[disabled] { - cursor: default; + cursor: default; } + button::-moz-focus-inner, input::-moz-focus-inner { - padding: 0; - border: 0; + padding: 0; + border: 0; } + input { - line-height: normal; + line-height: normal; } + input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; - padding: 0; + box-sizing: border-box; + padding: 0; } + input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { - height: auto; + height: auto; } + input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; } + input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; + -webkit-appearance: none; } + fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid #c0c0c0; + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; } + legend { - padding: 0; - border: 0; + padding: 0; + border: 0; } + textarea { - overflow: auto; + overflow: auto; } + optgroup { - font-weight: bold; + font-weight: bold; } + table { - border-spacing: 0; - border-collapse: collapse; + border-spacing: 0; + border-collapse: collapse; } + td, th { - padding: 0; + padding: 0; } + @media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - select { - background: #fff !important; - } - .navbar { - display: none; - } - .table td, - .table th { - background-color: #fff !important; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + + thead { + display: table-header-group; + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } + + select { + background: #fff !important; + } + + .navbar { + display: none; + } + + .table td, + .table th { + background-color: #fff !important; + } + + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + + .label { + border: 1px solid #000; + } + + .table { + border-collapse: collapse !important; + } + + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } } + * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + *:before, *:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + html { - font-size: 62.5%; + font-size: 62.5%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333; - background-color: #fff; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; } + input, button, select, textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + a { - color: #428bca; - text-decoration: none; + color: #428bca; + text-decoration: none; } + a:hover, a:focus { - color: #2a6496; - text-decoration: underline; + color: #2a6496; + text-decoration: underline; } + a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } + figure { - margin: 0; + margin: 0; } + img { - vertical-align: middle; + vertical-align: middle; } + .img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; + display: block; + max-width: 100%; + height: auto; } + .img-rounded { - border-radius: 6px; + border-radius: 6px; } + .img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; } + .img-circle { - border-radius: 50%; + border-radius: 50%; } + hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; } + .sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + h1, h2, h3, @@ -362,11 +436,12 @@ h6, .h4, .h5, .h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; } + h1 small, h2 small, h3 small, @@ -391,19 +466,21 @@ h6 .small, .h4 .small, .h5 .small, .h6 .small { - font-weight: normal; - line-height: 1; - color: #999; + font-weight: normal; + line-height: 1; + color: #999; } + h1, .h1, h2, .h2, h3, .h3 { - margin-top: 20px; - margin-bottom: 10px; + margin-top: 20px; + margin-bottom: 10px; } + h1 small, .h1 small, h2 small, @@ -416,17 +493,19 @@ h2 .small, .h2 .small, h3 .small, .h3 .small { - font-size: 65%; + font-size: 65%; } + h4, .h4, h5, .h5, h6, .h6 { - margin-top: 10px; - margin-bottom: 10px; + margin-top: 10px; + margin-bottom: 10px; } + h4 small, .h4 small, h5 small, @@ -439,1049 +518,1346 @@ h5 .small, .h5 .small, h6 .small, .h6 .small { - font-size: 75%; + font-size: 75%; } + h1, .h1 { - font-size: 36px; + font-size: 36px; } + h2, .h2 { - font-size: 30px; + font-size: 30px; } + h3, .h3 { - font-size: 24px; + font-size: 24px; } + h4, .h4 { - font-size: 18px; + font-size: 18px; } + h5, .h5 { - font-size: 14px; + font-size: 14px; } + h6, .h6 { - font-size: 12px; + font-size: 12px; } + p { - margin: 0 0 10px; + margin: 0 0 10px; } + .lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 200; - line-height: 1.4; + margin-bottom: 20px; + font-size: 16px; + font-weight: 200; + line-height: 1.4; } + @media (min-width: 768px) { - .lead { - font-size: 21px; - } + .lead { + font-size: 21px; + } } + small, .small { - font-size: 85%; + font-size: 85%; } + cite { - font-style: normal; + font-style: normal; } + .text-left { - text-align: left; + text-align: left; } + .text-right { - text-align: right; + text-align: right; } + .text-center { - text-align: center; + text-align: center; } + .text-justify { - text-align: justify; + text-align: justify; } + .text-muted { - color: #999; + color: #999; } + .text-primary { - color: #428bca; + color: #428bca; } + a.text-primary:hover { - color: #3071a9; + color: #3071a9; } + .text-success { - color: #3c763d; + color: #3c763d; } + a.text-success:hover { - color: #2b542c; + color: #2b542c; } + .text-info { - color: #31708f; + color: #31708f; } + a.text-info:hover { - color: #245269; + color: #245269; } + .text-warning { - color: #8a6d3b; + color: #8a6d3b; } + a.text-warning:hover { - color: #66512c; + color: #66512c; } + .text-danger { - color: #a94442; + color: #a94442; } + a.text-danger:hover { - color: #843534; + color: #843534; } + .bg-primary { - color: #fff; - background-color: #428bca; + color: #fff; + background-color: #428bca; } + a.bg-primary:hover { - background-color: #3071a9; + background-color: #3071a9; } + .bg-success { - background-color: #dff0d8; + background-color: #dff0d8; } + a.bg-success:hover { - background-color: #c1e2b3; + background-color: #c1e2b3; } + .bg-info { - background-color: #d9edf7; + background-color: #d9edf7; } + a.bg-info:hover { - background-color: #afd9ee; + background-color: #afd9ee; } + .bg-warning { - background-color: #fcf8e3; + background-color: #fcf8e3; } + a.bg-warning:hover { - background-color: #f7ecb5; + background-color: #f7ecb5; } + .bg-danger { - background-color: #f2dede; + background-color: #f2dede; } + a.bg-danger:hover { - background-color: #e4b9b9; + background-color: #e4b9b9; } + .page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; } + ul, ol { - margin-top: 0; - margin-bottom: 10px; + margin-top: 0; + margin-bottom: 10px; } + ul ul, ol ul, ul ol, ol ol { - margin-bottom: 0; + margin-bottom: 0; } + .list-unstyled { - padding-left: 0; - list-style: none; + padding-left: 0; + list-style: none; } + .list-inline { - padding-left: 0; - margin-left: -5px; - list-style: none; + padding-left: 0; + margin-left: -5px; + list-style: none; } + .list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; + display: inline-block; + padding-right: 5px; + padding-left: 5px; } + dl { - margin-top: 0; - margin-bottom: 20px; + margin-top: 0; + margin-bottom: 20px; } + dt, dd { - line-height: 1.42857143; + line-height: 1.42857143; } + dt { - font-weight: bold; + font-weight: bold; } + dd { - margin-left: 0; + margin-left: 0; } + @media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + + .dl-horizontal dd { + margin-left: 180px; + } } + abbr[title], abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999; + cursor: help; + border-bottom: 1px dotted #999; } + .initialism { - font-size: 90%; - text-transform: uppercase; + font-size: 90%; + text-transform: uppercase; } + blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; } + blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child { - margin-bottom: 0; + margin-bottom: 0; } + blockquote footer, blockquote small, blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #999; + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #999; } + blockquote footer:before, blockquote small:before, blockquote .small:before { - content: '\2014 \00A0'; + content: '\2014 \00A0'; } + .blockquote-reverse, blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0; + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; } + .blockquote-reverse footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before { - content: ''; + content: ''; } + .blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small:after, blockquote.pull-right .small:after { - content: '\00A0 \2014'; + content: '\00A0 \2014'; } + blockquote:before, blockquote:after { - content: ""; + content: ""; } + address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; } + code, kbd, pre, samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; } + code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - white-space: nowrap; - background-color: #f9f2f4; - border-radius: 4px; + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; } + kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); } + pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; } + pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; } + .pre-scrollable { - max-height: 340px; - overflow-y: scroll; + max-height: 340px; + overflow-y: scroll; } + .container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + @media (min-width: 768px) { - .container { - width: 750px; - } + .container { + width: 750px; + } } + @media (min-width: 992px) { - .container { - width: 970px; - } + .container { + width: 970px; + } } + @media (min-width: 1200px) { - .container { - width: 1170px; - } + .container { + width: 1170px; + } } + .container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + .row { - margin-right: -15px; - margin-left: -15px; + margin-right: -15px; + margin-left: -15px; } + .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; } + .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; + float: left; } + .col-xs-12 { - width: 100%; + width: 100%; } + .col-xs-11 { - width: 91.66666667%; + width: 91.66666667%; } + .col-xs-10 { - width: 83.33333333%; + width: 83.33333333%; } + .col-xs-9 { - width: 75%; + width: 75%; } + .col-xs-8 { - width: 66.66666667%; + width: 66.66666667%; } + .col-xs-7 { - width: 58.33333333%; + width: 58.33333333%; } + .col-xs-6 { - width: 50%; + width: 50%; } + .col-xs-5 { - width: 41.66666667%; + width: 41.66666667%; } + .col-xs-4 { - width: 33.33333333%; + width: 33.33333333%; } + .col-xs-3 { - width: 25%; + width: 25%; } + .col-xs-2 { - width: 16.66666667%; + width: 16.66666667%; } + .col-xs-1 { - width: 8.33333333%; + width: 8.33333333%; } + .col-xs-pull-12 { - right: 100%; + right: 100%; } + .col-xs-pull-11 { - right: 91.66666667%; + right: 91.66666667%; } + .col-xs-pull-10 { - right: 83.33333333%; + right: 83.33333333%; } + .col-xs-pull-9 { - right: 75%; + right: 75%; } + .col-xs-pull-8 { - right: 66.66666667%; + right: 66.66666667%; } + .col-xs-pull-7 { - right: 58.33333333%; + right: 58.33333333%; } + .col-xs-pull-6 { - right: 50%; + right: 50%; } + .col-xs-pull-5 { - right: 41.66666667%; + right: 41.66666667%; } + .col-xs-pull-4 { - right: 33.33333333%; + right: 33.33333333%; } + .col-xs-pull-3 { - right: 25%; + right: 25%; } + .col-xs-pull-2 { - right: 16.66666667%; + right: 16.66666667%; } + .col-xs-pull-1 { - right: 8.33333333%; + right: 8.33333333%; } + .col-xs-pull-0 { - right: 0; + right: 0; } + .col-xs-push-12 { - left: 100%; + left: 100%; } + .col-xs-push-11 { - left: 91.66666667%; + left: 91.66666667%; } + .col-xs-push-10 { - left: 83.33333333%; + left: 83.33333333%; } + .col-xs-push-9 { - left: 75%; + left: 75%; } + .col-xs-push-8 { - left: 66.66666667%; + left: 66.66666667%; } + .col-xs-push-7 { - left: 58.33333333%; + left: 58.33333333%; } + .col-xs-push-6 { - left: 50%; + left: 50%; } + .col-xs-push-5 { - left: 41.66666667%; + left: 41.66666667%; } + .col-xs-push-4 { - left: 33.33333333%; + left: 33.33333333%; } + .col-xs-push-3 { - left: 25%; + left: 25%; } + .col-xs-push-2 { - left: 16.66666667%; + left: 16.66666667%; } + .col-xs-push-1 { - left: 8.33333333%; + left: 8.33333333%; } + .col-xs-push-0 { - left: 0; + left: 0; } + .col-xs-offset-12 { - margin-left: 100%; + margin-left: 100%; } + .col-xs-offset-11 { - margin-left: 91.66666667%; + margin-left: 91.66666667%; } + .col-xs-offset-10 { - margin-left: 83.33333333%; + margin-left: 83.33333333%; } + .col-xs-offset-9 { - margin-left: 75%; + margin-left: 75%; } + .col-xs-offset-8 { - margin-left: 66.66666667%; + margin-left: 66.66666667%; } + .col-xs-offset-7 { - margin-left: 58.33333333%; + margin-left: 58.33333333%; } + .col-xs-offset-6 { - margin-left: 50%; + margin-left: 50%; } + .col-xs-offset-5 { - margin-left: 41.66666667%; + margin-left: 41.66666667%; } + .col-xs-offset-4 { - margin-left: 33.33333333%; + margin-left: 33.33333333%; } + .col-xs-offset-3 { - margin-left: 25%; + margin-left: 25%; } + .col-xs-offset-2 { - margin-left: 16.66666667%; + margin-left: 16.66666667%; } + .col-xs-offset-1 { - margin-left: 8.33333333%; + margin-left: 8.33333333%; } + .col-xs-offset-0 { - margin-left: 0; + margin-left: 0; } + @media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: 0; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: 0; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0; - } + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + + .col-sm-12 { + width: 100%; + } + + .col-sm-11 { + width: 91.66666667%; + } + + .col-sm-10 { + width: 83.33333333%; + } + + .col-sm-9 { + width: 75%; + } + + .col-sm-8 { + width: 66.66666667%; + } + + .col-sm-7 { + width: 58.33333333%; + } + + .col-sm-6 { + width: 50%; + } + + .col-sm-5 { + width: 41.66666667%; + } + + .col-sm-4 { + width: 33.33333333%; + } + + .col-sm-3 { + width: 25%; + } + + .col-sm-2 { + width: 16.66666667%; + } + + .col-sm-1 { + width: 8.33333333%; + } + + .col-sm-pull-12 { + right: 100%; + } + + .col-sm-pull-11 { + right: 91.66666667%; + } + + .col-sm-pull-10 { + right: 83.33333333%; + } + + .col-sm-pull-9 { + right: 75%; + } + + .col-sm-pull-8 { + right: 66.66666667%; + } + + .col-sm-pull-7 { + right: 58.33333333%; + } + + .col-sm-pull-6 { + right: 50%; + } + + .col-sm-pull-5 { + right: 41.66666667%; + } + + .col-sm-pull-4 { + right: 33.33333333%; + } + + .col-sm-pull-3 { + right: 25%; + } + + .col-sm-pull-2 { + right: 16.66666667%; + } + + .col-sm-pull-1 { + right: 8.33333333%; + } + + .col-sm-pull-0 { + right: 0; + } + + .col-sm-push-12 { + left: 100%; + } + + .col-sm-push-11 { + left: 91.66666667%; + } + + .col-sm-push-10 { + left: 83.33333333%; + } + + .col-sm-push-9 { + left: 75%; + } + + .col-sm-push-8 { + left: 66.66666667%; + } + + .col-sm-push-7 { + left: 58.33333333%; + } + + .col-sm-push-6 { + left: 50%; + } + + .col-sm-push-5 { + left: 41.66666667%; + } + + .col-sm-push-4 { + left: 33.33333333%; + } + + .col-sm-push-3 { + left: 25%; + } + + .col-sm-push-2 { + left: 16.66666667%; + } + + .col-sm-push-1 { + left: 8.33333333%; + } + + .col-sm-push-0 { + left: 0; + } + + .col-sm-offset-12 { + margin-left: 100%; + } + + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + + .col-sm-offset-9 { + margin-left: 75%; + } + + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + + .col-sm-offset-6 { + margin-left: 50%; + } + + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + + .col-sm-offset-3 { + margin-left: 25%; + } + + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + + .col-sm-offset-0 { + margin-left: 0; + } } + @media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: 0; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: 0; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0; - } + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + + .col-md-12 { + width: 100%; + } + + .col-md-11 { + width: 91.66666667%; + } + + .col-md-10 { + width: 83.33333333%; + } + + .col-md-9 { + width: 75%; + } + + .col-md-8 { + width: 66.66666667%; + } + + .col-md-7 { + width: 58.33333333%; + } + + .col-md-6 { + width: 50%; + } + + .col-md-5 { + width: 41.66666667%; + } + + .col-md-4 { + width: 33.33333333%; + } + + .col-md-3 { + width: 25%; + } + + .col-md-2 { + width: 16.66666667%; + } + + .col-md-1 { + width: 8.33333333%; + } + + .col-md-pull-12 { + right: 100%; + } + + .col-md-pull-11 { + right: 91.66666667%; + } + + .col-md-pull-10 { + right: 83.33333333%; + } + + .col-md-pull-9 { + right: 75%; + } + + .col-md-pull-8 { + right: 66.66666667%; + } + + .col-md-pull-7 { + right: 58.33333333%; + } + + .col-md-pull-6 { + right: 50%; + } + + .col-md-pull-5 { + right: 41.66666667%; + } + + .col-md-pull-4 { + right: 33.33333333%; + } + + .col-md-pull-3 { + right: 25%; + } + + .col-md-pull-2 { + right: 16.66666667%; + } + + .col-md-pull-1 { + right: 8.33333333%; + } + + .col-md-pull-0 { + right: 0; + } + + .col-md-push-12 { + left: 100%; + } + + .col-md-push-11 { + left: 91.66666667%; + } + + .col-md-push-10 { + left: 83.33333333%; + } + + .col-md-push-9 { + left: 75%; + } + + .col-md-push-8 { + left: 66.66666667%; + } + + .col-md-push-7 { + left: 58.33333333%; + } + + .col-md-push-6 { + left: 50%; + } + + .col-md-push-5 { + left: 41.66666667%; + } + + .col-md-push-4 { + left: 33.33333333%; + } + + .col-md-push-3 { + left: 25%; + } + + .col-md-push-2 { + left: 16.66666667%; + } + + .col-md-push-1 { + left: 8.33333333%; + } + + .col-md-push-0 { + left: 0; + } + + .col-md-offset-12 { + margin-left: 100%; + } + + .col-md-offset-11 { + margin-left: 91.66666667%; + } + + .col-md-offset-10 { + margin-left: 83.33333333%; + } + + .col-md-offset-9 { + margin-left: 75%; + } + + .col-md-offset-8 { + margin-left: 66.66666667%; + } + + .col-md-offset-7 { + margin-left: 58.33333333%; + } + + .col-md-offset-6 { + margin-left: 50%; + } + + .col-md-offset-5 { + margin-left: 41.66666667%; + } + + .col-md-offset-4 { + margin-left: 33.33333333%; + } + + .col-md-offset-3 { + margin-left: 25%; + } + + .col-md-offset-2 { + margin-left: 16.66666667%; + } + + .col-md-offset-1 { + margin-left: 8.33333333%; + } + + .col-md-offset-0 { + margin-left: 0; + } } + @media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: 0; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: 0; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0; - } + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + + .col-lg-12 { + width: 100%; + } + + .col-lg-11 { + width: 91.66666667%; + } + + .col-lg-10 { + width: 83.33333333%; + } + + .col-lg-9 { + width: 75%; + } + + .col-lg-8 { + width: 66.66666667%; + } + + .col-lg-7 { + width: 58.33333333%; + } + + .col-lg-6 { + width: 50%; + } + + .col-lg-5 { + width: 41.66666667%; + } + + .col-lg-4 { + width: 33.33333333%; + } + + .col-lg-3 { + width: 25%; + } + + .col-lg-2 { + width: 16.66666667%; + } + + .col-lg-1 { + width: 8.33333333%; + } + + .col-lg-pull-12 { + right: 100%; + } + + .col-lg-pull-11 { + right: 91.66666667%; + } + + .col-lg-pull-10 { + right: 83.33333333%; + } + + .col-lg-pull-9 { + right: 75%; + } + + .col-lg-pull-8 { + right: 66.66666667%; + } + + .col-lg-pull-7 { + right: 58.33333333%; + } + + .col-lg-pull-6 { + right: 50%; + } + + .col-lg-pull-5 { + right: 41.66666667%; + } + + .col-lg-pull-4 { + right: 33.33333333%; + } + + .col-lg-pull-3 { + right: 25%; + } + + .col-lg-pull-2 { + right: 16.66666667%; + } + + .col-lg-pull-1 { + right: 8.33333333%; + } + + .col-lg-pull-0 { + right: 0; + } + + .col-lg-push-12 { + left: 100%; + } + + .col-lg-push-11 { + left: 91.66666667%; + } + + .col-lg-push-10 { + left: 83.33333333%; + } + + .col-lg-push-9 { + left: 75%; + } + + .col-lg-push-8 { + left: 66.66666667%; + } + + .col-lg-push-7 { + left: 58.33333333%; + } + + .col-lg-push-6 { + left: 50%; + } + + .col-lg-push-5 { + left: 41.66666667%; + } + + .col-lg-push-4 { + left: 33.33333333%; + } + + .col-lg-push-3 { + left: 25%; + } + + .col-lg-push-2 { + left: 16.66666667%; + } + + .col-lg-push-1 { + left: 8.33333333%; + } + + .col-lg-push-0 { + left: 0; + } + + .col-lg-offset-12 { + margin-left: 100%; + } + + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + + .col-lg-offset-9 { + margin-left: 75%; + } + + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + + .col-lg-offset-6 { + margin-left: 50%; + } + + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + + .col-lg-offset-3 { + margin-left: 25%; + } + + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + + .col-lg-offset-0 { + margin-left: 0; + } } + table { - max-width: 100%; - background-color: transparent; + max-width: 100%; + background-color: transparent; } + th { - text-align: left; + text-align: left; } + .table { - width: 100%; - margin-bottom: 20px; + width: 100%; + margin-bottom: 20px; } + .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; } + .table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; + vertical-align: bottom; + border-bottom: 2px solid #ddd; } + .table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td { - border-top: 0; + border-top: 0; } + .table > tbody + tbody { - border-top: 2px solid #ddd; + border-top: 2px solid #ddd; } + .table .table { - background-color: #fff; + background-color: #fff; } + .table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { - padding: 5px; + padding: 5px; } + .table-bordered { - border: 1px solid #ddd; + border: 1px solid #ddd; } + .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { - border: 1px solid #ddd; + border: 1px solid #ddd; } + .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { - border-bottom-width: 2px; + border-bottom-width: 2px; } + .table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; + background-color: #f9f9f9; } + .table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th { - background-color: #f5f5f5; + background-color: #f5f5f5; } + table col[class*="col-"] { - position: static; - display: table-column; - float: none; + position: static; + display: table-column; + float: none; } + table td[class*="col-"], table th[class*="col-"] { - position: static; - display: table-cell; - float: none; + position: static; + display: table-cell; + float: none; } + .table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, @@ -1494,14 +1870,16 @@ table th[class*="col-"] { .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { - background-color: #f5f5f5; + background-color: #f5f5f5; } + .table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; + background-color: #e8e8e8; } + .table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, @@ -1514,14 +1892,16 @@ table th[class*="col-"] { .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { - background-color: #dff0d8; + background-color: #dff0d8; } + .table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; + background-color: #d0e9c6; } + .table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, @@ -1534,14 +1914,16 @@ table th[class*="col-"] { .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { - background-color: #d9edf7; + background-color: #d9edf7; } + .table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; + background-color: #c4e3f3; } + .table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, @@ -1554,14 +1936,16 @@ table th[class*="col-"] { .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { - background-color: #fcf8e3; + background-color: #fcf8e3; } + .table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; + background-color: #faf2cc; } + .table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, @@ -1574,211 +1958,246 @@ table th[class*="col-"] { .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { - background-color: #f2dede; + background-color: #f2dede; } + .table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; + background-color: #ebcccc; } + @media (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + + .table-responsive > .table { + margin-bottom: 0; + } + + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + + .table-responsive > .table-bordered { + border: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } } + fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; } + label { - display: inline-block; - margin-bottom: 5px; - font-weight: bold; + display: inline-block; + margin-bottom: 5px; + font-weight: bold; } + input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + input[type="radio"], input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - /* IE8-9 */ - line-height: normal; + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + line-height: normal; } + input[type="file"] { - display: block; + display: block; } + input[type="range"] { - display: block; - width: 100%; + display: block; + width: 100%; } + select[multiple], select[size] { - height: auto; + height: auto; } + input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } + output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; } + .form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } + .form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); } + .form-control::-moz-placeholder { - color: #999; - opacity: 1; + color: #999; + opacity: 1; } + .form-control:-ms-input-placeholder { - color: #999; + color: #999; } + .form-control::-webkit-input-placeholder { - color: #999; + color: #999; } + .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eee; - opacity: 1; + cursor: not-allowed; + background-color: #eee; + opacity: 1; } + textarea.form-control { - height: auto; + height: auto; } + input[type="search"] { - -webkit-appearance: none; + -webkit-appearance: none; } + input[type="date"] { - line-height: 34px; + line-height: 34px; } + .form-group { - margin-bottom: 15px; + margin-bottom: 15px; } + .radio, .checkbox { - display: block; - min-height: 20px; - padding-left: 20px; - margin-top: 10px; - margin-bottom: 10px; + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; } + .radio label, .checkbox label { - display: inline; - font-weight: normal; - cursor: pointer; + display: inline; + font-weight: normal; + cursor: pointer; } + .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { - float: left; - margin-left: -20px; + float: left; + margin-left: -20px; } + .radio + .radio, .checkbox + .checkbox { - margin-top: -5px; + margin-top: -5px; } + .radio-inline, .checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; } + .radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; + margin-top: 0; + margin-left: 10px; } + input[type="radio"][disabled], input[type="checkbox"][disabled], .radio[disabled], @@ -1791,272 +2210,320 @@ fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline { - cursor: not-allowed; + cursor: not-allowed; } + .input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } + select.input-sm { - height: 30px; - line-height: 30px; + height: 30px; + line-height: 30px; } + textarea.input-sm, select[multiple].input-sm { - height: auto; + height: auto; } + .input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; } + select.input-lg { - height: 46px; - line-height: 46px; + height: 46px; + line-height: 46px; } + textarea.input-lg, select[multiple].input-lg { - height: auto; + height: auto; } + .has-feedback { - position: relative; + position: relative; } + .has-feedback .form-control { - padding-right: 42.5px; + padding-right: 42.5px; } + .has-feedback .form-control-feedback { - position: absolute; - top: 25px; - right: 0; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; + position: absolute; + top: 25px; + right: 0; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; } + .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline { - color: #3c763d; + color: #3c763d; } + .has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } + .has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; } + .has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d; + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; } + .has-success .form-control-feedback { - color: #3c763d; + color: #3c763d; } + .has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline { - color: #8a6d3b; + color: #8a6d3b; } + .has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } + .has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; } + .has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b; + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; } + .has-warning .form-control-feedback { - color: #8a6d3b; + color: #8a6d3b; } + .has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline { - color: #a94442; + color: #a94442; } + .has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } + .has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; } + .has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442; + color: #a94442; + background-color: #f2dede; + border-color: #a94442; } + .has-error .form-control-feedback { - color: #a94442; + color: #a94442; } + .form-control-static { - margin-bottom: 0; + margin-bottom: 0; } + .help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; } + @media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + + .form-inline .input-group > .form-control { + width: 100%; + } + + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } + + .form-inline .has-feedback .form-control-feedback { + top: 0; + } } + .form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; } + .form-horizontal .radio, .form-horizontal .checkbox { - min-height: 27px; + min-height: 27px; } + .form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; + margin-right: -15px; + margin-left: -15px; } + .form-horizontal .form-control-static { - padding-top: 7px; + padding-top: 7px; } + @media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - } + .form-horizontal .control-label { + text-align: right; + } } + .form-horizontal .has-feedback .form-control-feedback { - top: 0; - right: 15px; + top: 0; + right: 15px; } + .btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; } + .btn:focus, .btn:active:focus, .btn.active:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } + .btn:hover, .btn:focus { - color: #333; - text-decoration: none; + color: #333; + text-decoration: none; } + .btn:active, .btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); } + .btn.disabled, .btn[disabled], fieldset[disabled] .btn { - pointer-events: none; - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; } + .btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; + color: #333; + background-color: #fff; + border-color: #ccc; } + .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { - color: #333; - background-color: #ebebeb; - border-color: #adadad; + color: #333; + background-color: #ebebeb; + border-color: #adadad; } + .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { - background-image: none; + background-image: none; } + .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, @@ -2072,32 +2539,37 @@ fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { - background-color: #fff; - border-color: #ccc; + background-color: #fff; + border-color: #ccc; } + .btn-default .badge { - color: #fff; - background-color: #333; + color: #fff; + background-color: #333; } + .btn-primary { - color: #fff; - background-color: #428bca; - border-color: #357ebd; + color: #fff; + background-color: #428bca; + border-color: #357ebd; } + .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { - color: #fff; - background-color: #3276b1; - border-color: #285e8e; + color: #fff; + background-color: #3276b1; + border-color: #285e8e; } + .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { - background-image: none; + background-image: none; } + .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, @@ -2113,32 +2585,37 @@ fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; + background-color: #428bca; + border-color: #357ebd; } + .btn-primary .badge { - color: #428bca; - background-color: #fff; + color: #428bca; + background-color: #fff; } + .btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; } + .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { - color: #fff; - background-color: #47a447; - border-color: #398439; + color: #fff; + background-color: #47a447; + border-color: #398439; } + .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { - background-image: none; + background-image: none; } + .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, @@ -2154,32 +2631,37 @@ fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; + background-color: #5cb85c; + border-color: #4cae4c; } + .btn-success .badge { - color: #5cb85c; - background-color: #fff; + color: #5cb85c; + background-color: #fff; } + .btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; } + .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { - color: #fff; - background-color: #39b3d7; - border-color: #269abc; + color: #fff; + background-color: #39b3d7; + border-color: #269abc; } + .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { - background-image: none; + background-image: none; } + .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, @@ -2195,32 +2677,37 @@ fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; + background-color: #5bc0de; + border-color: #46b8da; } + .btn-info .badge { - color: #5bc0de; - background-color: #fff; + color: #5bc0de; + background-color: #fff; } + .btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; } + .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ed9c28; - border-color: #d58512; + color: #fff; + background-color: #ed9c28; + border-color: #d58512; } + .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { - background-image: none; + background-image: none; } + .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, @@ -2236,32 +2723,37 @@ fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; + background-color: #f0ad4e; + border-color: #eea236; } + .btn-warning .badge { - color: #f0ad4e; - background-color: #fff; + color: #f0ad4e; + background-color: #fff; } + .btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; } + .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { - color: #fff; - background-color: #d2322d; - border-color: #ac2925; + color: #fff; + background-color: #d2322d; + border-color: #ac2925; } + .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { - background-image: none; + background-image: none; } + .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, @@ -2277,868 +2769,1112 @@ fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; + background-color: #d9534f; + border-color: #d43f3a; } + .btn-danger .badge { - color: #d9534f; - background-color: #fff; + color: #d9534f; + background-color: #fff; } + .btn-link { - font-weight: normal; - color: #428bca; - cursor: pointer; - border-radius: 0; + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; } + .btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; } + .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { - border-color: transparent; + border-color: transparent; } + .btn-link:hover, .btn-link:focus { - color: #2a6496; - text-decoration: underline; - background-color: transparent; + color: #2a6496; + text-decoration: underline; + background-color: transparent; } + .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { - color: #999; - text-decoration: none; + color: #999; + text-decoration: none; } + .btn-lg, .btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; } + .btn-sm, .btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } + .btn-xs, .btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } + .btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; } + .btn-block + .btn-block { - margin-top: 5px; + margin-top: 5px; } + input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { - width: 100%; + width: 100%; } + .fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - transition: opacity .15s linear; + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear; } + .fade.in { - opacity: 1; + opacity: 1; } + .collapse { - display: none; + display: none; } + .collapse.in { - display: block; + display: block; } + .collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height .35s ease; - transition: height .35s ease; + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height .35s ease; + transition: height .35s ease; } + @font-face { - font-family: 'Glyphicons Halflings'; + font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); } + .glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .glyphicon-asterisk:before { - content: "\2a"; + content: "\2a"; } + .glyphicon-plus:before { - content: "\2b"; + content: "\2b"; } + .glyphicon-euro:before { - content: "\20ac"; + content: "\20ac"; } + .glyphicon-minus:before { - content: "\2212"; + content: "\2212"; } + .glyphicon-cloud:before { - content: "\2601"; + content: "\2601"; } + .glyphicon-envelope:before { - content: "\2709"; + content: "\2709"; } + .glyphicon-pencil:before { - content: "\270f"; + content: "\270f"; } + .glyphicon-glass:before { - content: "\e001"; + content: "\e001"; } + .glyphicon-music:before { - content: "\e002"; + content: "\e002"; } + .glyphicon-search:before { - content: "\e003"; + content: "\e003"; } + .glyphicon-heart:before { - content: "\e005"; + content: "\e005"; } + .glyphicon-star:before { - content: "\e006"; + content: "\e006"; } + .glyphicon-star-empty:before { - content: "\e007"; + content: "\e007"; } + .glyphicon-user:before { - content: "\e008"; + content: "\e008"; } + .glyphicon-film:before { - content: "\e009"; + content: "\e009"; } + .glyphicon-th-large:before { - content: "\e010"; + content: "\e010"; } + .glyphicon-th:before { - content: "\e011"; + content: "\e011"; } + .glyphicon-th-list:before { - content: "\e012"; + content: "\e012"; } + .glyphicon-ok:before { - content: "\e013"; + content: "\e013"; } + .glyphicon-remove:before { - content: "\e014"; + content: "\e014"; } + .glyphicon-zoom-in:before { - content: "\e015"; + content: "\e015"; } + .glyphicon-zoom-out:before { - content: "\e016"; + content: "\e016"; } + .glyphicon-off:before { - content: "\e017"; + content: "\e017"; } + .glyphicon-signal:before { - content: "\e018"; + content: "\e018"; } + .glyphicon-cog:before { - content: "\e019"; + content: "\e019"; } + .glyphicon-trash:before { - content: "\e020"; + content: "\e020"; } + .glyphicon-home:before { - content: "\e021"; + content: "\e021"; } + .glyphicon-file:before { - content: "\e022"; + content: "\e022"; } + .glyphicon-time:before { - content: "\e023"; + content: "\e023"; } + .glyphicon-road:before { - content: "\e024"; + content: "\e024"; } + .glyphicon-download-alt:before { - content: "\e025"; + content: "\e025"; } + .glyphicon-download:before { - content: "\e026"; + content: "\e026"; } + .glyphicon-upload:before { - content: "\e027"; + content: "\e027"; } + .glyphicon-inbox:before { - content: "\e028"; + content: "\e028"; } + .glyphicon-play-circle:before { - content: "\e029"; + content: "\e029"; } + .glyphicon-repeat:before { - content: "\e030"; + content: "\e030"; } + .glyphicon-refresh:before { - content: "\e031"; + content: "\e031"; } + .glyphicon-list-alt:before { - content: "\e032"; + content: "\e032"; } + .glyphicon-lock:before { - content: "\e033"; + content: "\e033"; } + .glyphicon-flag:before { - content: "\e034"; + content: "\e034"; } + .glyphicon-headphones:before { - content: "\e035"; + content: "\e035"; } + .glyphicon-volume-off:before { - content: "\e036"; + content: "\e036"; } + .glyphicon-volume-down:before { - content: "\e037"; + content: "\e037"; } + .glyphicon-volume-up:before { - content: "\e038"; + content: "\e038"; } + .glyphicon-qrcode:before { - content: "\e039"; + content: "\e039"; } + .glyphicon-barcode:before { - content: "\e040"; + content: "\e040"; } + .glyphicon-tag:before { - content: "\e041"; + content: "\e041"; } + .glyphicon-tags:before { - content: "\e042"; + content: "\e042"; } + .glyphicon-book:before { - content: "\e043"; + content: "\e043"; } + .glyphicon-bookmark:before { - content: "\e044"; + content: "\e044"; } + .glyphicon-print:before { - content: "\e045"; + content: "\e045"; } + .glyphicon-camera:before { - content: "\e046"; + content: "\e046"; } + .glyphicon-font:before { - content: "\e047"; + content: "\e047"; } + .glyphicon-bold:before { - content: "\e048"; + content: "\e048"; } + .glyphicon-italic:before { - content: "\e049"; + content: "\e049"; } + .glyphicon-text-height:before { - content: "\e050"; + content: "\e050"; } + .glyphicon-text-width:before { - content: "\e051"; + content: "\e051"; } + .glyphicon-align-left:before { - content: "\e052"; + content: "\e052"; } + .glyphicon-align-center:before { - content: "\e053"; + content: "\e053"; } + .glyphicon-align-right:before { - content: "\e054"; + content: "\e054"; } + .glyphicon-align-justify:before { - content: "\e055"; + content: "\e055"; } + .glyphicon-list:before { - content: "\e056"; + content: "\e056"; } + .glyphicon-indent-left:before { - content: "\e057"; + content: "\e057"; } + .glyphicon-indent-right:before { - content: "\e058"; + content: "\e058"; } + .glyphicon-facetime-video:before { - content: "\e059"; + content: "\e059"; } + .glyphicon-picture:before { - content: "\e060"; + content: "\e060"; } + .glyphicon-map-marker:before { - content: "\e062"; + content: "\e062"; } + .glyphicon-adjust:before { - content: "\e063"; + content: "\e063"; } + .glyphicon-tint:before { - content: "\e064"; + content: "\e064"; } + .glyphicon-edit:before { - content: "\e065"; + content: "\e065"; } + .glyphicon-share:before { - content: "\e066"; + content: "\e066"; } + .glyphicon-check:before { - content: "\e067"; + content: "\e067"; } + .glyphicon-move:before { - content: "\e068"; + content: "\e068"; } + .glyphicon-step-backward:before { - content: "\e069"; + content: "\e069"; } + .glyphicon-fast-backward:before { - content: "\e070"; + content: "\e070"; } + .glyphicon-backward:before { - content: "\e071"; + content: "\e071"; } + .glyphicon-play:before { - content: "\e072"; + content: "\e072"; } + .glyphicon-pause:before { - content: "\e073"; + content: "\e073"; } + .glyphicon-stop:before { - content: "\e074"; + content: "\e074"; } + .glyphicon-forward:before { - content: "\e075"; + content: "\e075"; } + .glyphicon-fast-forward:before { - content: "\e076"; + content: "\e076"; } + .glyphicon-step-forward:before { - content: "\e077"; + content: "\e077"; } + .glyphicon-eject:before { - content: "\e078"; + content: "\e078"; } + .glyphicon-chevron-left:before { - content: "\e079"; + content: "\e079"; } + .glyphicon-chevron-right:before { - content: "\e080"; + content: "\e080"; } + .glyphicon-plus-sign:before { - content: "\e081"; + content: "\e081"; } + .glyphicon-minus-sign:before { - content: "\e082"; + content: "\e082"; } + .glyphicon-remove-sign:before { - content: "\e083"; + content: "\e083"; } + .glyphicon-ok-sign:before { - content: "\e084"; + content: "\e084"; } + .glyphicon-question-sign:before { - content: "\e085"; + content: "\e085"; } + .glyphicon-info-sign:before { - content: "\e086"; + content: "\e086"; } + .glyphicon-screenshot:before { - content: "\e087"; + content: "\e087"; } + .glyphicon-remove-circle:before { - content: "\e088"; + content: "\e088"; } + .glyphicon-ok-circle:before { - content: "\e089"; + content: "\e089"; } + .glyphicon-ban-circle:before { - content: "\e090"; + content: "\e090"; } + .glyphicon-arrow-left:before { - content: "\e091"; + content: "\e091"; } + .glyphicon-arrow-right:before { - content: "\e092"; + content: "\e092"; } + .glyphicon-arrow-up:before { - content: "\e093"; + content: "\e093"; } + .glyphicon-arrow-down:before { - content: "\e094"; + content: "\e094"; } + .glyphicon-share-alt:before { - content: "\e095"; + content: "\e095"; } + .glyphicon-resize-full:before { - content: "\e096"; + content: "\e096"; } + .glyphicon-resize-small:before { - content: "\e097"; + content: "\e097"; } + .glyphicon-exclamation-sign:before { - content: "\e101"; + content: "\e101"; } + .glyphicon-gift:before { - content: "\e102"; + content: "\e102"; } + .glyphicon-leaf:before { - content: "\e103"; + content: "\e103"; } + .glyphicon-fire:before { - content: "\e104"; + content: "\e104"; } + .glyphicon-eye-open:before { - content: "\e105"; + content: "\e105"; } + .glyphicon-eye-close:before { - content: "\e106"; + content: "\e106"; } + .glyphicon-warning-sign:before { - content: "\e107"; + content: "\e107"; } + .glyphicon-plane:before { - content: "\e108"; + content: "\e108"; } + .glyphicon-calendar:before { - content: "\e109"; + content: "\e109"; } + .glyphicon-random:before { - content: "\e110"; + content: "\e110"; } + .glyphicon-comment:before { - content: "\e111"; + content: "\e111"; } + .glyphicon-magnet:before { - content: "\e112"; + content: "\e112"; } + .glyphicon-chevron-up:before { - content: "\e113"; + content: "\e113"; } + .glyphicon-chevron-down:before { - content: "\e114"; + content: "\e114"; } + .glyphicon-retweet:before { - content: "\e115"; + content: "\e115"; } + .glyphicon-shopping-cart:before { - content: "\e116"; + content: "\e116"; } + .glyphicon-folder-close:before { - content: "\e117"; + content: "\e117"; } + .glyphicon-folder-open:before { - content: "\e118"; + content: "\e118"; } + .glyphicon-resize-vertical:before { - content: "\e119"; + content: "\e119"; } + .glyphicon-resize-horizontal:before { - content: "\e120"; + content: "\e120"; } + .glyphicon-hdd:before { - content: "\e121"; + content: "\e121"; } + .glyphicon-bullhorn:before { - content: "\e122"; + content: "\e122"; } + .glyphicon-bell:before { - content: "\e123"; + content: "\e123"; } + .glyphicon-certificate:before { - content: "\e124"; + content: "\e124"; } + .glyphicon-thumbs-up:before { - content: "\e125"; + content: "\e125"; } + .glyphicon-thumbs-down:before { - content: "\e126"; + content: "\e126"; } + .glyphicon-hand-right:before { - content: "\e127"; + content: "\e127"; } + .glyphicon-hand-left:before { - content: "\e128"; + content: "\e128"; } + .glyphicon-hand-up:before { - content: "\e129"; + content: "\e129"; } + .glyphicon-hand-down:before { - content: "\e130"; + content: "\e130"; } + .glyphicon-circle-arrow-right:before { - content: "\e131"; + content: "\e131"; } + .glyphicon-circle-arrow-left:before { - content: "\e132"; + content: "\e132"; } + .glyphicon-circle-arrow-up:before { - content: "\e133"; + content: "\e133"; } + .glyphicon-circle-arrow-down:before { - content: "\e134"; + content: "\e134"; } + .glyphicon-globe:before { - content: "\e135"; + content: "\e135"; } + .glyphicon-wrench:before { - content: "\e136"; + content: "\e136"; } + .glyphicon-tasks:before { - content: "\e137"; + content: "\e137"; } + .glyphicon-filter:before { - content: "\e138"; + content: "\e138"; } + .glyphicon-briefcase:before { - content: "\e139"; + content: "\e139"; } + .glyphicon-fullscreen:before { - content: "\e140"; + content: "\e140"; } + .glyphicon-dashboard:before { - content: "\e141"; + content: "\e141"; } + .glyphicon-paperclip:before { - content: "\e142"; + content: "\e142"; } + .glyphicon-heart-empty:before { - content: "\e143"; + content: "\e143"; } + .glyphicon-link:before { - content: "\e144"; + content: "\e144"; } + .glyphicon-phone:before { - content: "\e145"; + content: "\e145"; } + .glyphicon-pushpin:before { - content: "\e146"; + content: "\e146"; } + .glyphicon-usd:before { - content: "\e148"; + content: "\e148"; } + .glyphicon-gbp:before { - content: "\e149"; + content: "\e149"; } + .glyphicon-sort:before { - content: "\e150"; + content: "\e150"; } + .glyphicon-sort-by-alphabet:before { - content: "\e151"; + content: "\e151"; } + .glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; + content: "\e152"; } + .glyphicon-sort-by-order:before { - content: "\e153"; + content: "\e153"; } + .glyphicon-sort-by-order-alt:before { - content: "\e154"; + content: "\e154"; } + .glyphicon-sort-by-attributes:before { - content: "\e155"; + content: "\e155"; } + .glyphicon-sort-by-attributes-alt:before { - content: "\e156"; + content: "\e156"; } + .glyphicon-unchecked:before { - content: "\e157"; + content: "\e157"; } + .glyphicon-expand:before { - content: "\e158"; + content: "\e158"; } + .glyphicon-collapse-down:before { - content: "\e159"; + content: "\e159"; } + .glyphicon-collapse-up:before { - content: "\e160"; + content: "\e160"; } + .glyphicon-log-in:before { - content: "\e161"; + content: "\e161"; } + .glyphicon-flash:before { - content: "\e162"; + content: "\e162"; } + .glyphicon-log-out:before { - content: "\e163"; + content: "\e163"; } + .glyphicon-new-window:before { - content: "\e164"; + content: "\e164"; } + .glyphicon-record:before { - content: "\e165"; + content: "\e165"; } + .glyphicon-save:before { - content: "\e166"; + content: "\e166"; } + .glyphicon-open:before { - content: "\e167"; + content: "\e167"; } + .glyphicon-saved:before { - content: "\e168"; + content: "\e168"; } + .glyphicon-import:before { - content: "\e169"; + content: "\e169"; } + .glyphicon-export:before { - content: "\e170"; + content: "\e170"; } + .glyphicon-send:before { - content: "\e171"; + content: "\e171"; } + .glyphicon-floppy-disk:before { - content: "\e172"; + content: "\e172"; } + .glyphicon-floppy-saved:before { - content: "\e173"; + content: "\e173"; } + .glyphicon-floppy-remove:before { - content: "\e174"; + content: "\e174"; } + .glyphicon-floppy-save:before { - content: "\e175"; + content: "\e175"; } + .glyphicon-floppy-open:before { - content: "\e176"; + content: "\e176"; } + .glyphicon-credit-card:before { - content: "\e177"; + content: "\e177"; } + .glyphicon-transfer:before { - content: "\e178"; + content: "\e178"; } + .glyphicon-cutlery:before { - content: "\e179"; + content: "\e179"; } + .glyphicon-header:before { - content: "\e180"; + content: "\e180"; } + .glyphicon-compressed:before { - content: "\e181"; + content: "\e181"; } + .glyphicon-earphone:before { - content: "\e182"; + content: "\e182"; } + .glyphicon-phone-alt:before { - content: "\e183"; + content: "\e183"; } + .glyphicon-tower:before { - content: "\e184"; + content: "\e184"; } + .glyphicon-stats:before { - content: "\e185"; + content: "\e185"; } + .glyphicon-sd-video:before { - content: "\e186"; + content: "\e186"; } + .glyphicon-hd-video:before { - content: "\e187"; + content: "\e187"; } + .glyphicon-subtitles:before { - content: "\e188"; + content: "\e188"; } + .glyphicon-sound-stereo:before { - content: "\e189"; + content: "\e189"; } + .glyphicon-sound-dolby:before { - content: "\e190"; + content: "\e190"; } + .glyphicon-sound-5-1:before { - content: "\e191"; + content: "\e191"; } + .glyphicon-sound-6-1:before { - content: "\e192"; + content: "\e192"; } + .glyphicon-sound-7-1:before { - content: "\e193"; + content: "\e193"; } + .glyphicon-copyright-mark:before { - content: "\e194"; + content: "\e194"; } + .glyphicon-registration-mark:before { - content: "\e195"; + content: "\e195"; } + .glyphicon-cloud-download:before { - content: "\e197"; + content: "\e197"; } + .glyphicon-cloud-upload:before { - content: "\e198"; + content: "\e198"; } + .glyphicon-tree-conifer:before { - content: "\e199"; + content: "\e199"; } + .glyphicon-tree-deciduous:before { - content: "\e200"; + content: "\e200"; } + .caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px solid; - border-right: 4px solid transparent; - border-left: 4px solid transparent; + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; } + .dropdown { - position: relative; + position: relative; } + .dropdown-toggle:focus { - outline: 0; + outline: 0; } + .dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); } + .dropdown-menu.pull-right { - right: 0; - left: auto; + right: 0; + left: auto; } + .dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; } + .dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333; - white-space: nowrap; + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; } + .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - color: #262626; - text-decoration: none; - background-color: #f5f5f5; + color: #262626; + text-decoration: none; + background-color: #f5f5f5; } + .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - background-color: #428bca; - outline: 0; + color: #fff; + text-decoration: none; + background-color: #428bca; + outline: 0; } + .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: #999; + color: #999; } + .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } + .open > .dropdown-menu { - display: block; + display: block; } + .open > a { - outline: 0; + outline: 0; } + .dropdown-menu-right { - right: 0; - left: auto; + right: 0; + left: auto; } + .dropdown-menu-left { - right: auto; - left: 0; + right: auto; + left: 0; } + .dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #999; + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #999; } + .dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; } + .pull-right > .dropdown-menu { - right: 0; - left: auto; + right: 0; + left: auto; } + .dropup .caret, .navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px solid; + content: ""; + border-top: 0; + border-bottom: 4px solid; } + .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; + top: auto; + bottom: 100%; + margin-bottom: 1px; } + @media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } } + .btn-group, .btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; + position: relative; + display: inline-block; + vertical-align: middle; } + .btn-group > .btn, .btn-group-vertical > .btn { - position: relative; - float: left; + position: relative; + float: left; } + .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, @@ -3147,256 +3883,307 @@ input[type="button"].btn-block { .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { - z-index: 2; + z-index: 2; } + .btn-group > .btn:focus, .btn-group-vertical > .btn:focus { - outline: none; + outline: none; } + .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { - margin-left: -1px; + margin-left: -1px; } + .btn-toolbar { - margin-left: -5px; + margin-left: -5px; } + .btn-toolbar .btn-group, .btn-toolbar .input-group { - float: left; + float: left; } + .btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group { - margin-left: 5px; + margin-left: 5px; } + .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; + border-radius: 0; } + .btn-group > .btn:first-child { - margin-left: 0; + margin-left: 0; } + .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .btn-group > .btn-group { - float: left; + float: left; } + .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; + border-radius: 0; } + .btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .btn-group > .btn-group:last-child > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { - outline: 0; + outline: 0; } + .btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; + padding-right: 8px; + padding-left: 8px; } + .btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; + padding-right: 12px; + padding-left: 12px; } + .btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); } + .btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .btn .caret { - margin-left: 0; + margin-left: 0; } + .btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; + border-width: 5px 5px 0; + border-bottom-width: 0; } + .dropup .btn-lg .caret { - border-width: 0 5px 5px; + border-width: 0 5px 5px; } + .btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; + display: block; + float: none; + width: 100%; + max-width: 100%; } + .btn-group-vertical > .btn-group > .btn { - float: none; + float: none; } + .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; + margin-top: -1px; + margin-left: 0; } + .btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; + border-radius: 0; } + .btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: 4px; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; } + .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; + border-radius: 0; } + .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + .btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; } + .btn-group-justified > .btn, .btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; + display: table-cell; + float: none; + width: 1%; } + .btn-group-justified > .btn-group .btn { - width: 100%; + width: 100%; } + [data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; + display: none; } + .input-group { - position: relative; - display: table; - border-collapse: separate; + position: relative; + display: table; + border-collapse: separate; } + .input-group[class*="col-"] { - float: none; - padding-right: 0; - padding-left: 0; + float: none; + padding-right: 0; + padding-left: 0; } + .input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; } + .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; } + select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; + height: 46px; + line-height: 46px; } + textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; + height: auto; } + .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } + select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; + height: 30px; + line-height: 30px; } + textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; + height: auto; } + .input-group-addon, .input-group-btn, .input-group .form-control { - display: table-cell; + display: table-cell; } + .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; + border-radius: 0; } + .input-group-addon, .input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; + width: 1%; + white-space: nowrap; + vertical-align: middle; } + .input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px; + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; } + .input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; } + .input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; } + .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { - margin-top: 0; + margin-top: 0; } + .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, @@ -3404,12 +4191,14 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .input-group-addon:first-child { - border-right: 0; + border-right: 0; } + .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, @@ -3417,1407 +4206,1704 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .input-group-addon:last-child { - border-left: 0; + border-left: 0; } + .input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; + position: relative; + font-size: 0; + white-space: nowrap; } + .input-group-btn > .btn { - position: relative; + position: relative; } + .input-group-btn > .btn + .btn { - margin-left: -1px; + margin-left: -1px; } + .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { - z-index: 2; + z-index: 2; } + .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group { - margin-right: -1px; + margin-right: -1px; } + .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { - margin-left: -1px; + margin-left: -1px; } + .nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .nav > li { - position: relative; - display: block; + position: relative; + display: block; } + .nav > li > a { - position: relative; - display: block; - padding: 10px 15px; + position: relative; + display: block; + padding: 10px 15px; } + .nav > li > a:hover, .nav > li > a:focus { - text-decoration: none; - background-color: #eee; + text-decoration: none; + background-color: #eee; } + .nav > li.disabled > a { - color: #999; + color: #999; } + .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { - color: #999; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; + color: #999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; } + .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { - background-color: #eee; - border-color: #428bca; + background-color: #eee; + border-color: #428bca; } + .nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; } + .nav > li > a > img { - max-width: none; + max-width: none; } + .nav-tabs { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #ddd; } + .nav-tabs > li { - float: left; - margin-bottom: -1px; + float: left; + margin-bottom: -1px; } + .nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; } + .nav-tabs > li > a:hover { - border-color: #eee #eee #ddd; + border-color: #eee #eee #ddd; } + .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; } + .nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; + width: 100%; + border-bottom: 0; } + .nav-tabs.nav-justified > li { - float: none; + float: none; } + .nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; + margin-bottom: 5px; + text-align: center; } + .nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; + top: auto; + left: auto; } + @media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } } + .nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; + margin-right: 0; + border-radius: 4px; } + .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; + border: 1px solid #ddd; } + @media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } } + .nav-pills > li { - float: left; + float: left; } + .nav-pills > li > a { - border-radius: 4px; + border-radius: 4px; } + .nav-pills > li + li { - margin-left: 2px; + margin-left: 2px; } + .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { - color: #fff; - background-color: #428bca; + color: #fff; + background-color: #428bca; } + .nav-stacked > li { - float: none; + float: none; } + .nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; + margin-top: 2px; + margin-left: 0; } + .nav-justified { - width: 100%; + width: 100%; } + .nav-justified > li { - float: none; + float: none; } + .nav-justified > li > a { - margin-bottom: 5px; - text-align: center; + margin-bottom: 5px; + text-align: center; } + .nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; + top: auto; + left: auto; } + @media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } + .nav-justified > li { + display: table-cell; + width: 1%; + } + + .nav-justified > li > a { + margin-bottom: 0; + } } + .nav-tabs-justified { - border-bottom: 0; + border-bottom: 0; } + .nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; + margin-right: 0; + border-radius: 4px; } + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; + border: 1px solid #ddd; } + @media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } } + .tab-content > .tab-pane { - display: none; + display: none; } + .tab-content > .active { - display: block; + display: block; } + .nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; } + .navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; } + @media (min-width: 768px) { - .navbar { - border-radius: 4px; - } + .navbar { + border-radius: 4px; + } } + @media (min-width: 768px) { - .navbar-header { - float: left; - } + .navbar-header { + float: left; + } } + .navbar-collapse { - max-height: 340px; - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); } + .navbar-collapse.in { - overflow-y: auto; + overflow-y: auto; } + @media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-right: 0; - padding-left: 0; - } + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + + .navbar-collapse.in { + overflow-y: visible; + } + + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } } + .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; + margin-right: -15px; + margin-left: -15px; } + @media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } } + .navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; + z-index: 1000; + border-width: 0 0 1px; } + @media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } + .navbar-static-top { + border-radius: 0; + } } + .navbar-fixed-top, .navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; + position: fixed; + right: 0; + left: 0; + z-index: 1030; } + @media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } } + .navbar-fixed-top { - top: 0; - border-width: 0 0 1px; + top: 0; + border-width: 0 0 1px; } + .navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; } + .navbar-brand { - float: left; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; } + .navbar-brand:hover, .navbar-brand:focus { - text-decoration: none; + text-decoration: none; } + @media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } } + .navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; } + .navbar-toggle:focus { - outline: none; + outline: none; } + .navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; + display: block; + width: 22px; + height: 2px; + border-radius: 1px; } + .navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; + margin-top: 4px; } + @media (min-width: 768px) { - .navbar-toggle { - display: none; - } + .navbar-toggle { + display: none; + } } + .navbar-nav { - margin: 7.5px -15px; + margin: 7.5px -15px; } + .navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; } + @media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } } + @media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } - .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } + .navbar-nav { + float: left; + margin: 0; + } + + .navbar-nav > li { + float: left; + } + + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } + + .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } } + @media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } + .navbar-left { + float: left !important; + } + + .navbar-right { + float: right !important; + } } + .navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); } + @media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + + .navbar-form .input-group > .form-control { + width: 100%; + } + + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } + + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } } + @media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } + .navbar-form .form-group { + margin-bottom: 5px; + } } + @media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-form.navbar-right:last-child { - margin-right: -15px; - } + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + + .navbar-form.navbar-right:last-child { + margin-right: -15px; + } } + .navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .navbar-btn { - margin-top: 8px; - margin-bottom: 8px; + margin-top: 8px; + margin-bottom: 8px; } + .navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; + margin-top: 10px; + margin-bottom: 10px; } + .navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; + margin-top: 14px; + margin-bottom: 14px; } + .navbar-text { - margin-top: 15px; - margin-bottom: 15px; + margin-top: 15px; + margin-bottom: 15px; } + @media (min-width: 768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px; - } - .navbar-text.navbar-right:last-child { - margin-right: 0; - } + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } + + .navbar-text.navbar-right:last-child { + margin-right: 0; + } } + .navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; + background-color: #f8f8f8; + border-color: #e7e7e7; } + .navbar-default .navbar-brand { - color: #777; + color: #777; } + .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; + color: #5e5e5e; + background-color: transparent; } + .navbar-default .navbar-text { - color: #777; + color: #777; } + .navbar-default .navbar-nav > li > a { - color: #777; + color: #777; } + .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; + color: #333; + background-color: transparent; } + .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; + color: #555; + background-color: #e7e7e7; } + .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; + color: #ccc; + background-color: transparent; } + .navbar-default .navbar-toggle { - border-color: #ddd; + border-color: #ddd; } + .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { - background-color: #ddd; + background-color: #ddd; } + .navbar-default .navbar-toggle .icon-bar { - background-color: #888; + background-color: #888; } + .navbar-default .navbar-collapse, .navbar-default .navbar-form { - border-color: #e7e7e7; + border-color: #e7e7e7; } + .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { - color: #555; - background-color: #e7e7e7; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: #555; background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } } + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} + .navbar-default .navbar-link { - color: #777; + color: #777; } + .navbar-default .navbar-link:hover { - color: #333; + color: #333; } + .navbar-inverse { - background-color: #222; - border-color: #080808; + background-color: #222; + border-color: #080808; } + .navbar-inverse .navbar-brand { - color: #999; + color: #999; } + .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; + color: #fff; + background-color: transparent; } + .navbar-inverse .navbar-text { - color: #999; + color: #999; } + .navbar-inverse .navbar-nav > li > a { - color: #999; + color: #999; } + .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; + color: #fff; + background-color: transparent; } + .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; + color: #fff; + background-color: #080808; } + .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; + color: #444; + background-color: transparent; } + .navbar-inverse .navbar-toggle { - border-color: #333; + border-color: #333; } + .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { - background-color: #333; + background-color: #333; } + .navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; + background-color: #fff; } + .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #fff; - background-color: #080808; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #999; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + border-color: #101010; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { color: #fff; background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } } + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #999; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} + .navbar-inverse .navbar-link { - color: #999; + color: #999; } + .navbar-inverse .navbar-link:hover { - color: #fff; + color: #fff; } + .breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; } + .breadcrumb > li { - display: inline-block; + display: inline-block; } + .breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; + padding: 0 5px; + color: #ccc; + content: "/\00a0"; } + .breadcrumb > .active { - color: #999; + color: #999; } + .pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; } + .pagination > li { - display: inline; + display: inline; } + .pagination > li > a, .pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #428bca; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #428bca; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; } + .pagination > li:first-child > a, .pagination > li:first-child > span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } + .pagination > li:last-child > a, .pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; } + .pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { - color: #2a6496; - background-color: #eee; - border-color: #ddd; + color: #2a6496; + background-color: #eee; + border-color: #ddd; } + .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { - z-index: 2; - color: #fff; - cursor: default; - background-color: #428bca; - border-color: #428bca; + z-index: 2; + color: #fff; + cursor: default; + background-color: #428bca; + border-color: #428bca; } + .pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { - color: #999; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; + color: #999; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; } + .pagination-lg > li > a, .pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; + padding: 10px 16px; + font-size: 18px; } + .pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; } + .pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; } + .pagination-sm > li > a, .pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; + padding: 5px 10px; + font-size: 12px; } + .pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; } + .pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; } + .pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; } + .pager li { - display: inline; + display: inline; } + .pager li > a, .pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; } + .pager li > a:hover, .pager li > a:focus { - text-decoration: none; - background-color: #eee; + text-decoration: none; + background-color: #eee; } + .pager .next > a, .pager .next > span { - float: right; + float: right; } + .pager .previous > a, .pager .previous > span { - float: left; + float: left; } + .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { - color: #999; - cursor: not-allowed; - background-color: #fff; + color: #999; + cursor: not-allowed; + background-color: #fff; } + .label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; } + .label[href]:hover, .label[href]:focus { - color: #fff; - text-decoration: none; - cursor: pointer; + color: #fff; + text-decoration: none; + cursor: pointer; } + .label:empty { - display: none; + display: none; } + .btn .label { - position: relative; - top: -1px; + position: relative; + top: -1px; } + .label-default { - background-color: #999; + background-color: #999; } + .label-default[href]:hover, .label-default[href]:focus { - background-color: #808080; + background-color: #808080; } + .label-primary { - background-color: #428bca; + background-color: #428bca; } + .label-primary[href]:hover, .label-primary[href]:focus { - background-color: #3071a9; + background-color: #3071a9; } + .label-success { - background-color: #5cb85c; + background-color: #5cb85c; } + .label-success[href]:hover, .label-success[href]:focus { - background-color: #449d44; + background-color: #449d44; } + .label-info { - background-color: #5bc0de; + background-color: #5bc0de; } + .label-info[href]:hover, .label-info[href]:focus { - background-color: #31b0d5; + background-color: #31b0d5; } + .label-warning { - background-color: #f0ad4e; + background-color: #f0ad4e; } + .label-warning[href]:hover, .label-warning[href]:focus { - background-color: #ec971f; + background-color: #ec971f; } + .label-danger { - background-color: #d9534f; + background-color: #d9534f; } + .label-danger[href]:hover, .label-danger[href]:focus { - background-color: #c9302c; + background-color: #c9302c; } + .badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #999; - border-radius: 10px; + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999; + border-radius: 10px; } + .badge:empty { - display: none; + display: none; } + .btn .badge { - position: relative; - top: -1px; + position: relative; + top: -1px; } + .btn-xs .badge { - top: 0; - padding: 1px 5px; + top: 0; + padding: 1px 5px; } + a.badge:hover, a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; + color: #fff; + text-decoration: none; + cursor: pointer; } + a.list-group-item.active > .badge, .nav-pills > .active > a > .badge { - color: #428bca; - background-color: #fff; + color: #428bca; + background-color: #fff; } + .nav-pills > li > a > .badge { - margin-left: 3px; + margin-left: 3px; } + .jumbotron { - padding: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eee; + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; } + .jumbotron h1, .jumbotron .h1 { - color: inherit; + color: inherit; } + .jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; } + .container .jumbotron { - border-radius: 6px; + border-radius: 6px; } + .jumbotron .container { - max-width: 100%; + max-width: 100%; } + @media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } } + .thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; } + .thumbnail > img, .thumbnail a > img { - margin-right: auto; - margin-left: auto; + margin-right: auto; + margin-left: auto; } + a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { - border-color: #428bca; + border-color: #428bca; } + .thumbnail .caption { - padding: 9px; - color: #333; + padding: 9px; + color: #333; } + .alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; } + .alert h4 { - margin-top: 0; - color: inherit; + margin-top: 0; + color: inherit; } + .alert .alert-link { - font-weight: bold; + font-weight: bold; } + .alert > p, .alert > ul { - margin-bottom: 0; + margin-bottom: 0; } + .alert > p + p { - margin-top: 5px; + margin-top: 5px; } + .alert-dismissable { - padding-right: 35px; + padding-right: 35px; } + .alert-dismissable .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; + position: relative; + top: -2px; + right: -21px; + color: inherit; } + .alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; } + .alert-success hr { - border-top-color: #c9e2b3; + border-top-color: #c9e2b3; } + .alert-success .alert-link { - color: #2b542c; + color: #2b542c; } + .alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; } + .alert-info hr { - border-top-color: #a6e1ec; + border-top-color: #a6e1ec; } + .alert-info .alert-link { - color: #245269; + color: #245269; } + .alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; } + .alert-warning hr { - border-top-color: #f7e1b5; + border-top-color: #f7e1b5; } + .alert-warning .alert-link { - color: #66512c; + color: #66512c; } + .alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; } + .alert-danger hr { - border-top-color: #e4b9c0; + border-top-color: #e4b9c0; } + .alert-danger .alert-link { - color: #843534; + color: #843534; } + @-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } } + @keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } } + .progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); } + .progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #428bca; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - -webkit-transition: width .6s ease; - transition: width .6s ease; + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + transition: width .6s ease; } + .progress-striped .progress-bar { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-size: 40px 40px; + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-size: 40px 40px; } + .progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; + -webkit-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; } + .progress-bar-success { - background-color: #5cb85c; + background-color: #5cb85c; } + .progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } + .progress-bar-info { - background-color: #5bc0de; + background-color: #5bc0de; } + .progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } + .progress-bar-warning { - background-color: #f0ad4e; + background-color: #f0ad4e; } + .progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } + .progress-bar-danger { - background-color: #d9534f; + background-color: #d9534f; } + .progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } + .media, .media-body { - overflow: hidden; - zoom: 1; + overflow: hidden; + zoom: 1; } + .media, .media .media { - margin-top: 15px; + margin-top: 15px; } + .media:first-child { - margin-top: 0; + margin-top: 0; } + .media-object { - display: block; + display: block; } + .media-heading { - margin: 0 0 5px; + margin: 0 0 5px; } + .media > .pull-left { - margin-right: 10px; + margin-right: 10px; } + .media > .pull-right { - margin-left: 10px; + margin-left: 10px; } + .media-list { - padding-left: 0; - list-style: none; + padding-left: 0; + list-style: none; } + .list-group { - padding-left: 0; - margin-bottom: 20px; + padding-left: 0; + margin-bottom: 20px; } + .list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; } + .list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; } + .list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; } + .list-group-item > .badge { - float: right; + float: right; } + .list-group-item > .badge + .badge { - margin-right: 5px; + margin-right: 5px; } + a.list-group-item { - color: #555; + color: #555; } + a.list-group-item .list-group-item-heading { - color: #333; + color: #333; } + a.list-group-item:hover, a.list-group-item:focus { - text-decoration: none; - background-color: #f5f5f5; + text-decoration: none; + background-color: #f5f5f5; } + a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #428bca; - border-color: #428bca; + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; } + a.list-group-item.active .list-group-item-heading, a.list-group-item.active:hover .list-group-item-heading, a.list-group-item.active:focus .list-group-item-heading { - color: inherit; + color: inherit; } + a.list-group-item.active .list-group-item-text, a.list-group-item.active:hover .list-group-item-text, a.list-group-item.active:focus .list-group-item-text { - color: #e1edf7; + color: #e1edf7; } + .list-group-item-success { - color: #3c763d; - background-color: #dff0d8; + color: #3c763d; + background-color: #dff0d8; } + a.list-group-item-success { - color: #3c763d; + color: #3c763d; } + a.list-group-item-success .list-group-item-heading { - color: inherit; + color: inherit; } + a.list-group-item-success:hover, a.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; + color: #3c763d; + background-color: #d0e9c6; } + a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; + color: #fff; + background-color: #3c763d; + border-color: #3c763d; } + .list-group-item-info { - color: #31708f; - background-color: #d9edf7; + color: #31708f; + background-color: #d9edf7; } + a.list-group-item-info { - color: #31708f; + color: #31708f; } + a.list-group-item-info .list-group-item-heading { - color: inherit; + color: inherit; } + a.list-group-item-info:hover, a.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; + color: #31708f; + background-color: #c4e3f3; } + a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; + color: #fff; + background-color: #31708f; + border-color: #31708f; } + .list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; + color: #8a6d3b; + background-color: #fcf8e3; } + a.list-group-item-warning { - color: #8a6d3b; + color: #8a6d3b; } + a.list-group-item-warning .list-group-item-heading { - color: inherit; + color: inherit; } + a.list-group-item-warning:hover, a.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; + color: #8a6d3b; + background-color: #faf2cc; } + a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; } + .list-group-item-danger { - color: #a94442; - background-color: #f2dede; + color: #a94442; + background-color: #f2dede; } + a.list-group-item-danger { - color: #a94442; + color: #a94442; } + a.list-group-item-danger .list-group-item-heading { - color: inherit; + color: inherit; } + a.list-group-item-danger:hover, a.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; + color: #a94442; + background-color: #ebcccc; } + a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; + color: #fff; + background-color: #a94442; + border-color: #a94442; } + .list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; + margin-top: 0; + margin-bottom: 5px; } + .list-group-item-text { - margin-bottom: 0; - line-height: 1.3; + margin-bottom: 0; + line-height: 1.3; } + .panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); } + .panel-body { - padding: 15px; + padding: 15px; } + .panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + .panel-heading > .dropdown .dropdown-toggle { - color: inherit; + color: inherit; } + .panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; } + .panel-title > a { - color: inherit; + color: inherit; } + .panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } + .panel > .list-group { - margin-bottom: 0; + margin-bottom: 0; } + .panel > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; + border-width: 1px 0; + border-radius: 0; } + .panel > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + .panel > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } + .panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; + border-top-width: 0; } + .panel > .table, .panel > .table-responsive > .table { - margin-bottom: 0; + margin-bottom: 0; } + .panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, @@ -4826,8 +5912,9 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; + border-top-left-radius: 3px; } + .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, @@ -4836,13 +5923,15 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; + border-top-right-radius: 3px; } + .panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } + .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, @@ -4851,8 +5940,9 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; } + .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, @@ -4861,20 +5951,24 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; } + .panel > .panel-body + .table, .panel > .panel-body + .table-responsive { - border-top: 1px solid #ddd; + border-top: 1px solid #ddd; } + .panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; + border-top: 0; } + .panel > .table-bordered, .panel > .table-responsive > .table-bordered { - border: 0; + border: 0; } + .panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, @@ -4887,8 +5981,9 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; + border-left: 0; } + .panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, @@ -4901,8 +5996,9 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; + border-right: 0; } + .panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, @@ -4911,8 +6007,9 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; + border-bottom: 0; } + .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, @@ -4921,674 +6018,799 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; + border-bottom: 0; } + .panel > .table-responsive { - margin-bottom: 0; - border: 0; + margin-bottom: 0; + border: 0; } + .panel-group { - margin-bottom: 20px; + margin-bottom: 20px; } + .panel-group .panel { - margin-bottom: 0; - overflow: hidden; - border-radius: 4px; + margin-bottom: 0; + overflow: hidden; + border-radius: 4px; } + .panel-group .panel + .panel { - margin-top: 5px; + margin-top: 5px; } + .panel-group .panel-heading { - border-bottom: 0; + border-bottom: 0; } + .panel-group .panel-heading + .panel-collapse .panel-body { - border-top: 1px solid #ddd; + border-top: 1px solid #ddd; } + .panel-group .panel-footer { - border-top: 0; + border-top: 0; } + .panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #ddd; } + .panel-default { - border-color: #ddd; + border-color: #ddd; } + .panel-default > .panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd; + color: #333; + background-color: #f5f5f5; + border-color: #ddd; } + .panel-default > .panel-heading + .panel-collapse .panel-body { - border-top-color: #ddd; + border-top-color: #ddd; } + .panel-default > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #ddd; + border-bottom-color: #ddd; } + .panel-primary { - border-color: #428bca; + border-color: #428bca; } + .panel-primary > .panel-heading { - color: #fff; - background-color: #428bca; - border-color: #428bca; + color: #fff; + background-color: #428bca; + border-color: #428bca; } + .panel-primary > .panel-heading + .panel-collapse .panel-body { - border-top-color: #428bca; + border-top-color: #428bca; } + .panel-primary > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #428bca; + border-bottom-color: #428bca; } + .panel-success { - border-color: #d6e9c6; + border-color: #d6e9c6; } + .panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; } + .panel-success > .panel-heading + .panel-collapse .panel-body { - border-top-color: #d6e9c6; + border-top-color: #d6e9c6; } + .panel-success > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #d6e9c6; + border-bottom-color: #d6e9c6; } + .panel-info { - border-color: #bce8f1; + border-color: #bce8f1; } + .panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; } + .panel-info > .panel-heading + .panel-collapse .panel-body { - border-top-color: #bce8f1; + border-top-color: #bce8f1; } + .panel-info > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #bce8f1; + border-bottom-color: #bce8f1; } + .panel-warning { - border-color: #faebcc; + border-color: #faebcc; } + .panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; } + .panel-warning > .panel-heading + .panel-collapse .panel-body { - border-top-color: #faebcc; + border-top-color: #faebcc; } + .panel-warning > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #faebcc; + border-bottom-color: #faebcc; } + .panel-danger { - border-color: #ebccd1; + border-color: #ebccd1; } + .panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; } + .panel-danger > .panel-heading + .panel-collapse .panel-body { - border-top-color: #ebccd1; + border-top-color: #ebccd1; } + .panel-danger > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #ebccd1; + border-bottom-color: #ebccd1; } + .well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); } + .well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15); + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); } + .well-lg { - padding: 24px; - border-radius: 6px; + padding: 24px; + border-radius: 6px; } + .well-sm { - padding: 9px; - border-radius: 3px; + padding: 9px; + border-radius: 3px; } + .close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2; + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; } + .close:hover, .close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5; + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; } + button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; } + .modal-open { - overflow: hidden; + overflow: hidden; } + .modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: auto; - overflow-y: scroll; - -webkit-overflow-scrolling: touch; - outline: 0; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: auto; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + outline: 0; } + .modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -moz-transition: -moz-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - transform: translate(0, -25%); + -webkit-transition: -webkit-transform .3s ease-out; + -moz-transition: -moz-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); } + .modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); } + .modal-dialog { - position: relative; - width: auto; - margin: 10px; + position: relative; + width: auto; + margin: 10px; } + .modal-content { - position: relative; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + position: relative; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); } + .modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; } + .modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; + filter: alpha(opacity=0); + opacity: 0; } + .modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5; + filter: alpha(opacity=50); + opacity: .5; } + .modal-header { - min-height: 16.42857143px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; } + .modal-header .close { - margin-top: -2px; + margin-top: -2px; } + .modal-title { - margin: 0; - line-height: 1.42857143; + margin: 0; + line-height: 1.42857143; } + .modal-body { - position: relative; - padding: 20px; + position: relative; + padding: 20px; } + .modal-footer { - padding: 19px 20px 20px; - margin-top: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; } + .modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; + margin-bottom: 0; + margin-left: 5px; } + .modal-footer .btn-group .btn + .btn { - margin-left: -1px; + margin-left: -1px; } + .modal-footer .btn-block + .btn-block { - margin-left: 0; + margin-left: 0; } + @media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - } - .modal-sm { - width: 300px; - } + .modal-dialog { + width: 600px; + margin: 30px auto; + } + + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + + .modal-sm { + width: 300px; + } } + @media (min-width: 992px) { - .modal-lg { - width: 900px; - } + .modal-lg { + width: 900px; + } } + .tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 12px; - line-height: 1.4; - visibility: visible; - filter: alpha(opacity=0); - opacity: 0; + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + visibility: visible; + filter: alpha(opacity=0); + opacity: 0; } + .tooltip.in { - filter: alpha(opacity=90); - opacity: .9; + filter: alpha(opacity=90); + opacity: .9; } + .tooltip.top { - padding: 5px 0; - margin-top: -3px; + padding: 5px 0; + margin-top: -3px; } + .tooltip.right { - padding: 0 5px; - margin-left: 3px; + padding: 0 5px; + margin-left: 3px; } + .tooltip.bottom { - padding: 5px 0; - margin-top: 3px; + padding: 5px 0; + margin-top: 3px; } + .tooltip.left { - padding: 0 5px; - margin-left: -3px; + padding: 0 5px; + margin-left: -3px; } + .tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - text-decoration: none; - background-color: #000; - border-radius: 4px; + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; } + .tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; } + .tooltip.top-left .tooltip-arrow { - bottom: 0; - left: 5px; - border-width: 5px 5px 0; - border-top-color: #000; + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000; } + .tooltip.top-right .tooltip-arrow { - right: 5px; - bottom: 0; - border-width: 5px 5px 0; - border-top-color: #000; + right: 5px; + bottom: 0; + border-width: 5px 5px 0; + border-top-color: #000; } + .tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; } + .tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; } + .tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; } + .tooltip.bottom-left .tooltip-arrow { - top: 0; - left: 5px; - border-width: 0 5px 5px; - border-bottom-color: #000; + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; } + .tooltip.bottom-right .tooltip-arrow { - top: 0; - right: 5px; - border-width: 0 5px 5px; - border-bottom-color: #000; + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; } + .popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); } + .popover.top { - margin-top: -10px; + margin-top: -10px; } + .popover.right { - margin-left: 10px; + margin-left: 10px; } + .popover.bottom { - margin-top: 10px; + margin-top: 10px; } + .popover.left { - margin-left: -10px; + margin-left: -10px; } + .popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; } + .popover-content { - padding: 9px 14px; + padding: 9px 14px; } + .popover > .arrow, .popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + .popover > .arrow { - border-width: 11px; + border-width: 11px; } + .popover > .arrow:after { - content: ""; - border-width: 10px; + content: ""; + border-width: 10px; } + .popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0; + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; } + .popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0; + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; } + .popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0; + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; } + .popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0; + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; } + .popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25); + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); } + .popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff; + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; } + .popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, .25); + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); } + .popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; } + .carousel { - position: relative; + position: relative; } + .carousel-inner { - position: relative; - width: 100%; - overflow: hidden; + position: relative; + width: 100%; + overflow: hidden; } + .carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - transition: .6s ease-in-out left; + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; } + .carousel-inner > .item > img, .carousel-inner > .item > a > img { - line-height: 1; + line-height: 1; } + .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { - display: block; + display: block; } + .carousel-inner > .active { - left: 0; + left: 0; } + .carousel-inner > .next, .carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; + position: absolute; + top: 0; + width: 100%; } + .carousel-inner > .next { - left: 100%; + left: 100%; } + .carousel-inner > .prev { - left: -100%; + left: -100%; } + .carousel-inner > .next.left, .carousel-inner > .prev.right { - left: 0; + left: 0; } + .carousel-inner > .active.left { - left: -100%; + left: -100%; } + .carousel-inner > .active.right { - left: 100%; + left: 100%; } + .carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); - filter: alpha(opacity=50); - opacity: .5; + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; } + .carousel-control.left { - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%)); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%)); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; } + .carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%)); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%)); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; } + .carousel-control:hover, .carousel-control:focus { - color: #fff; - text-decoration: none; - filter: alpha(opacity=90); - outline: none; - opacity: .9; + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: none; + opacity: .9; } + .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { - position: absolute; - top: 0%; - z-index: 5; - display: inline-block; + position: absolute; + top: 0%; + z-index: 5; + display: inline-block; } + .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { - left: 50%; + left: 50%; } + .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { - right: 50%; + right: 50%; } + .carousel-control .icon-prev, .carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - font-family: serif; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; } + .carousel-control .icon-prev:before { - content: '\2039'; + content: '\2039'; } + .carousel-control .icon-next:before { - content: '\203a'; + content: '\203a'; } + .carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; } + .carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px; + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; } + .carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; } + .carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); } + .carousel-caption .btn { - text-shadow: none; + text-shadow: none; } + @media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - margin-left: -15px; - font-size: 30px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + + .carousel-indicators { + bottom: 20px; + } } + .clearfix:before, .clearfix:after, .container:before, @@ -5617,9 +6839,10 @@ button.close { .panel-body:after, .modal-footer:before, .modal-footer:after { - display: table; - content: " "; + display: table; + content: " "; } + .clearfix:after, .container:after, .container-fluid:after, @@ -5634,152 +6857,190 @@ button.close { .pager:after, .panel-body:after, .modal-footer:after { - clear: both; + clear: both; } + .center-block { - display: block; - margin-right: auto; - margin-left: auto; + display: block; + margin-right: auto; + margin-left: auto; } + .pull-right { - float: right !important; + float: right !important; } + .pull-left { - float: left !important; + float: left !important; } + .hide { - display: none !important; + display: none !important; } + .show { - display: block !important; + display: block !important; } + .invisible { - visibility: hidden; + visibility: hidden; } + .text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; } + .hidden { - display: none !important; - visibility: hidden !important; + display: none !important; + visibility: hidden !important; } + .affix { - position: fixed; + position: fixed; } + @-ms-viewport { - width: device-width; + width: device-width; } + .visible-xs, .visible-sm, .visible-md, .visible-lg { - display: none !important; + display: none !important; } + @media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } + .visible-xs { + display: block !important; + } + + table.visible-xs { + display: table; + } + + tr.visible-xs { + display: table-row !important; + } + + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } } + @media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } + .visible-sm { + display: block !important; + } + + table.visible-sm { + display: table; + } + + tr.visible-sm { + display: table-row !important; + } + + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } } + @media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } + .visible-md { + display: block !important; + } + + table.visible-md { + display: table; + } + + tr.visible-md { + display: table-row !important; + } + + th.visible-md, + td.visible-md { + display: table-cell !important; + } } + @media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } + .visible-lg { + display: block !important; + } + + table.visible-lg { + display: table; + } + + tr.visible-lg { + display: table-row !important; + } + + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } } + @media (max-width: 767px) { - .hidden-xs { - display: none !important; - } + .hidden-xs { + display: none !important; + } } + @media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } + .hidden-sm { + display: none !important; + } } + @media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } + .hidden-md { + display: none !important; + } } + @media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } + .hidden-lg { + display: none !important; + } } + .visible-print { - display: none !important; + display: none !important; } + @media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } + .visible-print { + display: block !important; + } + + table.visible-print { + display: table; + } + + tr.visible-print { + display: table-row !important; + } + + th.visible-print, + td.visible-print { + display: table-cell !important; + } } + @media print { - .hidden-print { - display: none !important; - } + .hidden-print { + display: none !important; + } } + /*# sourceMappingURL=bootstrap.css.map */ diff --git a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.svg b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.svg index e3e2dc7..1295cd4 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.svg +++ b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.svg @@ -1,229 +1,410 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/js/bootstrap.js b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/js/bootstrap.js index 8ae571b..0b67f7f 100644 --- a/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/js/bootstrap.js +++ b/len-activiti/src/main/resources/static/editor-app/libs/bootstrap_3.1.1/js/bootstrap.js @@ -4,7 +4,9 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} /* ======================================================================== * Bootstrap: transition.js v3.1.1 @@ -16,42 +18,46 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re +function ($) { - 'use strict'; + 'use strict'; - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ - function transitionEnd() { - var el = document.createElement('bootstrap') + function transitionEnd() { + var el = document.createElement('bootstrap') - var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd', - 'MozTransition' : 'transitionend', - 'OTransition' : 'oTransitionEnd otransitionend', - 'transition' : 'transitionend' - } + var transEndEventNames = { + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'transitionend', + 'OTransition': 'oTransitionEnd otransitionend', + 'transition': 'transitionend' + } - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return {end: transEndEventNames[name]} + } + } - return false // explicit for ie8 ( ._.) - } + return false // explicit for ie8 ( ._.) + } - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { + called = true + }) + var callback = function () { + if (!called) $($el).trigger($.support.transition.end) + } + setTimeout(callback, duration) + return this + } - $(function () { - $.support.transition = transitionEnd() - }) + $(function () { + $.support.transition = transitionEnd() + }) }(jQuery); @@ -65,82 +71,82 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re +function ($) { - 'use strict'; + 'use strict'; - // ALERT CLASS DEFINITION - // ====================== + // ALERT CLASS DEFINITION + // ====================== - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } - var $parent = $(selector) + var $parent = $(selector) - if (e) e.preventDefault() + if (e) e.preventDefault() - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } - $parent.trigger(e = $.Event('close.bs.alert')) + $parent.trigger(e = $.Event('close.bs.alert')) - if (e.isDefaultPrevented()) return + if (e.isDefaultPrevented()) return - $parent.removeClass('in') + $parent.removeClass('in') - function removeElement() { - $parent.trigger('closed.bs.alert').remove() - } + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } - $.support.transition && $parent.hasClass('fade') ? - $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : - removeElement() - } + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } - // ALERT PLUGIN DEFINITION - // ======================= + // ALERT PLUGIN DEFINITION + // ======================= - var old = $.fn.alert + var old = $.fn.alert - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } - $.fn.alert.Constructor = Alert + $.fn.alert.Constructor = Alert - // ALERT NO CONFLICT - // ================= + // ALERT NO CONFLICT + // ================= - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } - // ALERT DATA-API - // ============== + // ALERT DATA-API + // ============== - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) }(jQuery); @@ -154,101 +160,101 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re +function ($) { - 'use strict'; + 'use strict'; - // BUTTON PUBLIC CLASS DEFINITION - // ============================== + // BUTTON PUBLIC CLASS DEFINITION + // ============================== - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - this.isLoading = false - } + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } - Button.DEFAULTS = { - loadingText: 'loading...' - } + Button.DEFAULTS = { + loadingText: 'loading...' + } - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() - state = state + 'Text' + state = state + 'Text' - if (!data.resetText) $el.data('resetText', $el[val]()) + if (!data.resetText) $el.data('resetText', $el[val]()) - $el[val](data[state] || this.options[state]) + $el[val](data[state] || this.options[state]) - // push to event loop to allow forms to submit - setTimeout($.proxy(function () { - if (state == 'loadingText') { - this.isLoading = true - $el.addClass(d).attr(d, d) - } else if (this.isLoading) { - this.isLoading = false - $el.removeClass(d).removeAttr(d) - } - }, this), 0) - } + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } - Button.prototype.toggle = function () { - var changed = true - var $parent = this.$element.closest('[data-toggle="buttons"]') + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') == 'radio') { - if ($input.prop('checked') && this.$element.hasClass('active')) changed = false - else $parent.find('.active').removeClass('active') - } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + if (changed) this.$element.toggleClass('active') } - if (changed) this.$element.toggleClass('active') - } + // BUTTON PLUGIN DEFINITION + // ======================== - // BUTTON PLUGIN DEFINITION - // ======================== + var old = $.fn.button - var old = $.fn.button + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option + if (!data) $this.data('bs.button', (data = new Button(this, options))) - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } - $.fn.button.Constructor = Button + $.fn.button.Constructor = Button - // BUTTON NO CONFLICT - // ================== + // BUTTON NO CONFLICT + // ================== - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } - // BUTTON DATA-API - // =============== + // BUTTON DATA-API + // =============== - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) }(jQuery); @@ -262,199 +268,203 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re +function ($) { - 'use strict'; - - // CAROUSEL CLASS DEFINITION - // ========================= + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true + } - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) - Carousel.DEFAULTS = { - interval: 5000, - pause: 'hover', - wrap: true - } + this.interval && clearInterval(this.interval) - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - this.interval && clearInterval(this.interval) + return this + } - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() - return this - } + return this.$items.index(this.$active) + } - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() - return this.$items.index(this.$active) - } + if (pos > (this.$items.length - 1) || pos < 0) return - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getActiveIndex() + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { + that.to(pos) + }) + if (activeIndex == pos) return this.pause().cycle() - if (pos > (this.$items.length - 1) || pos < 0) return + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) - if (activeIndex == pos) return this.pause().cycle() + Carousel.prototype.pause = function (e) { + e || (this.paused = true) - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } - Carousel.prototype.pause = function (e) { - e || (this.paused = true) + this.interval = clearInterval(this.interval) - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) + return this } - this.interval = clearInterval(this.interval) - - return this - } + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this + if ($next.hasClass('active')) return this.sliding = false - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } + var e = $.Event('slide.bs.carousel', {relatedTarget: $next[0], direction: direction}) + this.$element.trigger(e) + if (e.isDefaultPrevented()) return - if ($next.hasClass('active')) return this.sliding = false + this.sliding = true - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - this.$element.trigger(e) - if (e.isDefaultPrevented()) return + isCycling && this.pause() - this.sliding = true + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid.bs.carousel', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } - isCycling && this.pause() + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger('slid.bs.carousel') + }, 0) + }) + .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid.bs.carousel') + } - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid.bs.carousel', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } + isCycling && this.cycle() - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) - }) - .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid.bs.carousel') + return this } - isCycling && this.cycle() - - return this - } + // CAROUSEL PLUGIN DEFINITION + // ========================== - // CAROUSEL PLUGIN DEFINITION - // ========================== + var old = $.fn.carousel - var old = $.fn.carousel + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } - $.fn.carousel.Constructor = Carousel + $.fn.carousel.Constructor = Carousel - // CAROUSEL NO CONFLICT - // ==================== + // CAROUSEL NO CONFLICT + // ==================== - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } - // CAROUSEL DATA-API - // ================= + // CAROUSEL DATA-API + // ================= - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false - $target.carousel(options) + $target.carousel(options) - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').to(slideIndex) - } + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } - e.preventDefault() - }) + e.preventDefault() + }) - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - $carousel.carousel($carousel.data()) + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) }) - }) }(jQuery); @@ -468,164 +478,164 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re +function ($) { - 'use strict'; + 'use strict'; - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } - Collapse.DEFAULTS = { - toggle: true - } + Collapse.DEFAULTS = { + toggle: true + } - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return - var actives = this.$parent && this.$parent.find('> .panel > .in') + var actives = this.$parent && this.$parent.find('> .panel > .in') - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } - var dimension = this.dimension() + var dimension = this.dimension() - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) - this.transitioning = 1 + this.transitioning = 1 - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } - if (!$.support.transition) return complete.call(this) + if (!$.support.transition) return complete.call(this) - var scrollSize = $.camelCase(['scroll', dimension].join('-')) + var scrollSize = $.camelCase(['scroll', dimension].join('-')) - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) - } + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return - var dimension = this.dimension() + var dimension = this.dimension() - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') - this.transitioning = 1 + this.transitioning = 1 - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } - if (!$.support.transition) return complete.call(this) + if (!$.support.transition) return complete.call(this) - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - } + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } - // COLLAPSE PLUGIN DEFINITION - // ========================== + // COLLAPSE PLUGIN DEFINITION + // ========================== - var old = $.fn.collapse + var old = $.fn.collapse - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - if (!data && options.toggle && option == 'show') option = !option - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } + if (!data && options.toggle && option == 'show') option = !option + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } - $.fn.collapse.Constructor = Collapse + $.fn.collapse.Constructor = Collapse - // COLLAPSE NO CONFLICT - // ==================== + // COLLAPSE NO CONFLICT + // ==================== - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } - // COLLAPSE DATA-API - // ================= + // COLLAPSE DATA-API + // ================= - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } - $target.collapse(option) - }) + $target.collapse(option) + }) }(jQuery); @@ -639,141 +649,143 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re +function ($) { - 'use strict'; + 'use strict'; - // DROPDOWN CLASS DEFINITION - // ========================= + // DROPDOWN CLASS DEFINITION + // ========================= - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } - Dropdown.prototype.toggle = function (e) { - var $this = $(this) + Dropdown.prototype.toggle = function (e) { + var $this = $(this) - if ($this.is('.disabled, :disabled')) return + if ($this.is('.disabled, :disabled')) return - var $parent = getParent($this) - var isActive = $parent.hasClass('open') + var $parent = getParent($this) + var isActive = $parent.hasClass('open') - clearMenus() + clearMenus() - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $('