diff --git a/CHANGELOG.md b/CHANGELOG.md
index b72ee2b8f..313f90720 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- Improved the development and production documentations
- Improved the style of the titles of the subscription page
- Check the status of the assets' compilation during the upgrade
+- Footprints are now generated in a more reproductible way
- Fix a bug: build status badge is not working
- Fix a bug: unable to set date formats during installation
- Fix a bug: unable to cancel the upgrade before it begins
@@ -17,6 +18,7 @@
- [BREAKING CHANGE] GET `open_api/v1/invoices` won't return `invoiced_id`, `invoiced_type` OR `invoiced.created_at` anymore. The new field `main_object` will contain the equivalent data.
- [TODO DEPLOY] `rails fablab:stripe:set_gateway`
- [TODO DEPLOY] `rails fablab:maintenance:rebuild_stylesheet`
+- [TODO DEPLOY] `rails fablab:chain:all`
- [TODO DEPLOY] `\curl -sSL https://raw.githubusercontent.com/sleede/fab-manager/master/scripts/rename-adminsys.sh | bash`
## v4.7.11 2021 May 26
diff --git a/app/services/footprint_service.rb b/app/services/footprint_service.rb
index 42b16e066..bba873277 100644
--- a/app/services/footprint_service.rb
+++ b/app/services/footprint_service.rb
@@ -38,7 +38,7 @@ class FootprintService
# Return an ordered array of the columns used in the footprint computation
# @param klass {Class} a class inheriting from Footprintable
def footprint_columns(klass)
- klass.columns.map(&:name).delete_if { |c| %w[footprint updated_at].concat(klass.columns_out_of_footprint).include? c }
+ klass.columns.map(&:name).delete_if { |c| %w[footprint updated_at].concat(klass.columns_out_of_footprint).include? c }.sort
end
# Logs a debugging message to help finding why a footprint is invalid
diff --git a/db/structure.sql b/db/structure.sql
index b19c1e543..4b15901d7 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -5213,6 +5213,14 @@ CREATE INDEX profiles_lower_unaccent_last_name_trgm_idx ON public.profiles USING
CREATE INDEX projects_search_vector_idx ON public.projects USING gin (search_vector);
+--
+-- Name: accounting_periods accounting_periods_del_protect; Type: RULE; Schema: public; Owner: -
+--
+
+CREATE RULE accounting_periods_del_protect AS
+ ON DELETE TO public.accounting_periods DO INSTEAD NOTHING;
+
+
--
-- Name: projects projects_search_content_trigger; Type: TRIGGER; Schema: public; Owner: -
--
diff --git a/lib/tasks/fablab/chain.rake b/lib/tasks/fablab/chain.rake
new file mode 100644
index 000000000..72ae9955c
--- /dev/null
+++ b/lib/tasks/fablab/chain.rake
@@ -0,0 +1,140 @@
+# frozen_string_literal: true
+
+namespace :fablab do
+ namespace :chain do
+ desc 'assign all footprints to existing records'
+ task all: :environment do
+ if Invoice.where.not(footprint: nil).count.positive?
+ print 'All footprints will be regenerated. Are you sure? (y/n) '
+ confirm = STDIN.gets.chomp
+ next unless confirm == 'y'
+ end
+ chain_invoices
+ chain_invoice_items
+ chain_history_values
+ chain_payment_schedules
+ chain_payment_schedules_items
+ chain_payment_schedules_objects if ActiveRecord::Base.connection.table_exists? PaymentScheduleObject.arel_table
+ end
+
+
+ desc 'assign all footprints to existing Invoice records'
+ task invoices: :environment do
+ if Invoice.where.not(footprint: nil).count.positive?
+ print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
+ confirm = STDIN.gets.chomp
+ next unless confirm == 'y'
+ end
+ chain_invoices
+ end
+
+ def chain_invoices
+ if AccountingPeriod.count.positive?
+ last_period = AccountingPeriod.order(start_at: :desc).first
+ puts "Regenerating from #{last_period.end_at}..."
+ Invoice.where('created_at > ?', last_period.end_at).order(:id).each(&:chain_record)
+ else
+ puts '(Re)generating all footprint...'
+ Invoice.order(:id).all.each(&:chain_record)
+ end
+ end
+
+ desc 'assign all footprints to existing InvoiceItem records'
+ task invoices_items: :environment do
+ if InvoiceItem.where.not(footprint: nil).count.positive?
+ print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
+ confirm = STDIN.gets.chomp
+ next unless confirm == 'y'
+ end
+ chain_invoice_items
+ end
+
+ def chain_invoice_items
+ if AccountingPeriod.count.positive?
+ last_period = AccountingPeriod.order(start_at: :desc).first
+ puts "Regenerating from #{last_period.end_at}..."
+ InvoiceItem.where('created_at > ?', last_period.end_at).order(:id).each(&:chain_record)
+ else
+ puts '(Re)generating all footprint...'
+ InvoiceItem.order(:id).all.each(&:chain_record)
+ end
+ end
+
+ desc 'assign all footprints to existing HistoryValue records'
+ task history_values: :environment do
+ if HistoryValue.where.not(footprint: nil).count.positive?
+ print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
+ confirm = STDIN.gets.chomp
+ next unless confirm == 'y'
+ end
+ chain_history_values
+ end
+
+ def chain_history_values
+ HistoryValue.order(:id).all.each(&:chain_record)
+ end
+
+ desc 'assign all footprints to existing PaymentSchedule records'
+ task payment_schedule: :environment do
+ if PaymentSchedule.where.not(footprint: nil).count.positive?
+ print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
+ confirm = STDIN.gets.chomp
+ next unless confirm == 'y'
+ end
+ chain_payment_schedules
+ end
+
+ def chain_payment_schedules
+ if AccountingPeriod.count.positive?
+ last_period = AccountingPeriod.order(start_at: :desc).first
+ puts "Regenerating from #{last_period.end_at}..."
+ PaymentSchedule.where('created_at > ?', last_period.end_at).order(:id).each(&:chain_record)
+ else
+ puts '(Re)generating all footprint...'
+ PaymentSchedule.order(:id).all.each(&:chain_record)
+ end
+ end
+
+ desc 'assign all footprints to existing PaymentScheduleItem records'
+ task payment_schedule_item: :environment do
+ if PaymentScheduleItem.where.not(footprint: nil).count.positive?
+ print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
+ confirm = STDIN.gets.chomp
+ next unless confirm == 'y'
+ end
+ chain_payment_schedules_items
+ end
+
+ def chain_payment_schedules_items
+ if AccountingPeriod.count.positive?
+ last_period = AccountingPeriod.order(start_at: :desc).first
+ puts "Regenerating from #{last_period.end_at}..."
+ PaymentScheduleItem.where('created_at > ?', last_period.end_at).order(:id).each(&:chain_record)
+ else
+ puts '(Re)generating all footprint...'
+ PaymentScheduleItem.order(:id).all.each(&:chain_record)
+ end
+ end
+
+ desc 'assign all footprints to existing PaymentScheduleObject records'
+ task payment_schedule_object: :environment do
+ if PaymentScheduleObject.where.not(footprint: nil).count.positive?
+ print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
+ confirm = STDIN.gets.chomp
+ next unless confirm == 'y'
+ end
+ chain_payment_schedules_objects
+ end
+
+ def chain_payment_schedules_objects
+ if AccountingPeriod.count.positive?
+ last_period = AccountingPeriod.order(start_at: :desc).first
+ puts "Regenerating from #{last_period.end_at}..."
+ PaymentScheduleObject.where('created_at > ?', last_period.end_at).order(:id).each(&:chain_record)
+ else
+ puts '(Re)generating all footprint...'
+ PaymentScheduleObject.order(:id).all.each(&:chain_record)
+ end
+ end
+ end
+end
diff --git a/lib/tasks/fablab/setup.rake b/lib/tasks/fablab/setup.rake
index 4f7fe5bb2..2a07c1ff8 100644
--- a/lib/tasks/fablab/setup.rake
+++ b/lib/tasks/fablab/setup.rake
@@ -2,53 +2,6 @@
namespace :fablab do
namespace :setup do
- desc 'assign all footprints to existing Invoice records'
- task chain_invoices_records: :environment do
- if Invoice.where.not(footprint: nil).count.positive?
- print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
- confirm = STDIN.gets.chomp
- next unless confirm == 'y'
- end
-
- if AccountingPeriod.count.positive?
- last_period = AccountingPeriod.order(start_at: :desc).first
- puts "Regenerating from #{last_period.end_at}..."
- Invoice.where('created_at > ?', last_period.end_at).order(:id).each(&:chain_record)
- else
- puts '(Re)generating all footprint...'
- Invoice.order(:id).all.each(&:chain_record)
- end
- end
-
- desc 'assign all footprints to existing InvoiceItem records'
- task chain_invoices_items_records: :environment do
- if InvoiceItem.where.not(footprint: nil).count.positive?
- print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
- confirm = STDIN.gets.chomp
- next unless confirm == 'y'
- end
-
- if AccountingPeriod.count.positive?
- last_period = AccountingPeriod.order(start_at: :desc).first
- puts "Regenerating from #{last_period.end_at}..."
- InvoiceItem.where('created_at > ?', last_period.end_at).order(:id).each(&:chain_record)
- else
- puts '(Re)generating all footprint...'
- InvoiceItem.order(:id).all.each(&:chain_record)
- end
- end
-
- desc 'assign all footprints to existing HistoryValue records'
- task chain_history_values_records: :environment do
- if HistoryValue.where.not(footprint: nil).count.positive?
- print 'WARNING: Footprints were already generated. Regenerate? (y/n) '
- confirm = STDIN.gets.chomp
- next unless confirm == 'y'
- end
-
- HistoryValue.order(:id).all.each(&:chain_record)
- end
-
desc 'assign environment value to all invoices'
task set_environment_to_invoices: :environment do
Invoice.all.each do |i|
diff --git a/test/fixtures/footprint_debugs.yml b/test/fixtures/footprint_debugs.yml
index a190b8fd0..d0fb038d5 100644
--- a/test/fixtures/footprint_debugs.yml
+++ b/test/fixtures/footprint_debugs.yml
@@ -1,4 +1,3 @@
----
footprint_debug_80:
id: 80
footprint: 89cf30fd18617b4efc2018a851dc72331d119d6ae25c67d7e10fc2f74e7aa897
@@ -466,8 +465,8 @@ footprint_debug_17:
id: 17
footprint: fe9c0191bc3fabdbaf432cc2ba90974d4d191909820a8f3aa5da44a136d7af2e
data: '1717Fab-manager
41 rue du Colonel Moutarde, 21000 DIJON France
Tél.:
- +33 1 23 45 67 98
Fax. : +33 1 23 45 67 98
SIRET : 237 082 474 00006
- - APE 913 E2018-12-17 12:23:01 +01001f8f6ed7823d682596900ab4cf3861fc71b26fe977385d3640d4fe0c5844d97fa'
+ +33 1 23 45 67 98
Fax. : +33 1 23 45 67 98
SIRET : 237 082 474 00006
+ - APE 913 E2018-12-17 12:23:01 +01001f8f6ed7823d682596900ab4cf3861fc71b26fe977385d3640d4fe0c5844d97fa'
klass: HistoryValue
created_at: '2021-04-27 09:34:38.718112'
updated_at: '2021-04-27 09:34:38.718112'
@@ -520,16 +519,16 @@ footprint_debug_10:
klass: HistoryValue
created_at: '2021-04-27 09:34:38.659699'
updated_at: '2021-04-27 09:34:38.659699'
-footprint_debug_09:
- id: 09
+footprint_debug_9:
+ id: 9
footprint: 2d4cf9ad05df864775caafb5e0269ff8371cbf6d75a31ba61dfc285f0971ddf6
data: 99iVBORw0KGgoAAAANSUhEUgAAAG0AAABZCAYAAAA0E6rtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA57WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMDEtMDNUMTE6MTg6MTgrMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNy0wNi0wNlQxNTo1NjoxMiswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTctMDYtMDZUMTU6NTY6MTIrMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6MmYwMTE5MTMtODI5NS0zOTQ0LWJmZjYtMTY5ZTNhZTQ5OThlPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6ZGU3ZGE1MmYtNGFiZi0xMWU3LTljODAtYWJjY2ZlM2JkNzdmPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6YTE5NTAzOTAtOGQwOS0zMzQ3LWFkNGQtMzkyNDQ2YjRiNWJiPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmExOTUwMzkwLThkMDktMzM0Ny1hZDRkLTM5MjQ0NmI0YjViYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNy0wMS0wM1QxMToxODoxOCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoyZjAxMTkxMy04Mjk1LTM5NDQtYmZmNi0xNjllM2FlNDk5OGU8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMDYtMDZUMTU6NTY6MTIrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTA5PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjg5PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7jSvdMAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAACL8SURBVHja7J15nB5Ftfe/VdXLsy8zk5lM9hASsrDKImgiuyCL7ILgq4KKu9flivuCiKjoFeWqCCoKQpTLIsiOrBqI5Bo2IQsJ2ZPJZPZn7ae7q94/+kkyQzIhExKSwVufT08mz3RX91Onzjm/86tTp4Vh+9oKYCFQA/YlThaHB+jlBmxuIcdyesmQQVAixELjYOPRSo25KDoJMdQ4mjTLKNFInBUENOGzEoc4vphEYnwVe4KNPdmgJoMeKxAjDSYnEAnABgSgo0cxZQNdINYJ9CqfcJmAxQaWpulZW0GZEI9RJHgcRYDmEKCIxQbKOLhoYF9COrDoJsQGRpNhPj20U+Xs+g0Ha712jKXpRhwdsrObhcAIQ61apeZ7xJXiQa+IxRvQNo5yWP/dABpDI8nRAn/mQcTfHmJN82GqTTjGECLw61fp+tn9ezObfhcIQAIKGwlIA2JlmRELfbz5LvajFeSTEJ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-12-17
12:23:01 +01001112900a2f37c570931861b8c3ce0159997f2f86229638d24bade9e2b3c3c669a
klass: HistoryValue
created_at: '2021-04-27 09:34:38.651204'
updated_at: '2021-04-27 09:34:38.651204'
-footprint_debug_08:
- id: 08
+footprint_debug_8:
+ id: 8
footprint: 2a8e03fea1b0eb03b6b31c9f0ae34b9589b81b4a08c4cbc64dfba26bba8a356b
data: 66Toute réservation de formation est définitive. Aucune annulation ne pourra
être effectuée, néanmoins au plus tard 24h avant le créneau fixé, vous pouvez
@@ -539,48 +538,48 @@ footprint_debug_08:
klass: HistoryValue
created_at: '2021-04-27 09:34:38.642711'
updated_at: '2021-04-27 09:34:38.642711'
-footprint_debug_07:
- id: 07
+footprint_debug_7:
+ id: 7
footprint: 310c9fd626d9634a925c0c27a8ce862a3dc69bf4de324f84597ae41e133b0ad0
data: 5555Training reservation2019-09-20 13:02:32 +0200184a19ca1d9c90611c54b2262faca2ab8ccf7ad3c40fc49fca6b33d824ee2afed
klass: HistoryValue
created_at: '2021-04-27 09:34:38.634532'
updated_at: '2021-04-27 09:34:38.634532'
-footprint_debug_06:
- id: 06
+footprint_debug_6:
+ id: 6
footprint: 84a19ca1d9c90611c54b2262faca2ab8ccf7ad3c40fc49fca6b33d824ee2afed
data: '3838
La présente politique de confidentialité définit et vous informe de - la manière dont _________ utilise et protège les informations que vous nous transmettez, - le cas échéant, lorsque vous utilisez le présent site accessible à partir de l’URL - suivante : _________ (ci-après le « Site »).
Veuillez noter que cette politique - de confidentialité est susceptible d’être modifiée ou complétée à tout moment - par _________, notamment en vue de se conformer à toute évolution législative, - réglementaire, jurisprudentielle ou technologique. Dans un tel cas, la date de - sa mise à jour sera clairement identifiée en tête de la présente politique et - l''Utilisateur sera informé par courriel. Ces modifications engagent l’Utilisateur - dès leur mise en ligne. Il convient par conséquent que l’Utilisateur consulte - régulièrement la présente politique de confidentialité et d’utilisation des cookies - afin de prendre connaissance de ses éventuelles modifications.
2018-12-31 11:22:25 - +01001def390d3e59107a6b3ad288e10a3559d8462b9102000d66c629db32f2b3be185' + la manière dont _________ utilise et protège les informations que vous nous transmettez, + le cas échéant, lorsque vous utilisez le présent site accessible à partir de l’URL + suivante : _________ (ci-après le « Site »).Veuillez noter que cette politique + de confidentialité est susceptible d’être modifiée ou complétée à tout moment + par _________, notamment en vue de se conformer à toute évolution législative, + réglementaire, jurisprudentielle ou technologique. Dans un tel cas, la date de + sa mise à jour sera clairement identifiée en tête de la présente politique et + l''Utilisateur sera informé par courriel. Ces modifications engagent l’Utilisateur + dès leur mise en ligne. Il convient par conséquent que l’Utilisateur consulte + régulièrement la présente politique de confidentialité et d’utilisation des cookies + afin de prendre connaissance de ses éventuelles modifications.
2018-12-31 11:22:25 + +01001def390d3e59107a6b3ad288e10a3559d8462b9102000d66c629db32f2b3be185' klass: HistoryValue created_at: '2021-04-27 09:34:38.626108' updated_at: '2021-04-27 09:34:38.626108' -footprint_debug_05: - id: 05 +footprint_debug_5: + id: 5 footprint: 112900a2f37c570931861b8c3ce0159997f2f86229638d24bade9e2b3c3c669a data: '77Règle sur la date de début des abonnements
Merci de bien prendre ses informations en compte, et merci de votre compréhension.
- L''équipe du Fab Lab.
Merci de bien prendre ses informations en compte, et merci de votre compréhension.
+ L''équipe du Fab Lab.
Fab-manager est - outil de gestion des atelier de fabrication numérique, permettant de réserver - des machines de découpe, des imprimantes 3D, etc. tout en gérant simplement les - aspect financier, comptable et statistiques de votre espace.
Fab-manager est un projet libre: ouvert à tous, il offre la - possibilité de contribuer soi-même au code, de télécharger le logiciel, de l''étudier - et de le redistribuer. Vous n''êtes pas technicien ? Vous pouvez quand même participer - à traduire Fab-manager dans votre - langue.
Fab-manager favorise le partage de connaissances grâce au réseau - OpenLab: les projets que vous documentez sont partagés avec l''ensemble du réseau - des Fab-managers.
2018-12-17 12:23:01 +01001' + outil de gestion des atelier de fabrication numérique, permettant de réserver + des machines de découpe, des imprimantes 3D, etc. tout en gérant simplement les + aspect financier, comptable et statistiques de votre espace.Fab-manager est un projet libre: ouvert à tous, il offre la + possibilité de contribuer soi-même au code, de télécharger le logiciel, de l''étudier + et de le redistribuer. Vous n''êtes pas technicien ? Vous pouvez quand même participer + à traduire Fab-manager dans votre + langue.
Fab-manager favorise le partage de connaissances grâce au réseau + OpenLab: les projets que vous documentez sont partagés avec l''ensemble du réseau + des Fab-managers.
2018-12-17 12:23:01 +01001' klass: HistoryValue created_at: '2021-04-27 09:34:38.576131' updated_at: '2021-04-27 09:34:38.576131' @@ -740,3 +739,1479 @@ footprint_debug_85: klass: Invoice created_at: '2021-04-27 09:34:38.429397' updated_at: '2021-04-27 09:34:38.429397' +footprint_debug_100: + id: 100 + footprint: c3d8574f4d804d43fd881eb9e0db66a01b841d324d25526e14017a748a318f0c + data: 2016-04-05 10:35:52 +0200test41Reservation7112030027014e4182aed0e62b75797918f51b0019ce6a5537bcd750f3fac3e21a23eaf058b + klass: Invoice + created_at: '2021-05-31 10:44:48.812940' + updated_at: '2021-05-31 10:44:48.812940' +footprint_debug_101: + id: 101 + footprint: f748fd7c882987e02becbbe939f18fa9109afdea8157a4bb498101b7da62e1da + data: 2016-04-05 10:36:46 +0200test52Reservation31150603131500c3d8574f4d804d43fd881eb9e0db66a01b841d324d25526e14017a748a318f0c + klass: Invoice + created_at: '2021-05-31 10:44:48.852685' + updated_at: '2021-05-31 10:44:48.852685' +footprint_debug_102: + id: 102 + footprint: 448cb3bb8ff643f802ed3326707bef512747f49cfa74eb27c4dc3352721a9dd3 + data: 2021-01-04 15:51:21 +0100test64Subscription81210104183000f748fd7c882987e02becbbe939f18fa9109afdea8157a4bb498101b7da62e1da + klass: Invoice + created_at: '2021-05-31 10:44:48.881699' + updated_at: '2021-05-31 10:44:48.881699' +footprint_debug_103: + id: 103 + footprint: 6a3b0a96bd17fdc6374b83acac3350c0db90107be342579485d22e87946e360c + data: 02016-04-05 10:35:52 +0200Formation Laser / Vinyle April 11, 2012 08:00 - + 12:00 PM44acb83d8083349073da133721f99ad9094d8739cee3b71b58d668f3947ad72a80 + klass: InvoiceItem + created_at: '2021-05-31 10:44:48.914875' + updated_at: '2021-05-31 10:44:48.914875' +footprint_debug_104: + id: 104 + footprint: a3b6539bd1af14b7e7af1d2798e63b36186d16e84e4d39557293016cdf694891 + data: 15002016-04-05 10:36:46 +0200Imprimante 3D June 15, 2015 12:00 - 01:00 PM556a3b0a96bd17fdc6374b83acac3350c0db90107be342579485d22e87946e360c + klass: InvoiceItem + created_at: '2021-05-31 10:44:48.933369' + updated_at: '2021-05-31 10:44:48.933369' +footprint_debug_105: + id: 105 + footprint: e49ad0a4f9bc56785240127eef524566086d727876a62cc7f83e2844f1a4c2e2 + data: 30002016-04-05 10:36:46 +0200Mensuel - standard, association - month663a3b6539bd1af14b7e7af1d2798e63b36186d16e84e4d39557293016cdf694891 + klass: InvoiceItem + created_at: '2021-05-31 10:44:48.949726' + updated_at: '2021-05-31 10:44:48.949726' +footprint_debug_106: + id: 106 + footprint: 11a7ac4270ff4d2b6d21d2d9272b8f49df16f548b57dec143463abeeea59c084 + data: '2018-12-17 12:23:01 +0100111Fab-manager + est outil de gestion des atelier de fabrication numérique, permettant de réserver + des machines de découpe, des imprimantes 3D, etc. tout en gérant simplement les + aspect financier, comptable et statistiques de votre espace.
Fab-manager est un projet libre: ouvert à tous, il offre la + possibilité de contribuer soi-même au code, de télécharger le logiciel, de l''étudier + et de le redistribuer. Vous n''êtes pas technicien ? Vous pouvez quand même participer + à traduire Fab-manager dans votre + langue.
Fab-manager favorise le partage de connaissances grâce au réseau + OpenLab: les projets que vous documentez sont partagés avec l''ensemble du réseau + des Fab-managers.
' + klass: HistoryValue + created_at: '2021-05-31 10:44:48.981657' + updated_at: '2021-05-31 10:44:48.981657' +footprint_debug_107: + id: 107 + footprint: 863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + data: 2018-12-17 12:23:01 +0100212Imaginer, Fabriquer,Visitez le site de Fab-manager
863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + klass: HistoryValue + created_at: '2021-05-31 10:44:49.025035' + updated_at: '2021-05-31 10:44:49.025035' +footprint_debug_109: + id: 109 + footprint: 1326ca6a4d4e27f1ce64237fd08ba802ba0b9f9c93882b42eac7c8f43cfe5672 + data: 2018-12-17 12:23:01 +0100414fab_manager5849b0af2169bb1f83a8f0a0ecf572a1adca4034097177fa08f91448bfdf427c + klass: HistoryValue + created_at: '2021-05-31 10:44:49.039997' + updated_at: '2021-05-31 10:44:49.039997' +footprint_debug_110: + id: 110 + footprint: 36836db81057405efcdf5ffbef57a961d653afbf0dfd1baad36b902931782fe9 + data: 2018-12-17 12:23:01 +0100515Tout achat d'heure machine est définitif. Aucune + annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le créneau + fixé, vous pouvez en modifier la date et l'horaire à votre convenance et en fonction + du calendrier proposé. Passé ce délais, aucun changement ne pourra être effectué.863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + klass: HistoryValue + created_at: '2021-05-31 10:44:49.059133' + updated_at: '2021-05-31 10:44:49.059133' +footprint_debug_111: + id: 111 + footprint: 6260c406f9939a6b57c33f6382d921aa6636ddeef4a1073905ebc9c2e6568f8a + data: 2018-12-17 12:23:01 +0100616Toute réservation de formation est définitive. + Aucune annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le + créneau fixé, vous pouvez en modifier la date et l'horaire à votre convenance + et en fonction du calendrier proposé. Passé ce délais, aucun changement ne pourra + être effectué.863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + klass: HistoryValue + created_at: '2021-05-31 10:44:49.081555' + updated_at: '2021-05-31 10:44:49.081555' +footprint_debug_112: + id: 112 + footprint: 0d5252abac8c924aa7a61db5e4928ce7a6ab419de8e1c0f3ce2ddde579c753bc + data: '2018-12-17 12:23:01 +0100717Règle sur la date de début des abonnements
Merci de bien prendre ses informations en compte, et merci de votre compréhension.
+ L''équipe du Fab Lab.
La présente politique de confidentialité + définit et vous informe de la manière dont _________ utilise et protège les informations + que vous nous transmettez, le cas échéant, lorsque vous utilisez le présent site + accessible à partir de l’URL suivante : _________ (ci-après le « Site »).
Veuillez + noter que cette politique de confidentialité est susceptible d’être modifiée ou + complétée à tout moment par _________, notamment en vue de se conformer à toute + évolution législative, réglementaire, jurisprudentielle ou technologique. Dans + un tel cas, la date de sa mise à jour sera clairement identifiée en tête de la + présente politique et l''Utilisateur sera informé par courriel. Ces modifications + engagent l’Utilisateur dès leur mise en ligne. Il convient par conséquent que + l’Utilisateur consulte régulièrement la présente politique de confidentialité + et d’utilisation des cookies afin de prendre connaissance de ses éventuelles modifications.
d0dfa7218e2fa627bf2f2ffe149b1fe3781114388ebeab312297f21ae1616888' + klass: HistoryValue + created_at: '2021-05-31 10:44:49.782426' + updated_at: '2021-05-31 10:44:49.782426' +footprint_debug_143: + id: 143 + footprint: a4f7c9059921e5c9da8cdef5f246a547bfebafbf7a56d46e910288cc0caa9cdb + data: 2019-09-20 13:02:32 +02003913953027dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.798897' + updated_at: '2021-05-31 10:44:49.798897' +footprint_debug_144: + id: 144 + footprint: 9349cee04b26263c9518c34199d0fff6ff7f324c588f8af49b41085a53766755 + data: 2019-09-20 13:02:32 +020040140580127dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.815463' + updated_at: '2021-05-31 10:44:49.815463' +footprint_debug_145: + id: 145 + footprint: 60196967b4a9c106c921e7c1034dd1aa0e7431702483e6f66c535e8851822dee + data: 2019-09-20 13:02:32 +020041141Client card27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.848893' + updated_at: '2021-05-31 10:44:49.848893' +footprint_debug_146: + id: 146 + footprint: 43e77c241c35f7fa5a9e58d611ee9e030fb4a89dcf42e79d67f787f0389807c9 + data: 2019-09-20 13:02:32 +020042142580227dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.866586' + updated_at: '2021-05-31 10:44:49.866586' +footprint_debug_147: + id: 147 + footprint: 57935b22ecc813b7aa735f0142c6ac2bd4962f95d20d5ae20370403647f14205 + data: 2019-09-20 13:02:32 +020043143Client wallet27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.882448' + updated_at: '2021-05-31 10:44:49.882448' +footprint_debug_148: + id: 148 + footprint: 1eddc677f029c65c81688f838c6ddf4c8b7f298daef5cbff270e55208aba4236 + data: 2019-09-20 13:02:32 +020044144580327dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.898923' + updated_at: '2021-05-31 10:44:49.898923' +footprint_debug_149: + id: 149 + footprint: 42fd8d11c1af8d18bf8ac1f290a014e04bc79078cdb599e341fab9d05f086f00 + data: 2019-09-20 13:02:32 +020045145Client other27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.926456' + updated_at: '2021-05-31 10:44:49.926456' +footprint_debug_150: + id: 150 + footprint: f52715c29570c1961408fb6a010cc134d8dd3254fe93765d437917b12f75d4c3 + data: 2019-09-20 13:02:32 +020046146409127dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:49.990625' + updated_at: '2021-05-31 10:44:49.990625' +footprint_debug_151: + id: 151 + footprint: f63a5c6a597a81e882a61acbf1e86b55fffd13f5f85282ea4387c1754ed885c8 + data: 2019-09-20 13:02:32 +020047147Wallet credit27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.007735' + updated_at: '2021-05-31 10:44:50.007735' +footprint_debug_152: + id: 152 + footprint: 386df90929021efd847f43c74ed9ab41117b3209e8f6aae28f3a59e766e52fa9 + data: 2019-09-20 13:02:32 +02004814844527dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.024040' + updated_at: '2021-05-31 10:44:50.024040' +footprint_debug_153: + id: 153 + footprint: 706067a093562d0bcfcd67cf31e6cf8506feea9a88181c145058f93b39dc5f89 + data: 2019-09-20 13:02:32 +020049149VAT27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.040610' + updated_at: '2021-05-31 10:44:50.040610' +footprint_debug_154: + id: 154 + footprint: 9553e0b6991ba577e484f2f47938324fe10ae372788c938d99e9030d4dfa97e6 + data: 2019-09-20 13:02:32 +020050150706127dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.098925' + updated_at: '2021-05-31 10:44:50.098925' +footprint_debug_155: + id: 155 + footprint: d870d43cfa037ed4e577b45d06ffa1cde9f96365f5b5d757edcc7f24d2045cbc + data: 2019-09-20 13:02:32 +020051151Subscription27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.125955' + updated_at: '2021-05-31 10:44:50.125955' +footprint_debug_156: + id: 156 + footprint: 8f71528e30463e8c9da2317e0ceeb619b863167ac08b8a38e30420612e7bdf35 + data: 2019-09-20 13:02:32 +020052152706227dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.141290' + updated_at: '2021-05-31 10:44:50.141290' +footprint_debug_157: + id: 157 + footprint: 16253f69ecf08f3c44b6bbc8b1c8a9cc8fec5dea8595b0396f92be0ab485b589 + data: 2019-09-20 13:02:32 +020053153Machine reservation27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.167793' + updated_at: '2021-05-31 10:44:50.167793' +footprint_debug_158: + id: 158 + footprint: 95d83b452d348c1fd7fccbe00ac310886b92f668d4fbe2ab4739e9f7be1de3b1 + data: 2019-09-20 13:02:32 +020054154706327dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.182618' + updated_at: '2021-05-31 10:44:50.182618' +footprint_debug_159: + id: 159 + footprint: 5a63f632113822d655fb9e7ffe66cddb5a6a940e3d944e0fb37f180b8c96d608 + data: 2019-09-20 13:02:32 +020055155Training reservation27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.199157' + updated_at: '2021-05-31 10:44:50.199157' +footprint_debug_160: + id: 160 + footprint: f0732c33294a81312e31515374a2f38d7a84d20e87619061c7aca711aacdedbd + data: 2019-09-20 13:02:32 +020056156706427dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.240986' + updated_at: '2021-05-31 10:44:50.240986' +footprint_debug_161: + id: 161 + footprint: a036b40986b8ac41b64553daff923ad02136c6655b181a0e30222711bdc60c50 + data: 2019-09-20 13:02:32 +020057157Event reservation27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.261398' + updated_at: '2021-05-31 10:44:50.261398' +footprint_debug_162: + id: 162 + footprint: 44c7fc5dca719095c486f4d19dc890d0963faa116bb2cb61858a505c6aec643b + data: 2019-09-20 13:02:32 +020058158706527dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.285608' + updated_at: '2021-05-31 10:44:50.285608' +footprint_debug_163: + id: 163 + footprint: e2d46de79551e9e95f237141e5cf632c3e7688b9efb5abdaf54e48ab692a5c39 + data: 2019-09-20 13:02:32 +020059159Space reservation27dc2327d689cfa1f60b270b3c04b3c9958a48080e6ce148fd99e6cae653464d + klass: HistoryValue + created_at: '2021-05-31 10:44:50.311004' + updated_at: '2021-05-31 10:44:50.311004' +footprint_debug_164: + id: 164 + footprint: 86ccc96c21c172700b82232a6657b27cc725abf39d018fc4e2d91521dd2c737d + data: |- + 2020-03-25 10:24:09 +010060160Fab-manager + est outil de gestion des atelier de fabrication numérique, permettant de réserver + des machines de découpe, des imprimantes 3D, etc. tout en gérant simplement les + aspect financier, comptable et statistiques de votre espace.
Fab-manager est un projet libre: ouvert à tous, il offre la + possibilité de contribuer soi-même au code, de télécharger le logiciel, de l''étudier + et de le redistribuer. Vous n''êtes pas technicien ? Vous pouvez quand même participer + à traduire Fab-manager dans votre + langue.
Fab-manager favorise le partage de connaissances grâce au réseau + OpenLab: les projets que vous documentez sont partagés avec l''ensemble du réseau + des Fab-managers.
' + klass: HistoryValue + created_at: '2021-05-31 10:47:52.778202' + updated_at: '2021-05-31 10:47:52.778202' +footprint_debug_197: + id: 197 + footprint: 863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + data: 2018-12-17 12:23:01 +0100212Imaginer, Fabriquer,Visitez le site de Fab-manager
863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + klass: HistoryValue + created_at: '2021-05-31 10:47:52.795041' + updated_at: '2021-05-31 10:47:52.795041' +footprint_debug_199: + id: 199 + footprint: b06406c26d39d8444e49c8fcd03d9513405d5c3bc3d1e68f2a6cb993a961dd16 + data: 2018-12-17 12:23:01 +0100414fab_manager4512a5fb7e70ce65843915ff3ef0f19bda43b78ad994000ed992ed34b7478970 + klass: HistoryValue + created_at: '2021-05-31 10:47:52.810185' + updated_at: '2021-05-31 10:47:52.810185' +footprint_debug_200: + id: 200 + footprint: 36836db81057405efcdf5ffbef57a961d653afbf0dfd1baad36b902931782fe9 + data: 2018-12-17 12:23:01 +0100515Tout achat d'heure machine est définitif. Aucune + annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le créneau + fixé, vous pouvez en modifier la date et l'horaire à votre convenance et en fonction + du calendrier proposé. Passé ce délais, aucun changement ne pourra être effectué.863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + klass: HistoryValue + created_at: '2021-05-31 10:47:52.819702' + updated_at: '2021-05-31 10:47:52.819702' +footprint_debug_201: + id: 201 + footprint: 6260c406f9939a6b57c33f6382d921aa6636ddeef4a1073905ebc9c2e6568f8a + data: 2018-12-17 12:23:01 +0100616Toute réservation de formation est définitive. + Aucune annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le + créneau fixé, vous pouvez en modifier la date et l'horaire à votre convenance + et en fonction du calendrier proposé. Passé ce délais, aucun changement ne pourra + être effectué.863d0000103653d93df5af91b4af6da57e41be79c068bf885e4d09148b3bc5a6 + klass: HistoryValue + created_at: '2021-05-31 10:47:52.827996' + updated_at: '2021-05-31 10:47:52.827996' +footprint_debug_202: + id: 202 + footprint: be644e32fb15547e851ba124267828aecd608b2f190cc074310ef3bc0debeb65 + data: '2018-12-17 12:23:01 +0100717Règle sur la date de début des abonnements
Merci de bien prendre ses informations en compte, et merci de votre compréhension.
+ L''équipe du Fab Lab.
La présente politique de confidentialité + définit et vous informe de la manière dont _________ utilise et protège les informations + que vous nous transmettez, le cas échéant, lorsque vous utilisez le présent site + accessible à partir de l’URL suivante : _________ (ci-après le « Site »).
Veuillez + noter que cette politique de confidentialité est susceptible d’être modifiée ou + complétée à tout moment par _________, notamment en vue de se conformer à toute + évolution législative, réglementaire, jurisprudentielle ou technologique. Dans + un tel cas, la date de sa mise à jour sera clairement identifiée en tête de la + présente politique et l''Utilisateur sera informé par courriel. Ces modifications + engagent l’Utilisateur dès leur mise en ligne. Il convient par conséquent que + l’Utilisateur consulte régulièrement la présente politique de confidentialité + et d’utilisation des cookies afin de prendre connaissance de ses éventuelles modifications.
ce33d038b13891cfc07f3357f70fd91ceed291526076f24365004e0098d55a0a' + klass: HistoryValue + created_at: '2021-05-31 10:47:53.443991' + updated_at: '2021-05-31 10:47:53.443991' +footprint_debug_233: + id: 233 + footprint: 676137dedce73f94f0bf0bf5ddb6bb8979bca789d8ebb9eb449f987d606378ee + data: 2019-09-20 13:02:32 +02003913953052880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.460896' + updated_at: '2021-05-31 10:47:53.460896' +footprint_debug_234: + id: 234 + footprint: 5381f20f8b6e820de9a05cdee4c28d9f152d60bbf9844defd239b5e0635eb9eb + data: 2019-09-20 13:02:32 +020040140580152880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.478851' + updated_at: '2021-05-31 10:47:53.478851' +footprint_debug_235: + id: 235 + footprint: 751530b54120dee2be7e47d4f64b623a0bc5301d0efdefb73d91e283f65b7588 + data: 2019-09-20 13:02:32 +020041141Client card52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.494528' + updated_at: '2021-05-31 10:47:53.494528' +footprint_debug_236: + id: 236 + footprint: cf0348a17e75cb2263ee5ab12bb7f199c3cae81af13f4fb35a1abd2ce32e361b + data: 2019-09-20 13:02:32 +020042142580252880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.522093' + updated_at: '2021-05-31 10:47:53.522093' +footprint_debug_237: + id: 237 + footprint: aa18954c77f6620d768cdceaacd35bf4f7225726f6a77cc6076dc048bd8c9d53 + data: 2019-09-20 13:02:32 +020043143Client wallet52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.579508' + updated_at: '2021-05-31 10:47:53.579508' +footprint_debug_238: + id: 238 + footprint: 07f3acfc221569ccf3e8c46f69af14d4c5ef8727c9fac604682973b8c8b2dc15 + data: 2019-09-20 13:02:32 +020044144580352880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.597600' + updated_at: '2021-05-31 10:47:53.597600' +footprint_debug_239: + id: 239 + footprint: 23270f31cb42471b18d746ea6f0d278f865e811e66f360e69e3df4f5812c02f9 + data: 2019-09-20 13:02:32 +020045145Client other52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.619043' + updated_at: '2021-05-31 10:47:53.619043' +footprint_debug_240: + id: 240 + footprint: 9747bc29717bd9e9083d3f3b779fe658beb51532188400965cd5923eea4c916c + data: 2019-09-20 13:02:32 +020046146409152880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.644098' + updated_at: '2021-05-31 10:47:53.644098' +footprint_debug_241: + id: 241 + footprint: 42e8e30ac49dfd5ff4ff24c1c969b87b849c1a0395e3b6f1db6de78fa7589054 + data: 2019-09-20 13:02:32 +020047147Wallet credit52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.682461' + updated_at: '2021-05-31 10:47:53.682461' +footprint_debug_242: + id: 242 + footprint: 515a13100d45228e691ade73abdef70ad9f216c4c556b14afc46931826d51897 + data: 2019-09-20 13:02:32 +02004814844552880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.702781' + updated_at: '2021-05-31 10:47:53.702781' +footprint_debug_243: + id: 243 + footprint: bda7963ce57109d188050dc1871193da1a79a1d191a883bb852af7b417fa0a8b + data: 2019-09-20 13:02:32 +020049149VAT52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.765047' + updated_at: '2021-05-31 10:47:53.765047' +footprint_debug_244: + id: 244 + footprint: 33f356079d34dca2614ab882a2728dce820eda54747104c4afd2db0f8ec60018 + data: 2019-09-20 13:02:32 +020050150706152880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.786504' + updated_at: '2021-05-31 10:47:53.786504' +footprint_debug_245: + id: 245 + footprint: 20e6997f8a9645862a100aba8026bdda14e30f3c1f09b9f11cfaa3b31c63588f + data: 2019-09-20 13:02:32 +020051151Subscription52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.802704' + updated_at: '2021-05-31 10:47:53.802704' +footprint_debug_246: + id: 246 + footprint: 3a26e77a3e0cbfaac0aacd2ae7ca3a59cddeebb5669f454a4bd6afa64e68f10d + data: 2019-09-20 13:02:32 +020052152706252880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.819128' + updated_at: '2021-05-31 10:47:53.819128' +footprint_debug_247: + id: 247 + footprint: 499cb8bbfbeea44ed8bd10ef41b28d091b39bdffb33ddc66bd6e2db6cfd82d8c + data: 2019-09-20 13:02:32 +020053153Machine reservation52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.835784' + updated_at: '2021-05-31 10:47:53.835784' +footprint_debug_248: + id: 248 + footprint: e4a1706c69e7a744f0effffe0e00b14e8aa2d52d8b359137c788f25f0a1e13b2 + data: 2019-09-20 13:02:32 +020054154706352880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.855352' + updated_at: '2021-05-31 10:47:53.855352' +footprint_debug_249: + id: 249 + footprint: 433dc54f261c729890c9235ff75a96982e86c916c920955a57a6bb1808e2b2ad + data: 2019-09-20 13:02:32 +020055155Training reservation52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.880688' + updated_at: '2021-05-31 10:47:53.880688' +footprint_debug_250: + id: 250 + footprint: d53eb43de02fa83bc9bf20a5f45b4c10e2af363ccfb9fefb7aefe25179f6c402 + data: 2019-09-20 13:02:32 +020056156706452880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.903314' + updated_at: '2021-05-31 10:47:53.903314' +footprint_debug_251: + id: 251 + footprint: dec102d4f03bc3924543dda651a42fbaf25cc41e16dc374054e6a1097967df1a + data: 2019-09-20 13:02:32 +020057157Event reservation52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.931403' + updated_at: '2021-05-31 10:47:53.931403' +footprint_debug_252: + id: 252 + footprint: 77566522fe1f8705f27237f11c65e6913163b3b59a9f82e177f143cb1c4302f8 + data: 2019-09-20 13:02:32 +020058158706552880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.963099' + updated_at: '2021-05-31 10:47:53.963099' +footprint_debug_253: + id: 253 + footprint: a53bb18fe3b143bd3fb000bda84ae4b5835589997680818f90a79a0698f71781 + data: 2019-09-20 13:02:32 +020059159Space reservation52880aed28112ce904b6a8a7c3bbb085931a3eb5bc54d16762c00973efd4349b + klass: HistoryValue + created_at: '2021-05-31 10:47:53.977743' + updated_at: '2021-05-31 10:47:53.977743' +footprint_debug_285: + id: 285 + footprint: b8bfabaf0782032d8ebaeb2f8319817be52315ec0e962c6dd6b5beda5f71b722 + data: 30002016-04-05 10:36:46 +0200Mensuel - standard, association - month663b1d3ec7e566a0803278ba9bcbb71dcdb38aae972a2270c62e3e0bcf3738dabb + klass: InvoiceItem + created_at: '2021-05-31 10:48:22.345803' + updated_at: '2021-05-31 10:48:22.345803' +footprint_debug_254: + id: 254 + footprint: b381333b5149966a4dc8ed7ad1e53160a0743d5de08d10052f37312c3d39c90a + data: |- + 2020-03-25 10:24:09 +010060160