1.创建一个项目 指定数据库
rails new demo02 -d mysql
2.修改 config/database.yml 修改数据库密码
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: 111
host: localhost
development:
<<: *default
database: AirQueen_development
3. 创建数据库(会创建2个库 airQueen_developmen airqueen_developmen_test )
rails db:create
4. 执行数据迁移
rails db:migrate
5. 安装bundler
gem install bundler
6. 执行bundle update
------------------------------------------------
创建控制器 包含index动作
rails g controller work_pros index
创建模型层
rails generate model vehicle type:string color:string price:decimal{10.2}
-------------------------------------------------------------------------
创建资源 user shop 在shops表中添加user_name 关联字段
rails g scaffold user name age shop_id:integer
rails db:migrate (执行迁移创建表)
rails g scaffold shop name price:integer shop_id:integer num:integer user_name
rails db:migrate
-------------------------------------------------------------------
关联查询
select u.*,s.price from users u join shops s on u.name=s.user_name
使用find_by_sql()
@shops = User.find_by_sql("select u.*,s.price,s.name sname from users u join shops s on
u.name=s.user_name where u.name='lmg02'")
根据名字关联查询【使用find_by_sql()】
@name = params[:name]
@shops = User.find_by_sql("select u.*,s.price,s.name sname from users u join shops s on
u.name=s.user_name where u.name='#{@name}'")
--------------------------------------------------------------
同时保存2张表数据
def create
linkman = params[:linkman]
tel = params[:linkman_tel]
unit = params[:unit_address]
@SRegionCode = SRegionCode.new(params_s_region_code)
respond_to do |format|
if @SRegionCode.save
@info = SRegionCodeInfo.new(:linkman => linkman, :linkman_tel => tel, :unit_address
=> unit, :s_region_code_id => @SRegionCode.id)
@info.save
format.html {redirect_to "/s_region_code"}
format.json {render json: {status: "success", location: @SRegionCode}}
else
format.html {render :new}
format.json {render json: {status: "false", location: @SRegionCode.errors}}
end
end
end
step1:
创建关联的表 model d_power_cut_audit_logs【关联字段d_power_cut_record_id:integer】
rails g model d_power_cut_audit_log audit_cause note d_power_cut_record_id:integer
--------------------------------------------------------------------
audit_cause = params[:audit_des]
note = params[:note]
#保存关联数据到另一张表
@power_cut_audit_log=DPowerCutAuditLog.new(:audit_cause => audit_cause, :note =>
note, :d_power_cut_record_id => @powerCutRecord.id)
@power_cut_audit_log.save
#按条件查询
@unit_yw = params[:unit_yw] # 按运维单位
@station_name = params[:station_name] # 按站点
@job_status = params[:job_status] # 按工单状态
@origin = params[:origin] # 按来源
@audit_des = params[:audit_des] # 按回退原因
#按运维单位搜索
scope :by_unit_yw, ->(unit_yw) {
where(:unit_yw => unit_yw) if unit_yw.present?
}
#按站点搜索
scope :by_station_name, ->(station_name) {
where(:station_name => station_name) if work_type.present?
}
#按工单状态搜索
scope :by_job_status, ->(job_status) {
where(:job_status => job_status) if job_status.present?
}
#按来源搜索
scope :by_origin, ->(origin) {
where(:origin => origin) if origin.present?
}
#按回退原因搜索
scope :by_audit_des, ->(audit_des) {
where(:audit_des => audit_des) if audit_des.present?
}
#按创建时间
scope :by_created_at, ->(created_at,end_at) {
where(:created_at => (created_at..end_at)) if created_at.present? && end_at.present?
}
scope :by_time, ->(created_time,end_time) {
where(created_at: (created_time)..end_time) if created_time.present? &&
end_time.present?
}
#获取创建开始时间
@created_at=params[:created_at].to_s + " 00:00:00" if params[:created_at].present?
#获取结束时间
@end_at=params[:end_at].to_s + " 23:59:59" if params[:end_at].present?
------------------------------------------------------------
【将前端查询的条件封装为一个json---详见:d_power_cut_record.rb】
模型层DPowerCutRecord
def self.status
@str = []
%w(待分配 待处理 待审核 完成).each_with_index do |statu,index|
hande_no = %w(waitting no_handle no_audit finish )[index]
@str << {value: statu, text: hande_no }
end
return @str
end
json中添加
json.status DPowerCutRecord.status
-----------------------------------------------------------------
【转换日期格式】
json.powerCutRecords @powerCutRecords do |p|
#json.id p.id
#json.station_name p.station_name
# json.unit_yw p.unit_yw
json.begin_time p.begin_time.strftime("%Y/%m/%d %H:%M:%S")
json.end_time p.end_time.strftime("%Y/%m/%d %H:%M:%S")
#json.time_range p.time_range
json.created_at p.created_at.strftime("%Y/%m/%d %H:%M:%S")
#json.exception_name p.exception_name
# json.origin p.origin
# json.handle_man p.handle_man
# json.audit_des p.audit_des
# json.job_status p.job_status
# json.img_path p.img_path
end
【转换日期格式---项目中的写法】
方式2:(项目中的写法 d_alarms /index.json.jbuilder)
json.first_alarm_time alarm.first_alarm_time.present? ? alarm.first_alarm_time.strftime
("%Y-%m-%d %H:%M:%S") : ''
json.last_alarm_time alarm.last_alarm_time.present? ? alarm.last_alarm_time.strftime("%Y-
%m-%d %H:%M:%S") : ''
【CRT中:调用model类方法查询】
DPowerCutRecord.where(:d_station_id => ["1","2","1001"]).by_unit_yw("")
--------------------------------------------------
Last login: Fri Aug 25 09:21:15 2017 from 172.168.10.84
dingfj@envsafe-server:~$ cd ../envsafe/AirQueen
dingfj@envsafe-server:/home/envsafe/AirQueen$ sudo su envsafe
[sudo] dingfj 的密码:
envsafe@envsafe-server:~/AirQueen$ rails c
--------------》修改文件后需要退出重新进入
exit 退出
rails c
1.创建一个项目 指定数据库rails new demo02 -d mysql 2.修改 config/database.yml 修改数据库密码 3. 创建数据库(会创建2个库 demo02_developem demo02_test )rails db:create
4. 安装bundlergem install bundler 5. 执行bundle update
创建控制器 包含index动作rails g controller work_pros index
创建模型层rails generate model vehicle type:string color:string price:decimal{10.2} -------------------------------------------------------------------------创建资源 user shop 在shops表中添加user_name 关联字段 rails g scaffold user name age shop_id:integer rails db:migrate (执行迁移创建表) rails g scaffold shop name price:integer shop_id:integer num:integer user_namerails db:migrate
-------------------------------------------------------------------关联查询select u.*,s.price from users u join shops s on u.name=s.user_name使用find_by_sql()@shops = User.find_by_sql("select u.*,s.price,s.name sname from users u join shops s on u.name=s.user_name where u.name='lmg02'")
根据名字关联查询【使用find_by_sql()】@name = params[:name]@shops = User.find_by_sql("select u.*,s.price,s.name sname from users u join shops s on u.name=s.user_name where u.name='#{@name}'") --------------------------------------------------------------同时保存2张表数据 def create linkman = params[:linkman] tel = params[:linkman_tel] unit = params[:unit_address] @SRegionCode = SRegionCode.new(params_s_region_code) respond_to do |format| if @SRegionCode.save @info = SRegionCodeInfo.new(:linkman => linkman, :linkman_tel => tel, :unit_address => unit, :s_region_code_id => @SRegionCode.id) @info.save format.html {redirect_to "/s_region_code"} format.json {render json: {status: "success", location: @SRegionCode}} else format.html {render :new} format.json {render json: {status: "false", location: @SRegionCode.errors}} end end end step1: 创建关联的表 model d_power_cut_audit_logs【关联字段d_power_cut_record_id:integer】 rails g model d_power_cut_audit_log audit_cause note d_power_cut_record_id:integer -------------------------------------------------------------------- audit_cause = params[:audit_des] note = params[:note] #保存关联数据到另一张表 @power_cut_audit_log=DPowerCutAuditLog.new(:audit_cause => audit_cause, :note => note, :d_power_cut_record_id => @powerCutRecord.id) @power_cut_audit_log.save
#按条件查询 @unit_yw = params[:unit_yw] # 按运维单位 @station_name = params[:station_name] # 按站点 @job_status = params[:job_status] # 按工单状态 @origin = params[:origin] # 按来源 @audit_des = params[:audit_des] # 按回退原因 #按运维单位搜索scope :by_unit_yw, ->(unit_yw) { where(:unit_yw => unit_yw) if unit_yw.present?} #按站点搜索 scope :by_station_name, ->(station_name) { where(:station_name => station_name) if work_type.present?} #按工单状态搜索 scope :by_job_status, ->(job_status) { where(:job_status => job_status) if job_status.present?} #按来源搜索 scope :by_origin, ->(origin) { where(:origin => origin) if origin.present?} #按回退原因搜索 scope :by_audit_des, ->(audit_des) { where(:audit_des => audit_des) if audit_des.present?} #按创建时间scope :by_created_at, ->(created_at,end_at) { where(:created_at => (created_at..end_at)) if created_at.present? && end_at.present?} scope :by_time, ->(created_time,end_time) {where(created_at: (created_time)..end_time) if created_time.present? && end_time.present?}
#获取创建开始时间@created_at=params[:created_at].to_s + " 00:00:00" if params[:created_at].present?#获取结束时间@end_at=params[:end_at].to_s + " 23:59:59" if params[:end_at].present? ------------------------------------------------------------【将前端查询的条件封装为一个json---详见:d_power_cut_record.rb】模型层DPowerCutRecorddef self.status @str = [] %w(待分配 待处理 待审核 完成).each_with_index do |statu,index| hande_no = %w(waitting no_handle no_audit finish )[index] @str << {value: statu, text: hande_no } end return @strend json中添加json.status DPowerCutRecord.status -----------------------------------------------------------------【转换日期格式】 json.powerCutRecords @powerCutRecords do |p|
#json.id p.id #json.station_name p.station_name # json.unit_yw p.unit_yw json.begin_time p.begin_time.strftime("%Y/%m/%d %H:%M:%S") json.end_time p.end_time.strftime("%Y/%m/%d %H:%M:%S") #json.time_range p.time_range json.created_at p.created_at.strftime("%Y/%m/%d %H:%M:%S") #json.exception_name p.exception_name # json.origin p.origin # json.handle_man p.handle_man # json.audit_des p.audit_des # json.job_status p.job_status # json.img_path p.img_path end 【转换日期格式---项目中的写法】方式2:(项目中的写法 d_alarms /index.json.jbuilder)json.first_alarm_time alarm.first_alarm_time.present? ? alarm.first_alarm_time.strftime ("%Y-%m-%d %H:%M:%S") : ''json.last_alarm_time alarm.last_alarm_time.present? ? alarm.last_alarm_time.strftime("%Y- %m-%d %H:%M:%S") : ''
【CRT中:调用model类方法查询】 DPowerCutRecord.where(:d_station_id => ["1","2","1001"]).by_unit_yw("") -------------------------------------------------- Last login: Fri Aug 25 09:21:15 2017 from 172.168.10.84dingfj@envsafe-server:~$ cd ../envsafe/AirQueendingfj@envsafe-server:/home/envsafe/AirQueen$ sudo su envsafe [sudo] dingfj 的密码: envsafe@envsafe-server:~/AirQueen$ rails c --------------》修改文件后需要退出重新进入exit 退出rails c
#封装 按回退原因 搜素信息def self.audits @str = [] %w(停电时间超出证明范围 停电时间填写有误 停电站点与凭证中的站点名称不符 间断停电时间请分 开录入 其他).each_with_index do |statu,index| hande_no = %w(out_range info_wrong no_match sep_entry other )[index] @str << {value: statu, text: hande_no } end return @strend #封装 按来源 搜素信息def self.origins @str = [] %w(地方站报送 其它报送 市站盖章 地方供电局证明 公司盖章 其他).each_with_index do | statu,index| hande_no = %w(local_submit other_submit city_stamp local_prove company_seal other ) [index] @str << {value: statu, text: hande_no } end return @strend ------------------------------------------------
-------------------------报错信息------------------------------------Completed 500 Internal Server Error in 6ms (ActiveRecord: 0.6ms) NoMethodError (undefined method `[]' for nil:NilClass): app/controllers/ops_audit_controller.rb:28:in `update'
Parameters: {"audit_if"=>"Y", "audit_des"=>"", "id"=>"27"} DTaskForm Load (0.5ms) SELECT `d_task_forms`.* FROM `d_task_forms` WHERE `d_task_forms`.`id` = 27 LIMIT 1当前用户的SessionCode: WViY6LkSdLPq9TO9qY8DCg DLoginMsg Load (0.5ms) SELECT `d_login_msgs`.* FROM `d_login_msgs` WHERE `d_login_msgs`.`session` = 'WViY6LkSdLPq9TO9qY8DCg' LIMIT 1当前用户信息: #<DLoginMsg:0xb3351e8>当前用户的SessionCode: WViY6LkSdLPq9TO9qY8DCgCompleted 400 Bad Request in 6ms (ActiveRecord: 1.0ms) ActionController::ParameterMissing (param is missing or the value is empty: d_task_form): app/controllers/ops_audit_controller.rb:72:in `ops_audit_params' app/controllers/ops_audit_controller.rb:42:in `block in update' app/controllers/ops_audit_controller.rb:41:in `update
--------------批量审核-------------------batch_audit?batch_audit_ids=["2065","2398"]
batch_audit_ops_audit_index POST /ops_audit/batch_audit(.:format) ops_audit#batch_audit ops_audit_index GET /ops_audit(.:format) ops_audit#index POST /ops_audit(.:format) ops_audit#create new_ops_audit GET /ops_audit/new(.:format) ops_audit#new edit_ops_audit GET /ops_audit/:id/edit(.:format) ops_audit#edit ops_audit GET /ops_audit/:id(.:format) ops_audit#show PATCH /ops_audit/:id(.:format) ops_audit#update PUT /ops_audit/:id(.:format) ops_audit#update DELETE /ops_audit/:id(.:format) ops_audit#destroy
Started POST "/ops_audit/batch_audit.json" for 172.168.10.84 at 2017-09-01 16:37:51 +0800Cannot render console from 172.168.10.84! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255Processing by OpsAuditController#batch_audit as JSON Parameters: {"batch_audit_ids"=>"28,27,26"}当前用户的SessionCode: V_gaUK87N85ouf1kK924Ww DLoginMsg Load (0.5ms) SELECT `d_login_msgs`.* FROM `d_login_msgs` WHERE `d_login_msgs`.`session` = 'V_gaUK87N85ouf1kK924Ww' LIMIT 1当前用户信息: #<DLoginMsg:0xb3489230>当前用户的SessionCode: V_gaUK87N85ouf1kK924Ww DTaskForm Load (0.4ms) SELECT `d_task_forms`.* FROM `d_task_forms` WHERE `d_task_forms`.`id` = 28 (0.2ms) BEGIN SQL (0.4ms) UPDATE `d_task_forms` SET `job_status` = 'audit', `audit_time` = '2017-09-01 16:37:51', `audit_if` = 'Y', `updated_at` = '2017-09-01 16:37:51' WHERE `d_task_forms`.`id` = 28 (69.1ms) COMMIT (0.2ms) BEGIN SQL (0.3ms) INSERT INTO `d_fault_job_details` (`job_status`, `handle_man`, `begin_time`, `end_time`, `handle_status`, `d_task_form_id`, `created_at`, `updated_at`) VALUES ('audit', 'zs11', '2017-09-01 16:37:51', '2017-09-01 16:37:51', '完成', 28, '2017-09-01 16:37:51', '2017-09-01 16:37:51') (25.3ms) COMMITCompleted 200 OK in 128ms (Views: 1.3ms | ActiveRecord: 96.4ms)---------------------按数据查询------------------------- #按站点id查询 scope :by_station_id, ->(station_ids){ where(d_station_id: station_ids) if station_ids.present? } #按创建时间查询 scope :by_time, ->(created_time,end_time) { where(created_at: (created_time)..end_time) if created_time.present? && end_time.present? }-----------------------------------------------------------------------【关联表数据的保存】#保存工单日志 (通过不通过均保存日志信息) #@d_fault_job_detail=DFaultJobDetail.new(:job_status => @ops_audit.job_status,:handle_man => handle_man,:begin_time => Time.now,:end_time =>Time.now,:handle_status =>handle_status,:d_task_form_id =>@ops_audit.id) @d_fault_job_detail=@ops_audit.d_fault_job_details.new(:job_status => @ops_audit.job_status,:handle_man => handle_man,:begin_time => Time.now,:end_time =>Time.now,:handle_status =>handle_status) @d_fault_job_detail.save-------------------------【关联查询省份信 息】--------------------------------------------------- area = ops.s_administrative_area province = area.zone_name == "北京市" ? area.zone_name : area.parent.zone_name json.id ops.id json.procince province ----------------审核查询条件------------------ http://172.168.10.7:3030/ops_audit_manages/plan_audit.json? handle_station=1001&week_time=2017-08-28%2000:00:00&edit_status=W Started GET "/ops_audit_manages/plan_audit.json?plan_audit_params%5B0%5D%5Bparam%5D %5Bweek_time%5D=2017-09-04&plan_audit_params%5B0%5D%5Bparam%5D%5Bhandle_station%5D%5B %5D=1001&plan_audit_params%5B1%5D%5Bparam%5D%5Bweek_time%5D=2017-09-11&plan_audit_params %5B1%5D%5Bparam%5D%5Bhandle_station%5D%5B%5D=1001&edit_status=W" for 172.168.10.84 at 2017 -09-15 17:24:13 +0800Cannot render console from 172.168.10.84! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255Processing by OpsAuditManagesController#plan_audit as JSON Parameters: {"plan_audit_params"=>{"0"=>{"param"=>{"week_time"=>"2017-09-04", "handle_station"=>["1001"]}}, "1"=>{"param"=>{"week_time"=>"2017-09-11", "handle_station"=>["1001"]}}}, "edit_status"=>"W"}当前用户的SessionCode: bnCFWOZa-VzuTq4S36iXxw DLoginMsg Load (0.6ms) SELECT `d_login_msgs`.* FROM `d_login_msgs` WHERE `d_login_msgs`.`session` = 'bnCFWOZa-VzuTq4S36iXxw' LIMIT 1当前用户信息: #<DLoginMsg:0xac03e2f4>当前用户的SessionCode: bnCFWOZa-VzuTq4S36iXxwCompleted 500 Internal Server Error in 4ms (ActiveRecord: 0.6ms) TypeError (no implicit conversion of String into Integer): app/controllers/ops_audit_manages_controller.rb:24:in `[]' app/controllers/ops_audit_manages_controller.rb:24:in `block in plan_audit' app/controllers/ops_audit_manages_controller.rb:23:in `plan_audit'
Rendered vendor/bundle/ruby/2.3.0/gems/actionpack- 4.2.6/lib/action_dispatch/middleware/templates/rescues/_source.erb (4.7ms) Rendered vendor/bundle/ruby/2.3.0/gems/actionpack- 4.2.6/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (1.0ms) Rendered vendor/bundle/ruby/2.3.0/gems/actionpack- 4.2.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (1.3ms) Rendered vendor/bundle/ruby/2.3.0/gems/actionpack- 4.2.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb (38.0ms)^Cenvsafe@envsafe-server:~/AirQueen/log$ no implicit conversion of String into Integer^C -------------------封装参数---------- Parameters: {"plan_details_params"=>{"params"=>{"0"=>{"id"=>"26", "job_time"=>"2017-09- 12"}, "1"=>{"id"=>"27", "job_time"=>"2017-09- 12"}}}, "id"=>"8"} plan_details_params=params[:plan_details_params][:params] #获取到参数 plan_details_params.each do |params| @ops_plan_detail=@ops_plan.d_ops_plan_details.find_by(:d_work_pro_id =>params[1]['id']) @ops_plan_detail.job_time=params[1]['job_time'] Parameters: {"plan_audit_params"=>{"0"=>{"param"=>{"week_time"=>"2017-09-04", "handle_station"=>["1001"]}}, "1"=>{"param"=>{"week_time"=>"2017-09-11", "handle_station"=>["1001"]}}}, "edit_status"=>"W"} plan_audit_params = params[:plan_audit_params] #是一个数组 edit_if = params[:edit_status] #审核内容 plan_audit_params.each do |param| week_time = param['param']['week_time'] d_station_id = param['param']['handle_station'] @ops_plans = DOpsPlanManage.where(d_station_id: d_station_id, week_begin_time: week_time) -----each后-----》 ["0", {"param"=>{"week_time"=>"2017-09-04", "handle_station"=>["1001"]}}] ------------图片上传--------------------------- Started POST "/power_cut_records" for 172.168.10.84 at 2017-09-19 18:09:32 +0800Cannot render console from 172.168.10.84! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255Processing by PowerCutRecordsController#create as HTML Parameters: {"utf8"=>"✓", "d_power_cut_record"=>{"station_name"=>"平顶山市-高压开关厂", "d_station_id"=>"1831", "begin_time"=>"2017-09-19 06:40", "end_time"=>"2017-09-20 06:02", "time_range"=>"5", "exception_name"=>"", "exception_device_type"=>"on", "handle_man"=>"lmg", "origin"=>"其他"}, "image_file"=>#<ActionDispatch::Http::UploadedFile:0xc999bb4 @tempfile=#<Tempfile:/tmp/RackMultipart20170919-2211-p7gtz3.png>, @original_filename="商丘 运维模块图0906.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"image_file\"; filename=\"\xE5\x95\x86\xE4\xB8\x98\xE8\xBF\x90\xE7\xBB \xB4\xE6\xA8\xA1\xE5\x9D\x97\xE5\x9B\xBE0906.png\"\r\nContent-Type: image/png\r\n">}Can't verify CSRF token authenticityCompleted 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms) #上传图片 多个图片 def upload_img(tasks,id) picture = "img#{Time.now.strftime('%Y%m%d%H%M%S')}.jpg" tasks.each_value do |task| handle_type = task['handle_type'] image_file = task['image_file'] Rails.logger.info ">>>>>#{handle_type}" png = Base64.decode64(image_file['data:image/jpeg;base64,'.length .. -1]) #向dir目录写入文件 File.open(Rails.root.join("public","task_app_images", picture ), 'wb') { |f| f.write(png) } #创建或者修改上传图片记录 if @handle = DFaultHandle.find_by(:d_task_form_id =>id,:handle_type =>handle_type).blank? @handle = DFaultHandle.create(:handle_man =>@current_user.login_name,:handle_type => handle_type,:handle_time =>Time.now,:d_task_form_id => id,:img_one => "task_app_images/#{picture}") else @handle = DFaultHandle.find_by(:d_task_form_id =>id,:handle_type=> handle_type) @handle.update(:img_one => "task_app_images/#{picture}",:handle_time =>Time.now) end end ---------------------------------------------------- #只保存图片到本地文件 def save if filename=uploadFile(params[:file]['file']) redirect_to :action => "index" end end def uploadFile(file) if !file.original_filename.empty? @filename=getFileName(file.original_filename) File.open("d:/#{@filename}", "wb") do |f| f.write(file.read) end return @filename end end def getFileName(filename) if !filename.nil? return filename end end #保存到项目中 def upload uploaded_io = params['file'] File.open(Rails.root.join('public', uploaded_io.original_filename), 'wb') do |file| file.write(uploaded_io.read) end redirect_to :action => "index" end -------------------图片上传的参数---------------------------- Parameters: {"task"=>{"tasks"=>{"0"=>{"id"=>"151", "handle_type"=>"每周(次)巡检工作汇总表 ", "image_file"=>"data:image/jpeg;base64,/9j/4QlRRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAA AABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAA ANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzADIwMTc6MDk6MjEgMTI6NTk6NTAAAAA AA6ABAAMAAAAB//8AAKACAAQAAAABAAAAlqADAAQAAAABAAAAggAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAA EeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAgbAAAAAAAAAEgAAAABAAAASAAAA AH/2P/tAAxBZG9iZV9DTQAC/ +4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwM DAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwM/8AAEQgAggCWAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCA kKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGF JGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV 5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8F S0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hp amtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkL7Tjjm1n+cElJUkL7Tjf6Vn +cEvtON/pWf5wSUlSQvtON/pWf5wS+043+lZ/nBJSVJC+043+lZ/nBL7Tjf6Vn+cElJUkL7Tjf6Vn +cFNr2PEscHDxBlJTJJJJJSkkkklKSSSSU//0PVUkkklKSSSSU4P1szLqMWumpxZ6zjvI0O0D6KxX/VzqH2avJqaL22 NDi1v0hPkfpLT+uf0Mb4u/Itzpv8Ayfj/APFt/Igp8+dWWO2PaWOGhBEELSw+iV5o/QZtJf3Y4Oa4f2XLr8vp +HmN25FTX+DuHD+0PcsDN+qVjT6mBbujUVv0d/ZsCVKR/wDM3M/09X3OS/5m5n+nq +5yFV1jrXSninLa6xg/MtmY/kW/+drcwfrJ07Lhr3fZ7D +bZoP7L/opaKcj/mbmf6er7nJf8zcz/T1fc5dWCCJGoKdGlPJ/8zcz/T1fc5AwDldI62zENm5rnBlgbO0h38krs1yHU P8AxUt/4yv8iCnr0kkkVKSSSSUpJJJJT//R9VSSSSUpJJJJTzX1z +hjfF35FudN/wCT8f8A4tv5Fh/XP6GN8XfkW503/k/H/wCLb +RJTZSSSSUwtpquYa7mNsYeWuEj8Vh531TxbZfhvND/ANw +5n/k2rfSSU8WLetdBtaywn0idGE7q3AfS2/ursMe5uRRXe3RtjQ4DwkSsD65fzWN/Wd +QLX6R/yZjf8AFtQU3FyHUP8AxUt/4yv8i69ch1D/AMVLf +Mr/IkVPXpJJIqUkkkkpSSSSSn/0vVUkkklKSSSSU819c/oY3xd+RbnTf8Ak/H/AOLb+RYf1z +hjfF35FudN/5Px/8Ai2/kSU2UkkklKSSSSU859cv5rG/rO/IFr9I/5Mxv+Lasj65fzWN/Wd +QLX6R/wAmY3/FtQ6qbi5DqH/ipb/xlf5F165DqH/ipb/xlf5Eip69JJJFSkkkklKSSSSU/wD/0/VUkkklKSSSSU819 c/oY3xd+RbnTf8Ak/H/AOLb+RYf1z +hjfF35FudN/5Px/8Ai2/kSU2UkkklKWB1jrGZidWox6SBTDS9pAO7cSPpLfXJfWMH9u0CNS2uPP3OSKm19cv5rG/rO /IFr9I/5Mxv+Lasj65fzWN/Wd +QLX6R/wAmY3/FtQ6qbi5DqH/ipb/xlf5F165DqH/ipb/xlf5Eip69JJJFSkkkklKSSSSU/wD/1PVUkkklKSSSSU819 c/oY3xd+RbnTf8Ak/H/AOLb+RYf1z+hjfF35FudN/5Px/8Ai2/kSU2UkkklKQ30Uve2x7Guez6DiJI +CIkkp5z65fzWN/Wd+QLX6R/yZjf8W1ZH1y/msb+s78gWv0j/AJMxv +Lah1U3FyHUP/FS3/jK/wAi69ch1D/xUt/4yv8AIkVPXpJJIqUkkkkpSSSSSn//1fVUkkklKSSSSU4P1txLr8Wq6ppe KXHeBqQCPpKt0v6001U14+VWWhgDRazUQP3mLp1nZ3Qem5kufX6dh/wlftPz/Nckpt42Zi5TN +Pa2weR1H9Zv0moy5HJ+rXU8N/rYNhtDdRtO2wf +ST431n6jiP9HOr9WOdw2v8A/MkLU9aks/C6707MgMsDLD/g3+0rQRU859cv5rG/rO/IFn431n6hj0V0MrqLK2hrSWu mB/bWh9cv5rG/rO/IFrdJY09MxpA/m29kOqnnf+d3U/8ARU/5rv8Ayaj02rN6t1hubYzaxrg+xwBDfbw1u5dfsZ +6PuTgAcCEVLpJJJKUkkkkpSSSSSn/1vVUkkklKSSSSUpJJJJSkDJwsXLZsyKm2DzGv3o6SSnm836oMMvwbdp5Fdmo/ svVBuX1/oztlocah2f7mH +rYuzTOa17S14DmnkESClSniesda/atdDBUa31kl2sgk6exdd06p9OBj1PEPbW0OHgY4UauldOpt9avHY2zndHHw/dV tJSkkkklKSSSSUpJJJJSkkkklP/1/VUl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp +qkl8qpJKfqpJfKqSSn6qSXyqkkp +qkl8qpJKf/2f/tED5QaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAAAAAAAAAAAAAAA4QklNBDoAAAAAAJMA AAAQAAAAAQAAAAAAC3ByaW50T3V0cHV0AAAABQAAAABDbHJTZW51bQAAAABDbHJTAAAAAFJHQkMAAAAASW50ZWVudW0 AAAAASW50ZQAAAABDbHJtAAAAAE1wQmxib29sAQAAAA9wcmludFNpeHRlZW5CaXRib29sAAAAAAtwcmludGVyTmFtZV RFWFQAAAABAAAAOEJJTQQ7AAAAAAGyAAAAEAAAAAEAAAAAABJwcmludE91dHB1dE9wdGlvbnMAAAASAAAAAENwdG5ib 29sAAAAAABDbGJyYm9vbAAAAAAAUmdzTWJvb2wAAAAAAENybkNib29sAAAAAABDbnRDYm9vbAAAAAAATGJsc2Jvb2wA AAAAAE5ndHZib29sAAAAAABFbWxEYm9vbAAAAAAASW50cmJvb2wAAAAAAEJja2dPYmpjAAAAAQAAAAAAAFJHQkMAAAA DAAAAAFJkICBkb3ViQG/gAAAAAAAAAAAAR3JuIGRvdWJAb +AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1JsdAAA AAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBSAAAAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1B zAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudE YjUHJjQFkAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD +AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAA AoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoA AAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A +gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD///////// ////////////////////A +gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAAM5AAAABgAAAAAA AAAAAAAAggAAAJYAAAACAHcAeQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAlgAAAIIAAAAAAAAAAAA AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAA AAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAIIAAAAAUmdodGxvb mcAAACWAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAA B2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR 5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcC Bsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAACCAAAAAFJnaHRsb25nAAAAlgAAAAN1cmxURVhUA AAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2Vs bFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J 6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2 JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAAC mxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhC SU0EKAAAAAAADAAAAAI/8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAINwAAAAE AAACWAAAAggAAAcQAAOWIAAAIGwAYAAH/2P/tAAxBZG9iZV9DTQAC/ +4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwM DAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwM/8AAEQgAggCWAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCA kKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGF JGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV 5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8F S0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hp amtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkL7Tjjm1n+cElJUkL7Tjf6Vn +cEvtON/pWf5wSUlSQvtON/pWf5wS+043+lZ/nBJSVJC+043+lZ/nBL7Tjf6Vn+cElJUkL7Tjf6Vn +cFNr2PEscHDxBlJTJJJJJSkkkklKSSSSU//0PVUkkklKSSSSU4P1szLqMWumpxZ6zjvI0O0D6KxX/VzqH2avJqaL22 NDi1v0hPkfpLT+uf0Mb4u/Itzpv8Ayfj/APFt/Igp8+dWWO2PaWOGhBEELSw+iV5o/QZtJf3Y4Oa4f2XLr8vp +HmN25FTX+DuHD+0PcsDN+qVjT6mBbujUVv0d/ZsCVKR/wDM3M/09X3OS/5m5n+nq +5yFV1jrXSninLa6xg/MtmY/kW/+drcwfrJ07Lhr3fZ7D +bZoP7L/opaKcj/mbmf6er7nJf8zcz/T1fc5dWCCJGoKdGlPJ/8zcz/T1fc5AwDldI62zENm5rnBlgbO0h38krs1yHU P8AxUt/4yv8iCnr0kkkVKSSSSUpJJJJT//R9VSSSSUpJJJJTzX1z +hjfF35FudN/wCT8f8A4tv5Fh/XP6GN8XfkW503/k/H/wCLb +RJTZSSSSUwtpquYa7mNsYeWuEj8Vh531TxbZfhvND/ANw +5n/k2rfSSU8WLetdBtaywn0idGE7q3AfS2/ursMe5uRRXe3RtjQ4DwkSsD65fzWN/Wd +QLX6R/yZjf8AFtQU3FyHUP8AxUt/4yv8i69ch1D/AMVLf +Mr/IkVPXpJJIqUkkkkpSSSSSn/0vVUkkklKSSSSU819c/oY3xd+RbnTf8Ak/H/AOLb+RYf1z +hjfF35FudN/5Px/8Ai2/kSU2UkkklKSSSSU859cv5rG/rO/IFr9I/5Mxv+Lasj65fzWN/Wd +QLX6R/wAmY3/FtQ6qbi5DqH/ipb/xlf5F165DqH/ipb/xlf5Eip69JJJFSkkkklKSSSSU/wD/0/VUkkklKSSSSU819 c/oY3xd+RbnTf8Ak/H/AOLb+RYf1z +hjfF35FudN/5Px/8Ai2/kSU2UkkklKWB1jrGZidWox6SBTDS9pAO7cSPpLfXJfWMH9u0CNS2uPP3OSKm19cv5rG/rO /IFr9I/5Mxv+Lasj65fzWN/Wd +QLX6R/wAmY3/FtQ6qbi5DqH/ipb/xlf5F165DqH/ipb/xlf5Eip69JJJFSkkkklKSSSSU/wD/1PVUkkklKSSSSU819 c/oY3xd+RbnTf8Ak/H/AOLb+RYf1z+hjfF35FudN/5Px/8Ai2/kSU2UkkklKQ30Uve2x7Guez6DiJI +CIkkp5z65fzWN/Wd+QLX6R/yZjf8W1ZH1y/msb+s78gWv0j/AJMxv +Lah1U3FyHUP/FS3/jK/wAi69ch1D/xUt/4yv8AIkVPXpJJIqUkkkkpSSSSSn//1fVUkkklKSSSSU4P1txLr8Wq6ppe KXHeBqQCPpKt0v6001U14+VWWhgDRazUQP3mLp1nZ3Qem5kufX6dh/wlftPz/Nckpt42Zi5TN +Pa2weR1H9Zv0moy5HJ+rXU8N/rYNhtDdRtO2wf +ST431n6jiP9HOr9WOdw2v8A/MkLU9aks/C6707MgMsDLD/g3+0rQRU859cv5rG/rO/IFn431n6hj0V0MrqLK2hrSWu mB/bWh9cv5rG/rO/IFrdJY09MxpA/m29kOqnnf+d3U/8ARU/5rv8Ayaj02rN6t1hubYzaxrg+xwBDfbw1u5dfsZ +6PuTgAcCEVLpJJJKUkkkkpSSSSSn/1vVUkkklKSSSSUpJJJJSkDJwsXLZsyKm2DzGv3o6SSnm836oMMvwbdp5Fdmo/ svVBuX1/oztlocah2f7mH +rYuzTOa17S14DmnkESClSniesda/atdDBUa31kl2sgk6exdd06p9OBj1PEPbW0OHgY4UauldOpt9avHY2zndHHw/dV tJSkkkklKSSSSUpJJJJSkkkklP/1/VUl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp +qkl8qpJKfqpJfKqSSn6qSXyqkkp +qkl8qpJKf/2QA4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEA ZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTADUAAAABADhCSU0EBgAAAAAABwAIAAAAAQEA/ +EN9Gh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhp SHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmU gWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERi B4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2Nya XB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRj PSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmU uY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG 1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZ WF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcDpDcmVhdGVEYXRlPSIyMDE3LTA5LTIxVDEy OjQ5KzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxNy0wOS0yMVQxMjo1OTo1MCswODowMCIgeG1wOk1ldGFkYXRhRGF 0ZT0iMjAxNy0wOS0yMVQxMjo1OTo1MCswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3 JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBBMkRGRjg2ODk5RUU3MTE5QzlBODMxN0Y5M0ZGMzM4I iB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5MkRGRjg2ODk5RUU3MTE5QzlBODMxN0Y5M0ZGMzM4IiB4bXBNTTpP cmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDkyREZGODY4OTlFRTcxMTlDOUE4MzE3RjkzRkYzMzgiPiA8eG1wTU0 6SGlzdG9yeT4gPHJkZjpTZXE +IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjA5MkRGRjg2OD k5RUU3MTE5QzlBODMxN0Y5M0ZGMzM4IiBzdEV2dDp3aGVuPSIyMDE3LTA5LTIxVDEyOjQ5KzA4OjAwIiBzdEV2dDpzb 2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNv bnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9wbmcgdG8gaW1hZ2UvanBlZyIvPiA8cmRmOmxpIHN 0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MEEyREZGODY4OTlFRTcxMTlDOUE4Mz E3RjkzRkYzMzgiIHN0RXZ0OndoZW49IjIwMTctMDktMjFUMTI6NTk6NTArMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlb nQ9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE +IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI CAgPD94cGFja2V0IGVuZD0idyI/Pv/uAA5BZG9iZQBkQAAAAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAQEBAQICAQICAwMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//AABEIAIIAlgMBEQACEQEDEQH/3QAEABP/xAGiAAAABg IDAQAAAAAAAAAAAAAHCAYFBAkDCgIBAAsBAAAGAwEBAQAAAAAAAAAAAAYFBAMHAggBCQAKCxAAAgEDBAEDAwIDAwMCB gl1AQIDBBEFEgYhBxMiAAgxFEEyIxUJUUIWYSQzF1JxgRhikSVDobHwJjRyChnB0TUn4VM2gvGSokRUc0VGN0djKFVW VxqywtLi8mSDdJOEZaOzw9PjKThm83UqOTpISUpYWVpnaGlqdnd4eXqFhoeIiYqUlZaXmJmapKWmp6ipqrS1tre4ubr ExcbHyMnK1NXW19jZ2uTl5ufo6er09fb3+Pn6EQACAQMCBAQDBQQEBAYGBW0BAgMRBCESBTEGACITQVEHMmEUcQhCgS ORFVKhYhYzCbEkwdFDcvAX4YI0JZJTGGNE8aKyJjUZVDZFZCcKc4OTRnTC0uLyVWV1VjeEhaOzw9Pj8ykalKS0xNTk9 JWltcXV5fUoR1dmOHaGlqa2xtbm9md3h5ent8fX5/dIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra 6vr/2gAMAwEAAhEDEQA/AN/j37r3Xvfuvde9+691737r3Xvfuvde9+691737r3Xvfuvde9+691737r3Xvfuvde9+691 737r3Xvfuvde9+691737r3Xvfuvde9+691737r3X/0N/j37r3Xvfuvde9+691737r3XRIAJJAABJJNgAOSSTwAB7917 pHSdjdewu0Uu +9mxSIxV45Nz4RHRgbFWRq4MrA/UH3qo9evdcP9JXXP/Pf7K/9CrBf/V/v1R69e69/pK65/wCe/wBlf +hVgv8A6v8Afqj16917/SV1z/z3+yv/AEKsF/8AV/v1R69e69/pK65/57/ZX/oVYL/6v9+qPXr3Xv8ASV1z/wA9/sr/ ANCrBf8A1f79UevXuvf6Suuf+e/2V/6FWC/+r/fqj16917/SV1z/AM9/sr/0KsF/9X +/VHr17pR4vM4jOU33mFyuNy9IHMZqsXXUuQphIACU89JLNFrAI4vfn3vjw6905e/de697917r3v3Xuve/de697917r //R3+Pfuvde9+691737r3XvfuvdVPfzYu4949fdWbK2VtHL12Bj7EzeTh3NkcZPLR5CbA4WgWrOKpq2B0mp48hVSKJ9 BVmjXSCAT7TXLlVAHn1Vjw6rHzP8uj5CDrnavaW1cbiOysburb1BuSfE7amqJN0YuPJQR1ENLJj8gqTZurCyjWaUvYg /Uc +2fAfSGGetaT0SLI4CrwmTkxGfxVXgshTVH29bR5TH1FJWUZSTxzGSkmjSdvDYkhQSbWHPtmlDQ4610dbpz4S7c73ii Trz5NdNVeZMCz1W1sviN24Hc9F9FdZMPlqOkq54lc6RLErxva6n26sSv8Mgr1unz6Mb/wAM49uf8/X6v/8APRuj/wCp /bn0zfxDrenr3/DOPbn/AD9fq/8A89G6P/qf376Zv4h17T17/hnHtz/n6/V//no3R/8AU/v30zfxDr2nr3/DOPbn/P1 +r/8Az0bo/wDqf376Zv4h17T17/hnHtz/AJ+v1f8A+ejdH/1P799M38Q69p6DToSXs74Y/NfbfTU +7Y8xi8nuHB7V3jj8RPkG2xm8XuajWopqylxdeUNLk8ZO6MkmlGDKwJZD7qmqKUJXrwrWnWy97XdW697917r3v3Xuve /de697917r/9Lf49+691737r3Xvfuvde9+691SH/OW/wCLN0l/2st4f +6um9pLrgvVW49WofG7/mQPTv8A4jva3/uqp/alPgX7OrdZ +2Pj5053fQPQ9mbCwe45TF4oMu9P9luCiCq4hNJnaFqfJxpAz6liMjQlgNSMOPfmRX+IdapXqozun +UnnsTPLuT4974bIvRSmtoNq7uqVxWfpZYrGIYTd1EsFFLXGQko1QlAsaj/ADpPtM1t5oetFfToENqfMP5pfELNU2ze 4MJmtz4WmYxRYHtCmrY6+ejp3CyPtrf0Ec02QgZz/wACZDlIzey24tQSyxkB +Hz/AM/WqkdWldHfzHvjv3B9pi8zm36s3bUeOM4XfUlPQYupqGGkrjN0pI2CnV5SFiSeWmqZSRaG/HtQs6NxND1ao6P zDNFURRzwSxzQzIksU0TrJFLHIodJI5EJV0dSCCCQQfb3W+snv3Xuve/de61yvkD/ANvRsF/4kDrT/wBwIPaJv9yR +XVR8X59bGvtb1br3v3Xuve/de697917r3v3Xuv/09/j37r3Xvfuvde9+691737r3VIf85b/AIs3SX/ay3h/7q6b2ku uC9Vbj1ah8bv+ZA9O/wDiO9rf+6qn9qU+Bfs6t0Nnu3Xuve/de6Tm69n7U31hanbm89uYTdWBrB/lOIz +Mo8tj5WCsqyGlrYZolmjDHQ4AdDypB96IBFCMde6q07x/lO9Zbr +7zPSu4a3rXMvrlXbmVNRuLZ1RJYt4oGqJ/49hjPITdxUVUMS2CQAC3tO9upyhoeq6R0QKLdfzN/l3bpweI3FW1X9y6 2snbH4Gqy/96etd10tDJE+UiwqSvHWYGpZJlLPHFjqs3BsyA +2aywkA8P5dayOtjvr7eVB2JsXZ2/MXE9Pj947awu5KWmldZJqSPMY +nrvs5pFVVeejaYxOQAC6G3Htcp1AN69X6WHvfXutcr5A/8Ab0bBf+JA60/9wIPaJv8Ackfl1UfF +fWxr7W9W697917r3v3Xuve/de697917r//U3+Pfuvde9+691737r3XvfuvdUh/zlv8AizdJf9rLeH/urpvaS64L1Vu PVqHxu/5kD07/AOI72t/7qqf2pT4F+zq3Q2e7de697917r3v3Xuve/de6pY/nIf8AHr9Hf +HFu/8A91GP9pbngn29Vby6se+JH/ZM3R//AIjnbn/uGvt+L+zT7OtjgOjE +79b61yvkD/29GwX/iQOtP8A3Ag9om/3JH5dVHxfn1sa +1vVuve/de697917r3v3Xuve/de6/9Xf49+691737r3Xvfuvde9+691SH/OW/wCLN0l/2st4f +6um9pLrgvVW49WofG7/mQPTv8A4jva3/uqp/alPgX7OrdDZ7t17r3v3Xuve/de697917qlj +ch/wAev0d/4cW7/wD3UY/2lueCfb1VvLqx74kf9kzdH/8AiOduf+4a+34v7NPs62OA6MT7v1vrXK+QP/b0bBf +JA60/wDcCD2ib/ckfl1UfF +fWxr7W9W697917r3v3Xuve/de697917r/1t/j37r3Xvfuvde9+691737r3VIf85b/AIs3SX/ay3h/7q6b2kuuC9Vbj 1ah8bv+ZA9O/wDiO9rf+6qn9qU +Bfs6t0Nnu3Xuve/de697917r3v3XuqWP5yH/AB6/R3/hxbv/APdRj/aW54J9vVW8urHviR/2TN0f/wCI525/7hr7fi /s0+zrY4DoxPu/W+tcr5A/9vRsF/4kDrT/ANwIPaJv9yR +XVR8X59bGvtb1br3v3Xuve/de697917r3v3Xuv/X3+Pfuvde9+691737r3XvfuvdUh/zlv8AizdJf9rLeH/urpvaS6 4L1VuPVqHxu/5kD07/AOI72t/7qqf2pT4F +zq3Q2e7de697917r3v3XuqjfmD8xO4unPlf1b1rsrIYyk2RJj9nZDc2GqcRja2TdD7l3FkMfWw1WSqqWbI42Gmx9Ii wfZywMspZ3LgqqppZGWRVHDqpJB6RX85D/j1+jv8Aw4t3/wDuox/vVzwT7evN5dWPfEj/ALJm6P8A/Ec7c/8AcNfb8X 9mn2dbHAdGJ93631rlfIH/ALejYL/xIHWn/uBB7RN/uSPy6qPi/PrY19rerde9+691737r3Xvfuvde9+691//Q3+Pfu vde9+691737r3XvfuvdUh/zlv8AizdJf9rLeH/urpvaS64L1VuPVqHxu/5kD07/AOI72t/7qqf2pT4F +zq3Q2e7de697917r3v3Xutef +YrBO3zs6vhWGVpq/A9VpQxLG7SVrvvLNU6pSIAWqHaoUoAtzr4+vtFP/bL9g/w9VPHocf5yH/Hr9Hf +HFu/wD91GP93ueCfb15vLqx74kf9kzdH/8AiOduf+4a+34v7NPs62OA6MT7v1vrXK+QP/b0bBf +JA60/wDcCD2ib/ckfl1UfF +fWxr7W9W697917r3v3Xuve/de697917r/0d/j37r3Xvfuvde9+691737r3VIf85b/AIs3SX/ay3h/7q6b2kuuC9Vbj 1ah8bv+ZA9O/wDiO9rf+6qn9qU +Bfs6t0Nnu3Xuve/de697917pMZXZW0M5nMLuXM7ZwWV3DtwyNgc1X4yjqsliGkOpjQVc0TzU5D +pdJGh/Utm596oCQaZ691T/wDzkP8Aj1+jv/Di3f8A+6jH +01zwT7eqt5dWPfEj/smbo//AMRztz/3DX2/F/Zp9nWxwHRifd +t9a5XyB/7ejYL/wASB1p/7gQe0Tf7kj8uqj4vz62Nfa3q3Xvfuvde9+691737r3Xvfuvdf//S3+Pfuvde9+691737r 3XvfuvdUh/zlv8AizdJf9rLeH/urpvaS64L1VuPVqHxu/5kD07/AOI72t/7qqf2pT4F +zq3Q2e7de697917r3v3Xuve/de6pY/nIf8AHr9Hf+HFu/8A91GP9pbngn29Vby6se+JH/ZM3R//AIjnbn/uGvt+L +zT7OtjgOjE+79b61yvkD/29GwX/iQOtP8A3Ag9om/3JH5dVHxfn1sa +1vVuve/de697917r3v3Xuve/de6/9Pf49+691737r3Xvfuvde9+691Ux/Nm6j3fvzq/Yu89qYavztP1/nMtLuekxdP NW11Jg8xjRT/xWOjp0lnlpqGphBnZVPijOs+kE+01ypZQQOHVW9egb +Ln80jZu1tn7Q627f2hX4qj21iKDb9FvjabjK0U1LQRR01PPmMBUPHWUfjhjvLLTT1Rdv0wD3WO4AADDrwb16uE647e 6x7dxS5rrXfG3t4UPjSWYYmuR66iSQlU/iWJnEOVxTuRwtTBExHIFvalWVhVTXq3Qj +7de697917r3v3XuqWf5x/O2OjR/2ce7v/AHU4/wBpbngn29Vby6KL13/M47/602LtPYGA2T1bWYbaOEosFjavJ7f3n UZGppKGPxQzVk1JvKkpZahlHqMcUaH8KPbazuqhQooPt/z9ar0s/wDh3D5Lf88D0/8A +gzvv/7O/dvqZP4B/P8Az9e1Hpi+OG1+5fmJ8w8D3vuTawxGDw+4MVuvd2dx+JyeI2nTU+36QU +NwWCnyc9ZNW5GsmVBoE9TIi6nkKrY +6oGllDkYr14ZNetkr2u6v1737r3Xvfuvde9+691737r3X//1N/j37r3Xvfuvde9+691737r3XTKrqyOqsjKVZWAZWV hZlZTcFSDyPfuvdE27t +B3xy7xasyOX2dFtPdlX5HO8NkGPAZeSpe1qjIwU8RxmadPwKuCYC/tpoUbyoetUHVUnY/8tf5K9H5Y7z6C3fU71ixs xqqCXbdfNtHsOh0vaHx061EeNytUiAFnimg/wBpj/HtOYJENUNf8PWqEdZutP5m3yG6aykezO/tm1G8o6FhBUR52gm2 fv8ApYYbxao6mWmjosumr1PPNDK0ukaZOb+/LO6mjiv +HrVT1bD0p85vjp3itNR4HetNtzc0yDXtTefjwGWEgVQ4pZamX +H10ZlJWMxza5LX0C4HtQkqPwOerVHRvQQQCCCCLgjkEH6EH8g+3et9Us/zkP8Aj1+jv/Di3f8A+6jH +0tzwT7eqt5dWH/E3FYub409Iyy42glkfrrbrPJJR0zu7GjW7MzRlmY/knk+3ogPDT7Otjh0Yb +DYf8A51WN/wDOGl/69e70Hp1vqZBT09MnjpoIaeO9/HBEkSXP1OmNVW597691m9+691737r3Xvfuvde9+691737r3X //V3+Pfuvde9+691737r3Xvfuvde9+691737r3XvfuvdBh2X0v1Z3DipcP2Tsbb27KSRQEkyePheup2VWEclJkUVK6m eItddEgAYA2491ZVbDCvXqV6qf7q/lFYmpaozXQu958RURs1RBtHery11GskamRExm4qdRX0s7zWEfmUpGAPVxf2ne2 HFD1XT0VHHds/PX4O18OH3dSbhrdoU0vgix28Ip937LrIYWEs64PdcDSz0RdQAZRKQo4C +2w00OCMdayOkb8vfmevy7291XhIOvqza24tq1+ZqcosGTizFBl8jmoKGioqTb0cKLkGiHifV541kLFQoPPuskvihRp p14mtOtir47bXymyuieo9rZynkpMzhevtr0mVoplKTUOQ/hVPLWUM6n9M9FPI0T/7Uh9rYwQig8adX4dDL7v17r3v3X uve/de697917r3v3Xuve/de697917r/9bf49+691737r3Xvfuvde9+691737r3Xvfuvde9+691737r3XvfuvdQcljMb maGpxeXx9DlcZWxGGsx2SpIK6hq4SQTFU0lVHLTzxEgHS6kce/de6BHa/xa+POy91ne +2Oo9m4jdHnNVFlIMe0ho6kv5FqMdR1Ms2Pxk8bi6PTxRNGf0ke6CNAahRXrVB0Pnu/W +ve/de697917r3v3Xuve/de697917r3v3Xuve/de6//X3+Pfuvde9+691737r3Xvfuvde9+691737r3Xvfuvde9+691 737r3Xvfuvde9+691737r3Xvfuvde9+691737r3Xvfuvde9+691737r3Xvfuvdf/Z"}}}, "job_status"=>"deal_with", "id"=>"280"}
|
请发表评论